2012-06-18 18 views
10

Ich versuche, eine Webseite über den Knoten https.request() zu bekommen. Dies führt zu einem Fehler, der von meinem Code protokolliert wird. Unter Verwendung der Knotenanforderungsmodul hat das gleiche Ergebnis:SSL-Fehler in Nodejs

Problem bei Anfrage: 140398870042432: Fehler: 140773F2: SSL-Routinen: SSL23_GET_SERVER_HELLO: SSLv3- alert unerwartete Nachricht: s23_clnt.c: 658:

Die folgende zeigt an, dass die falsche SSL-Version verwendet wird, aber ich kann keine Möglichkeit finden, die Version zu ändern: curl error: "sslv3 alert unexpected message". Die Verwendung von curl von meinem Terminal gibt eine Antwort zurück, genauso wie das Drücken der URL in meinem Browser (es ist eine Login-Seite). Mein Code ist unten.

var request = require('request') 
request.get("https://icmserver.wit.ie/balance", function(err, res, body) { 
    if (err) { 
     return console.log(err) 
    } 
    return body; 
}); 

Hat jemand eine Idee, was hier passieren könnte?

+0

Können Sie uns den genauen Code zeigen, den Sie verwenden? Es würde helfen, wenn wir das Problem reproduzieren könnten. – Ashe

+0

Dank Len, Das ist mein Code: var request = erfordern ('Antrag') Request.get ("https://icmserver.wit.ie/balance", Funktion (err, res, Körper) { if (err) { \t return console.log (err) } Rückschlusskörper; }); Es protokolliert weiterhin den SSL-Fehler. – eshortie

+0

Wenn ich auf die Website in Chrome zugreife, wird Folgendes angezeigt: "* Die Verbindung musste mit SSL 3.0 erneut versucht werden. Dies bedeutet normalerweise, dass der Server sehr alte Software verwendet und möglicherweise andere Sicherheitsprobleme hat -in SSL unterstützt nicht SSL 3. – Ashe

Antwort

13

Versuchen Sie, options = { secureProtocol: 'SSLv3_method' } in der Anforderung zu verwenden, die Sie machen.

+0

Danke SuperShalabi, die funktionierte, die Anfrage gibt Daten jetzt zurück! – eshortie

+0

Erläuterung: Die secureProtocol-Option wird in einen neuen https.Agent eingefügt. –

+3

nur zur Klarstellung, SSLv3 ist kaputt, Sie dürfen es nicht verwenden. –

12

Wir haben das gleiche Problem. Standardmäßig verwendet die Anfrage den https.globalAgent. Also haben wir den Code oben in unserem Skript hinzugefügt.

var https = require('https'); 
https.globalAgent.options.secureProtocol = 'SSLv3_method'; 

Plötzlich funktionierte alles.

+0

Ich hätte nicht erwartet, dass dies funktioniert, da ich gedacht hätte, https an verschiedenen Stellen zu benötigen, hätte also nicht den gleichen globalAgent, aber leider hat es funktioniert. Vielen Dank! – GotDibbs

+0

Ich habe den Fehler SSL23_GET_SERVER_HELLO: unbekanntes Protokoll und googelte meinen Finger blutig, bis ich endlich diese Lösung gefunden habe. Hoffentlich wird dies neu indiziert, damit andere die Informationen schneller erhalten. –

+0

Ich weiß nicht, warum diese Antwort mehr Stimmen hat. Es kann gefährlich sein, das Protokoll global festzulegen. Wenn die angenommene Antwort für Sie nicht funktioniert, anstatt das Protokoll global zu setzen, lesen Sie bitte sorgfältig das Dokument, um zu sehen, wie es eingerichtet wird: http://nodejs.org/api/https.html#https_https_request_options_callback – Sylvain