我已經獲得SSL證書用於簽署客戶端請求以及相關的CA證書。我可以使用openssl驗證它:nodejs ssl「無法獲得本地發行者證書」
$ 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
(我將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);
});
我得到一個錯誤:
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(這似乎是docs建議的內容),同樣的錯誤。在這一點上,我正在用盡想法。 openssl開心的事實表明我做錯了什麼,有什麼建議嗎?
$ node --version
v6.10.1
(我知道我可以設置rejectUnauthorized到假的,但我真的不想)
你正在使用哪個後端服務器? nginx,apache還是別的? –
這是超出我的控制。我給了他們一個CSR,他們爲我生成了一個客戶證書,並給了我CA證書 – grahamrhay