我正在连接到我自己的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
答案 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