我已获得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)
(我意识到我可以将拒绝设置为假,但我真的不愿意)
| 归档时间: |
|
| 查看次数: |
11505 次 |
| 最近记录: |