首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mkcert生成的ssl证书不是一个完整的链。

mkcert生成的ssl证书不是一个完整的链。
EN

Stack Overflow用户
提问于 2021-06-16 12:18:28
回答 1查看 1.6K关注 0票数 2

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

代码语言:javascript
复制
mkcert -install
mkcert localhost

这对于浏览器来说很好,但是如果我尝试并从节点进行提取,就会得到以下错误:

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

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

通过使用NODE_EXTRA_CA_CERTS环境变量,我对此进行了深入研究。

代码语言:javascript
复制
NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem"

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

EN

回答 1

Stack Overflow用户

发布于 2021-06-25 18:23:31

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

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

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

代码语言:javascript
复制
   "/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来完成。

我的猜测是,您的节点没有使用system存储(env变量NODE_OPTIONS=--use-openssl-ca),因此只有节点自己的CA证书(例如certs.h)对节点是可信的。

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68002512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档