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



我正在使用mkcert为localhost生成自签名证书。

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";核方法,但我很想知道如果没有这些方法,如何解决这个问题。

它运行得很好。您有自己的证书颁发机构(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存储(env变量NODE_OPTIONS=--use-openssl-ca(,所以只有节点自己的CA证书(例如。https://github.com/nodejs/node/blob/v14.0.0/src/node_root_certs.h)对于节点来说是值得信赖的。

您可以选择使用系统CA证书存储(env变量NODE_OPTIONS=--use-openssl-ca或节点CLI参数--use-openssl-ca(,也可以像以前那样使用env变量NODE_EXTRA_CA_CERTS来允许您的自定义CA。

相关内容

最新更新