nodejs中使用的默认CA证书在哪里?

时间:2013-01-31 06:15:54

标签: node.js openssl

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

openssl s_client -connect some.where联系说Verify return code: 0 (ok)

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

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

似乎nodejs的openssl没有与系统的openssl共享相同的keychain。

但我无法找到它的位置。我试过SSL_CERT_DIR,但似乎没有工作。

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

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

3 个答案:

答案 0 :(得分:4)

如果您使用tls.connect(看起来很像)ca,您可以在选项中传递{{1}}参数,这些参数是字符串或缓冲区的数组你想要信任的证书。

答案 1 :(得分:4)

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

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

答案 2 :(得分:0)

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

node --use-openssl-ca
  • 有关更多信息,请参见docs
  • 有关如何为Debian和Ubuntu扩展系统证书的信息,请参见this answer