Otrzymałem certyfikat SSL do podpisywania żądań klientów, a także odpowiednich certyfikatów CA. Mogę sprawdzić go przy użyciu OpenSSL:nodejs ssl "nie można uzyskać certyfikatu lokalnego wystawcy"
$ 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
(I puree 2 CA certyfikatów w jednym pliku). Ale gdy próbuję replikować go za pomocą węzła:
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);
});
pojawia się błąd:
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)
znalazłem odpowiedzi na tutaj, sugerując, że muszę umieścić każdy cert CA w oddzielnym pliku:
ca: [fs.readFileSync('/etc/ssl/foo/ca.pem'), fs.readFileSync('/etc/ssl/foo/root-ca.pem')]
ale nadal podawał ten sam błąd. (Próbowałem również odwrócić kolejność). Następnie próbowałem wstawić certyfikat pośredni do klienta, a po prostu dostarczając certyfikat głównego CA jako ca (co wydaje się być tym, co sugeruje docs), ten sam błąd. W tym momencie brakuje mi pomysłów. Fakt, że openssl jest szczęśliwy, sugeruje, że robię coś nie tak, jakieś sugestie?
$ node --version
v6.10.1
(zdaję sobie sprawę, mogę ustawić rejectUnauthorized false, ale ja naprawdę raczej nie)
z którego serwera baz danych korzystasz? nginx, apache lub coś innego? –
to jest poza kontrolą. Dałem im CSR, i oni wygenerowali dla mnie certyfikat klienta, i dali mi certyfikaty CA – grahamrhay