2013-12-18 4 views
6

In unserer Testumgebung verbinden wir uns mit einem anderen Server mit SSL, der von unserer Firma signiert wurde. Jedes Mal, wenn eine Verbindung hergestellt wird, wirft nodejs UNABLE_TO_VERIFY_LEAF_SIGNATURE. Ich habe Umgehungslösungen durch Einstellung rejectUnauthorized gefunden: false, aber das ist in unserem Fall nicht anwendbar.NodeJS kann keine Standard-CAs in Ubuntu lesen

Die Zertifikate werden zu /etc/ssl/certs und mit den Umgebungsvariablen SSL_CERT_DIR entweder /etc/ssl anb /etc/ssl/certs, aber kein Ergebnis getestet werden.

Auch ist es nicht vorzuziehen, irgendwo in unseren Dateien das Zertifikat hinzuzufügen und es zu jeder Anfrage hinzuzufügen.

+0

Hat der Benutzer, der den Knoten ausführt, die Berechtigung, auf das Verzeichnis certs zuzugreifen? Es sind normalerweise immer die einfachen Dinge. – srquinn

+0

Dieses Ereignis tritt auf, wenn der Benutzer, der NodeJS ausführt, ROOT ist und alle erforderlichen Berechtigungen hat. – viktorstaikov

+0

Kennen Sie diesen Artikel? http://blog.gaeremynck.com/fixing-unable_to_verify_leaf_signature/ – srquinn

Antwort

4

Dies liegt daran, dass der Knoten nicht die CA-Konfiguration Ihres Systems verwendet. Es enthält its own built-in list of acceptable CAs.

Wenn ein Knoten-SSL-Client eine benutzerdefinierte Zertifizierungsstelle akzeptieren soll, müssen Sie das Zertifikat der Zertifizierungsstelle in ca option übergeben.

// do something like this when your app starts up: 
fs.readFile('/path/to/ca.pem', function(err, cert) { 
    if (err) ... 
    else certBuffer = cert; 
}); 

// then when you make requests... 
https.request({ 
    hostname: 'example.com', 
    port: 443, 
    path: '/', 
    method: 'GET', 
    ca: certBuffer 
}, ...); 
1

Und wenn Sie wollen nicht auf node.js verlassen eingebaute Liste, und eher Ihre debian/ubuntu Liste verwenden:

var CAs = fs.readFileSync('/etc/ssl/certs/ca-certificates.crt').toString().split(/(?=-----BEGIN CERTIFICATE-----)/); 

// then when you make requests... 
https.request({ ..., ca: CAs}, ...); 
0

Sie können auch einen Weg zu Ihrer Zertifikate hinzufügen in PEM-Dateiformat der NODE_EXTRA_CA_CERTS Umgebungsvariable, beginnend mit Knoten v7.3.0

https://nodejs.org/api/cli.html#cli_node_extra_ca_certs_file

Dies hat den Vorteil, nicht erfordert, beliebigen Code mit chang Ändern Sie einfach die Umgebung Ihres node Prozesses. Hoffe das hilft!

Edit:

Überprüfen Sie auch --use-openssl-ca https://nodejs.org/api/cli.html#cli_use_openssl_ca_use_bundled_ca

Das ist, was ich am Ende mit meinem Problem zu lösen. Ich kopierte meine .crt-Dateien nach/usr/local/share/ca-certificates, dann lief sudo update-ca-certificates und dann Knoten mit --use-openssl-ca und jetzt Knoten findet meine Zertifikate richtig.