【问题标题】:ssl certificate generated by mkcert is not a full chainmkcert 生成的 ssl 证书不是一个完整的链
【发布时间】:2021-06-16 12:18:28
【问题描述】:

我正在使用mkcert 为本地主机生成自签名证书。

mkcert -install
mkcert localhost

这适用于浏览器,但如果我尝试从节点获取数据,我会收到以下错误:

FetchError:对 https://localhost:52882/ 的请求失败,原因:无法验证第一个证书

我认为这是因为 mkcert 没有创建完整的链。

我已经通过使用NODE_EXTRA_CA_CERTS 环境变量解决了这个问题。

NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem"

我知道有process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; 核方法,但我很想知道如果没有这些方法如何解决这个问题。

【问题讨论】:

  • 您是否尝试过手动将链/根与域证书连接到 1 个文件中并使用它?

标签: node.js ssl mkcert


【解决方案1】:

它运行良好。您拥有自己的证书颁发机构 (CA),并且该颁发机构直接颁发 localhost 证书。没有使用中间证书颁发机构,因此假设 mkcert is not creating the full chain 不正确。

CA 证书必须在您的机器上可用,并且您需要定义哪些 CA 证书是值得信赖的。 NODE_EXTRA_CA_CERTS 正是该配置,您可以在其中允许特定的 CA 证书文件。

当然,您可以将此自定义 CA 证书添加到系统 CA 证书存储中。它们的位置取决于使用的操作系统,例如:

   "/etc/ssl/certs/ca-certificates.crt",                // Debian/Ubuntu/Gentoo etc.
    "/etc/pki/tls/certs/ca-bundle.crt",                  // Fedora/RHEL 6
    "/etc/ssl/ca-bundle.pem",                            // OpenSUSE
    "/etc/pki/tls/cacert.pem",                           // OpenELEC
    "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem", // CentOS/RHEL 7
    "/etc/ssl/cert.pem",                                 // Alpine Linux

这应该由mkcert -install完成。

我的猜测是您的节点没有使用系统 CA 存储(环境变量 NODE_OPTIONS=--use-openssl-ca),因此只有节点自己的 CA 证书(例如 https://github.com/nodejs/node/blob/v14.0.0/src/node_root_certs.h)对于节点是值得信赖的。

您可以选择使用系统 CA 证书存储(环境变量 NODE_OPTIONS=--use-openssl-ca 或节点 CLI 参数 --use-openssl-ca),或者您可以像您一样使用环境变量 NODE_EXTRA_CA_CERTS 允许自定义 CA。

【讨论】:

    猜你喜欢
    • 2018-04-27
    • 2016-11-05
    • 2013-06-08
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    相关资源
    最近更新 更多