[英]ssl certificate generated by mkcert is not a full chain
我正在使用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";
核方法,但我很想知道如何在没有这些的情况下解决这个问题。
它运行良好。 您拥有自己的证书颁发机构 (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.x )。 0.0/src/node_root_certs.h ) 对节点来说是值得信赖的。
您可以选择使用系统 CA 证书存储(环境变量NODE_OPTIONS=--use-openssl-ca
或节点 CLI 参数--use-openssl-ca
),或者您可以像您一样使用环境变量NODE_EXTRA_CA_CERTS
允许自定义 CA。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.