在 Deno 中使用 Request 进行 HTTPS 请求时,有时会出现 “self signed certificate” 的问题。这是因为在 HTTP 通讯中,为了确保通讯安全,需要使用 SSL/TLS 协议。而证书扮演了一个非常重要的角色,它能够保证通讯的“真实性和完整性”。当然,在我们自己开发和测试的环境中,我们并不需要一个权威的证书,我们使用自签名证书也是可以的。
下面,我将会介绍如何解决 Deno 中使用 Request 出现的 “self signed certificate” 问题,希望对大家有所帮助。
需要解决的问题
当我们在 Deno 代码中通过 Request 发起 HTTPS 请求时,如果请求的目标服务(的证书)是使用自签名证书的,则我们会得到一个类似下面的错误信息:
error: Uncaught (in promise) TypeError: Failed to fetch https://example.com/resource: self signed certificate
这是因为 Deno 内置的证书链中并没有我们的自签名证书。
解决方案
Deno 的 Request API 提供了一个选项 {certFile?, keyFile?, caFile?, checkServerIdentity?}
,可以让我们指定自己的证书、私钥、和证书链等。根据该选项,我们可以采取以下两种方案中的一种来解决 “self signed certificate” 问题。
方案一:信任自签名证书
我们可以在我们的 Deno 程序中添加以下代码来信任我们的自签名证书:
-- -------------------- ---- ------- ------ - -- ----- ---- -------- ------ - ------------ - ---- ----- ----- ------- - - --------- ------------------------ -------- ----------------------- ------- --------------------------- -------------------- ------ -- ----- ---- - ------------------------------- ----- --- - ------------------------------ ----- --- - ----- ------------------------------------- - ------- ------ -------- --- --------- --------------- ------------------ --- ----- ---------------- -------- ------ -------- --- ------ --- ------------- ----- ---- --- ----------------------------- ------------------- ------ --- --- ----------------- ------------
通过这种方式,我们就可以在我们的 Deno 程序中信任我们的自签名证书了。在这个例子中,我们使用了 certFile
、keyFile
、caFile
选项来指定证书、私钥、和证书链文件的路径。注意 checkServerIdentity
选项被设为了 false
,这是因为我们的证书并不是由权威机构颁发的。
方案二:不信任自签名证书
我们也可以通过禁用 TLS 检查的方式来解决这个问题,但这种方式不太安全,只适合在测试环境中使用。我们可以添加以下代码来禁用 TLS 检查:
-- -------------------- ---- ------- ------ - ---------------- - ---- -------- ------ - ------------ - ---- ----- ----- ------- - - --------- ------------------------ -------- ----------------------- ------- --------------------------- -- ----- ---- - ------------------------------- ----- --- - ------------------------------ ----- ---------- - ------------------ ----- ---- --- ----------------------------- ------------------- ------ --- ----- --- - ----- ------------------------------------- - ------- ------ -------- --- --------- --------------- ------------------ --- ----- ---------------- -------- ------ -------- --- ------- ----------- --- ----------------- ------------
通过这种方式,我们在发起 HTTPS 请求时,将会禁用 TLS 检查,这样就能忽略证书链的问题了。 值得注意的是,禁用 TLS 检查是一种不太安全的方式,在生产环境中应该使用方案一。
结论
本文介绍了两种解决 Deno 中使用 Request 出现的 “self signed certificate” 问题的方式。当然,这两种方式都有其优缺点,我们需要根据实际情况做出选择。从一些根本上来说,使用方案一比较安全,也比较符合标准。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66f2b238a44b36ee57670e96