nodejs ssl"无法获取本地颁发者证书"

gra*_*hay 7 ssl https node.js

我已获得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
Run Code Online (Sandbox Code Playgroud)

(我将2个CA证书混合到一个文件中).但是当我尝试使用节点复制它时:

    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);
    });
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

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)
Run Code Online (Sandbox Code Playgroud)

我在这里找到了答案,建议我需要将每个CA证书放在一个单独的文件中:

ca: [fs.readFileSync('/etc/ssl/foo/ca.pem'), fs.readFileSync('/etc/ssl/foo/root-ca.pem')]
Run Code Online (Sandbox Code Playgroud)

但那仍然给出了同样的错误.(我也尝试颠倒顺序).然后我尝试将中间证书放在客户端1中,并且只提供根CA证书ca(这似乎是文档建议的),同样的错误.在这一点上,我已经没有想法了.openssl很高兴的事实表明我做错了什么,有什么建议吗?

$ node --version
v6.10.1
Run Code Online (Sandbox Code Playgroud)

(我意识到我可以将拒绝设置为假,但我真的不愿意)

gra*_*hay 5

事实证明,我不需要提供 CA 证书,因为他们的 CA 是由“已知”权威机构正确签署的。所以我可以从我的请求中删除 ca 字段。