Node.js HTTPS-400-Fehler - 'UNABLE_TO_VERIFY_LEAF_SIGNATURE'
Schreibe ich eine Node.js app, hat auf Anfrage einiger Daten aus unseren internen APIs. Der schwierige Teil ist, dass die server, die ich bin anfordern von Daten aus hat bestimmte Einschränkungen:
- Der Antrag ist auf dem Protokoll HTTPS (nicht HTTP)
- Der Antrag muss unter Verwendung einer der LAN-IP-Adresse, da der domain-name funktioniert nicht intern
- Der Anfrage auftauchen muss, um sein Interesse von der externen domain-Namen, weil das ist, was die Virtual-Host-setup ist für.
Um dies zu tun, ich bin mit einem bit-code, der wie folgt aussieht:
var headers = {
Host: externalHostname,
Hostname: externalHostname,
};
var options = {
host: InternalIP,
path: path,
method: 'GET',
headers: headers
};
var req = https.request(options, function(res) {
res.setEncoding('utf8');
var data = "";
res.on('data', function(chunk) {
data += chunk;
});
res.on('end', function() {
//Do something with that data
});
res.on('error', function(err) {
console.log("Error during HTTP request");
console.log(err);
});
});
req.end();
Leider, ich bin immer 400 (Ihr browser schickte eine Anfrage, dass dieser server nicht verstehen konnte) Fehler als Antwort. Ich habe doppelt und dreifach geprüft, dass der hostname, ip-Adresse und Pfad-Namen sind alle richtig (ich kann den test in meinem browser, und alles ist gut).
Habe ich eine Ausgabe der Variablen response (res), und erhalte eine authorizationError Wert von UNABLE_TO_VERIFY_LEAF_SIGNATURE
. Ich bin mir nicht sicher, was das ist, oder ob es mein problem, aber es ist die einzige nützliche information, die ich finden konnte.
Ich habe eine vollständige Ausgabe der response-variable hier.
Irgendwelche Ideen auf, was könnte die Ursache sein?
Update: habe ich es herausgefunden! Ich habe versucht, mit dem server authentifizieren, indem eine ?PHPSESSID=asdad
GET
variable, aber Sie haben diese deaktiviert. Ich war in der Lage, damit es funktioniert, indem die Einstellung PHPSESSID
im Cookie-header.
- haben Sie eine Zeile wie diese irgendwo oben, dass
var https = require('https');
? - Yup. https ist eine Globale variable, und ich weiß, dass es funktioniert, da die eigentliche HTTPS-Anforderung feuert - es wird nur reagiert mit einem 400-Fehler.
- Ihr fehlen auch
method:['get','post']
in die Optionen...heres die docs nodejs.org/docs/v0.4.0/api/https.html#https.request - gerade Hinzugefügt haben - kein Glück.
- Im Blick in die
authorizationError: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE'
Fehler jetzt...ist Ihre SSL-cert. self-signed? - NÖ - cert "verified by GoDaddy", nach Chrome.
- Ist der server erwartet der client ein Zertifikat? Welche Informationen können Sie finden in den server-error-logs?
- Leider, ich habe keinen Zugriff auf die logs noch. Derzeit arbeite ich auf zu Ihnen, aber mein Chef(es) nicht reagieren.
- mögliche Duplikate von Nicht überprüfen leaf signature
Du musst angemeldet sein, um einen Kommentar abzugeben.
Satz dieses
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
strict-ssl
.Ich traf hier während des Debuggens UNABLE_TO_VERIFY_LEAF_SIGNATURE Fehler in einer externen api-Aufruf aus meinen nodejs server.
Dieser Fehler ist der hit, wenn es Fehler während der überprüfung des server-Zertifikats. Es ist zwar nicht empfohlen, Sie zu deaktivieren Sie die Sicherheit, indem Sie den folgenden code (das auch als ein anderer beantworten), es hilft um zu überprüfen, ob Sie sind, jagen die richtigen bug. In anderen Worten, wenn man diesen auch nicht beheben kann, es ist etwas anderes falsch mit dem code.
In meinem Fall, es war dumm bug & Anfrage wollte localhost selbst. Auch nachdem man den oben genannten Fehler bei der Anfrage und das hat mir geholfen, entdecken Sie den Fehler.
Having said that, ist es nicht sinnvoll, diese als Lösung. Vielmehr herauszufinden, wie Sie können zusätzliche Zertifikate durch die Einstellung
agent:false
&ca:[fs.readFileSync('root-cert.pem')]
Optionen. https.Anfrage Dokumentation finden Sie weitere details. Und bei der Jagd auf meine Wanze fand ich auch einige weitere nützliche Ressourcen:openssl s_client -connect apis.live.net:443
- druckt die Zertifikat-Kette. ersetzt man den letzten parameter (url & port) mit dem, was Sie herstellen.überprüfen Sie diese heraus aus der tls.js Quelle in der neuesten node.js (es ist viel mehr das ist, was ich denke, Sie brauchen)
set rejectUnauthorized auf false in die Optionen und drücken Sie die Daumen...lass es mich wissen, wenn der Ausgang sich ändert.
UNABLE_TO_VERIFY_LEAF_SIGNATURE
ist etwas, dass der server zurückgibt, dass Fehler nichts zu tun hat mit node.jsUNABLE_TO_VERIFY_LEAF_SIGNATURE
und im Postman die gleichen Kopfzeilen angewendet werden, und es funktioniert perfekt. Warum ist das so? Wie können Sie mir sagen, es hat nichts zu tun mit Knoten?Satz dieses
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
Feste der
UNABLE_TO_VERIFY_LEAF_SIGNATURE
problem für superagent.Versuchen, diese in die Befehlszeile ein:
Klappte es bei mir auf dem mac.
strict-ssl
.