在本章中,我们将探讨如何在 Deno 中使用 HTTPS。HTTPS 是一种安全的 HTTP 协议版本,它通过 SSL/TLS 加密来保护数据传输的安全性。我们将学习如何设置和使用 HTTPS 服务器,以及如何发起 HTTPS 请求。
安装和配置 Deno
首先,确保你已经安装了最新版本的 Deno。你可以通过运行以下命令来检查是否已安装 Deno:
deno --version
如果尚未安装,可以参考官方文档进行安装。
创建一个简单的 HTTPS 服务器
要创建一个简单的 HTTPS 服务器,我们需要生成或获取一个有效的 SSL/TLS 证书。这里我们使用自签名证书作为示例。你可以通过以下命令生成一个自签名证书:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
这个命令会生成两个文件:key.pem 和 cert.pem。接下来,我们将使用这两个文件来启动一个 HTTPS 服务器。
创建一个名为 server.ts 的文件,并添加以下代码:
import { serve } from "https://deno.land/std@0.178.0/http/server.ts";
const PORT = 443;
const server = serve({ port: PORT, secure: true });
for await (const req of server) {
req.respond({ body: "Hello World\n" });
}为了使服务器能够使用 HTTPS,我们需要指定 secure: true,并提供证书和私钥路径。修改上述代码如下:
// www.javascriptcn.com code example
import { serve } from "https://deno.land/std@0.178.0/http/server.ts";
const PORT = 443;
const server = serve({
port: PORT,
secure: true,
certFile: "./cert.pem",
keyFile: "./key.pem"
});
for await (const req of server) {
req.respond({ body: "Hello World\n" });
}启动服务器:
deno run --allow-net --allow-read server.ts
注意,你需要提供 --allow-net 和 --allow-read 权限,以便 Deno 能够监听网络端口和读取文件。
发起 HTTPS 请求
现在我们已经设置了一个 HTTPS 服务器,接下来我们将学习如何使用 Deno 发起 HTTPS 请求。我们可以使用内置的 fetch API 来实现这一点。
创建一个新的文件,例如 client.ts,并添加以下代码:
// www.javascriptcn.com code example
const url = "https://localhost";
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const text = await response.text();
console.log(text);运行这个客户端脚本:
deno run --allow-net client.ts
这将向我们刚刚设置的 HTTPS 服务器发送请求,并打印出服务器返回的内容。
处理 HTTPS 证书错误
当使用自签名证书时,浏览器或 Deno 可能会抛出证书验证错误。为了处理这种情况,我们可以禁用证书验证。然而,这应该仅用于测试环境,因为禁用证书验证会带来安全风险。
在 Deno 中,可以通过传递一个自定义的 Agent 来忽略证书错误。下面是一个示例:
// www.javascriptcn.com code example
import { Agent } from "https://deno.land/std@0.178.0/http/agent.ts";
const agent = new Agent({ rejectUnauthorized: false });
const url = "https://localhost";
const response = await fetch(url, { agent });
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const text = await response.text();
console.log(text);请注意,禁用证书验证可能会导致中间人攻击的风险增加,因此请谨慎使用。
结论
在本章中,我们学习了如何在 Deno 中设置和使用 HTTPS。我们从生成自签名证书开始,然后创建了一个简单的 HTTPS 服务器,并展示了如何使用 Deno 发起 HTTPS 请求。最后,我们还讨论了如何处理证书错误。这些基础知识可以帮助你在实际项目中实现安全的数据传输。
接下来,我们可以探索更多关于 Deno 的高级特性和最佳实践。