我已经获得了一个SSL证书,用于签署客户端请求,以及相关的CA证书。我可以使用openssl进行验证:
$ openssl s_client -CAfile /etc/ssl/foo/ca-combined.pem -servername foo.co.in -connect foo.co.in:443
CONNECTED(00000003)
... snip ...
Verify return code: 0 (ok)
---
closed
我将两个 CA 证书合并成一个文件。(I mashed the 2 CA certs into one file). 但是当我尝试使用 Node.js 复制它时:
var tls = require('tls');
var fs = require('fs');
var options = {
host: 'foo.co.in',
servername: 'foo.co.in',
port: 443,
key: fs.readFileSync('/etc/ssl/private/foo.key'),
cert: fs.readFileSync('/etc/ssl/foo/cert.pem'),
ca: [fs.readFileSync('/etc/ssl/foo/combined-ca.pem')]
};
tls.connect(options, function(err) {
done(err);
});
我收到一个错误:
Uncaught Error: unable to get local issuer certificate
at Error (native)
at TLSSocket.<anonymous> (_tls_wrap.js:1092:38)
at TLSSocket._finishInit (_tls_wrap.js:610:8)
at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:440:38)
我在这里找到了一个答案,建议我需要将每个CA证书放在单独的文件中:
ca: [fs.readFileSync('/etc/ssl/foo/ca.pem'), fs.readFileSync('/etc/ssl/foo/root-ca.pem')]
但是仍然出现了相同的错误。(我还尝试过颠倒顺序)。然后我尝试将中间证书与客户端证书一起放入,并只提供根CA证书作为ca(这似乎是文档建议的),但仍然出现了相同的错误。现在我已经没有更多的想法了。openssl可以正常工作,这表明我做错了什么,有什么建议吗?
$ node --version
v6.10.1
我知道我可以将rejectUnauthorized设置为false,但我真的不想这样做。