3

我正在连接一个服务器,该服务器的证书由我自己的 CA 签名,该 ca 的证书已安装到系统的钥匙串中。

连接openssl s_client -connect some.whereVerify return code: 0 (ok)

但我无法连接 nodejs 的 tls/https 模块,该模块失败了 Error: SELF_SIGNED_CERT_IN_CHAIN

但连接到普通服务器(即 google.com:443)工作正常。

似乎nodejs的openssl与系统的openssl没有共享相同的钥匙串。

但我找不到它在哪里。我尝试过,SSL_CERT_DIR但似乎没有工作。

顺便说一句:我可以通过设置绕过服务器验证NODE_TLS_REJECT_UNAUTHORIZED=0,但这还不够;)

我使用 OSX 10.8.3 和 OpenSSL 0.9.8r,节点 v0.9.8

4

3 回答 3

6

您可以让节点使用系统的 OpenSSL 证书。这是通过以下方式启动节点来完成的:

node --use-openssl-ca
  • 有关更多信息,请参阅文档
  • 请参阅有关如何为 Debian 和 Ubuntu 扩展系统证书的答案
于 2019-05-28T12:21:16.893 回答
5

默认根证书是静态的并编译到节点二进制文件中。

https://github.com/nodejs/node/blob/v4.2.0/src/node_root_certs.h

于 2016-01-05T20:15:24.080 回答
4

如果您正在使用tls 模块(看起来像),tls.connect您可以在选项中传递一个ca参数,该参数是您想要信任的字符串数组或证书缓冲区。

于 2013-01-31T22:46:27.140 回答