解决 Deno 中使用 Request 出现的 “self signed certificate” 问题

阅读时长 5 分钟读完

在 Deno 中使用 Request 进行 HTTPS 请求时,有时会出现 “self signed certificate” 的问题。这是因为在 HTTP 通讯中,为了确保通讯安全,需要使用 SSL/TLS 协议。而证书扮演了一个非常重要的角色,它能够保证通讯的“真实性和完整性”。当然,在我们自己开发和测试的环境中,我们并不需要一个权威的证书,我们使用自签名证书也是可以的。

下面,我将会介绍如何解决 Deno 中使用 Request 出现的 “self signed certificate” 问题,希望对大家有所帮助。

需要解决的问题

当我们在 Deno 代码中通过 Request 发起 HTTPS 请求时,如果请求的目标服务(的证书)是使用自签名证书的,则我们会得到一个类似下面的错误信息:

这是因为 Deno 内置的证书链中并没有我们的自签名证书。

解决方案

Deno 的 Request API 提供了一个选项 {certFile?, keyFile?, caFile?, checkServerIdentity?},可以让我们指定自己的证书、私钥、和证书链等。根据该选项,我们可以采取以下两种方案中的一种来解决 “self signed certificate” 问题。

方案一:信任自签名证书

我们可以在我们的 Deno 程序中添加以下代码来信任我们的自签名证书:

-- -------------------- ---- -------
------ - -- ----- ---- --------
------ - ------------ - ---- -----

----- ------- - -
  --------- ------------------------
  -------- -----------------------
  ------- ---------------------------
  -------------------- ------
--

----- ---- - -------------------------------
----- --- - ------------------------------

----- --- - ----- ------------------------------------- -
  ------- ------
  -------- --- --------- --------------- ------------------ ---
  ----- ----------------
    -------- ------ --------
  ---
  ------ --- -------------
    -----
    ----
    --- -----------------------------
    ------------------- ------
  ---
---

----------------- ------------

通过这种方式,我们就可以在我们的 Deno 程序中信任我们的自签名证书了。在这个例子中,我们使用了 certFilekeyFilecaFile 选项来指定证书、私钥、和证书链文件的路径。注意 checkServerIdentity 选项被设为了 false,这是因为我们的证书并不是由权威机构颁发的。

方案二:不信任自签名证书

我们也可以通过禁用 TLS 检查的方式来解决这个问题,但这种方式不太安全,只适合在测试环境中使用。我们可以添加以下代码来禁用 TLS 检查:

-- -------------------- ---- -------
------ - ---------------- - ---- --------
------ - ------------ - ---- -----

----- ------- - -
  --------- ------------------------
  -------- -----------------------
  ------- ---------------------------
--

----- ---- - -------------------------------
----- --- - ------------------------------

----- ---------- - ------------------
  -----
  ----
  --- -----------------------------
  ------------------- ------
---

----- --- - ----- ------------------------------------- -
  ------- ------
  -------- --- --------- --------------- ------------------ ---
  ----- ----------------
    -------- ------ --------
  ---
  ------- -----------
---

----------------- ------------

通过这种方式,我们在发起 HTTPS 请求时,将会禁用 TLS 检查,这样就能忽略证书链的问题了。 值得注意的是,禁用 TLS 检查是一种不太安全的方式,在生产环境中应该使用方案一。

结论

本文介绍了两种解决 Deno 中使用 Request 出现的 “self signed certificate” 问题的方式。当然,这两种方式都有其优缺点,我们需要根据实际情况做出选择。从一些根本上来说,使用方案一比较安全,也比较符合标准。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66f2b238a44b36ee57670e96

纠错
反馈