NodeJS UNABLE_TO_VERIFY_LEAF_SIGNATURE

Staramy się używać Node.js (i Mocha) jako środowiska testowego do testowania wywołań API na wewnętrznym serwerze przez https. Używamy następujących modułów węzłów: Mocha, Restify i Powinien wykonać te testy.

Kiedy uruchamiamy plik mokka testFileName.js, głównym błędem, który otrzymamy, jest:

[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)

Po przeszukaniu google i stackexchange wydaje się, że mamy problem z certyfikatem. Stamtąd zainstalowaliśmy wewnętrzny certyfikat „CA” urzędu certyfikacji, a także certyfikaty instancji, z których korzysta nasza aplikacja (istnieje wiele przekierowań do uzyskania),

  /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. 

Przed zainstalowaniem certyfikatów w tych miejscach nie mogliśmy „zawinąć” naszej strony bez błędów certyfikatu w linii poleceń; jednak przy ich zainstalowaniu nie mamy żadnych błędów, ale węzeł wciąż eksploduje.

Wypróbowaliśmy wiele wersji Node, OpenSSL, a także różne metody instalacji, w tym pobieranie pakietu i używanie homebrew.

Informacje o komputerze:

Mac OS X 10.8.4 (próbowano także z 10.8.3)Node v0.8.18 (Próbowano także z: Node v0.10.11, v0.10.12)OpenSSL v1.0.1e (próbowano także z 0.9.8)Pytania dotyczące burzy mózgów:

Czy Node.js używa własnej (dołączonej) wersji OpenSSL zamiast tego, co jest zainstalowane na komputerze lokalnym? Jeśli tak jest, gdzie szuka certyfikatów? Czy TLS.js może nakazać Node, aby szukał certyfikatów w innym miejscu? Czy istnieje pragmatyczne podejście do nadpisywania używanych certyfikatów; wygląda na to, że mogą istnieć opcje, których możemy użyć w ten sposób:

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

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

Ale generuje to ten sam błąd.

questionAnswers(5)

yourAnswerToTheQuestion