NodeJS UNABLE_TO_VERIFY_LEAF_SIGNATURE

Wir versuchen, Node.js (und Mocha) als Testframework zu verwenden, um API-Aufrufe gegen einen internen Server über https zu testen. Wir verwenden die folgenden Knotenmodule: Mocha, Restify und Should, um diese Tests durchzuführen.

Wenn wir mocha testFileName.js ausführen, erhalten wir folgenden Hauptfehler zurück:

[2013-06-19 14:16:28.105] [ERROR] console - FAIL:  Received error!  [Error:        UNABLE_TO_VERIFY_LEAF_SIGNATURE]
Error: UNABLE_TO_VERIFY_LEAF_SIGNATURE
at SecurePair.<anonymous> (tls.js:1283:32)
at SecurePair.EventEmitter.emit (events.js:92:17)
at SecurePair.maybeInitFinished (tls.js:896:10)
at CleartextStream.read [as _read] (tls.js:430:15)
at CleartextStream.Readable.read (_stream_readable.js:320:10)
at EncryptedStream.write [as _write] (tls.js:344:25)
at doWrite (_stream_writable.js:219:10)
at writeOrBuffer (_stream_writable.js:209:5)
at EncryptedStream.Writable.write (_stream_writable.js:180:11)
at write (_stream_readable.js:573:24)
at flow (_stream_readable.js:582:7)
at Socket.pipeOnReadable (_stream_readable.js:614:5)
at Socket.EventEmitter.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:408:10)
at emitReadable (_stream_readable.js:404:5)
at readableAddChunk (_stream_readable.js:165:9)
at Socket.Readable.push (_stream_readable.js:127:10)
at TCP.onread (net.js:511:21)

Nach der Suche in Google und StackExchange scheint es, dass wir ein Zertifikatproblem haben. Von dort aus haben wir das interne "öffentliche" CA-Zertifikat sowie die instanzspezifischen Zertifizierungen, die unsere App verwendet (es gibt mehrere Weiterleitungen), installiert, um

  /usr/local/etc/openssl/certs, legacy: /System/Library/Keychains/X509Anchors, /Library/Keychains/System.keychain, as well as in Keychain through the gui to our login and System keychains. However, we're still not getting anywhere. 

Vor der Installation der Zertifikate an diesen Orten konnten wir unsere Site nicht ohne Zertifikatfehler in der Befehlszeile "einrollen". Wenn sie jetzt installiert sind, werden keine Fehler angezeigt, aber der Knoten explodiert immer noch.

Wir haben mehrere Versionen von Node, OpenSSL und verschiedene Installationsmethoden ausprobiert, darunter das Herunterladen des Pakets und das Verwenden von Homebrew.

Computerinformationen:

Mac OS X 10.8.4 (auch mit 10.8.3 ausprobiert)Knoten v0.8.18 (Auch getestet mit: Knoten v0.10.11, v0.10.12)OpenSSL v1.0.1e (auch mit 0.9.8 ausprobiert)Brainstorming-Fragen:

Verwendet Node.js eine eigene (gebündelte) Version von OpenSSL anstelle der auf dem lokalen Computer installierten Version? Wenn dies der Fall ist, wo sucht es nach Zertifikaten? Könnten die TLS.js Node anweisen, anderswo nach Zertifikaten zu suchen? Gibt es einen pragmatischen Ansatz zum Überschreiben der verwendeten Zertifikate? Es scheint, dass es Optionen gibt, die wir wie folgt verwenden können:

var options = {
    ca: fs.readFileSync("[path to our CA cert file]"),
    requestCert: true,
    rejectUnauthorized: true
};

var req = https.request(options, function(res) {
    ...
});

Dies führt jedoch zu demselben Fehler.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage