我正在使用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";核方法,但我很想知道,如果没有这些,怎么能解决这个问题。
发布于 2021-06-25 18:23:31
它运转得很好。您有自己的证书颁发机构(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来完成。
我的猜测是,您的节点没有使用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。
https://stackoverflow.com/questions/68002512
复制相似问题