2012-06-18 23 views
10

Próbuję uzyskać stronę internetową za pośrednictwem węzła https.request(). Powoduje to błąd podczas logowania przez mój kod. Korzystanie z modułu żądania węzeł ma ten sam wynik:Błąd SSL w nodejs

problem z żądanie: 140398870042432: Błąd: 140773F2: podprogramów SSL: SSL23_GET_SERVER_HELLO: SSLv3 alert niespodziewana wiadomość: s23_clnt.c: 658:

Poniższy wskazuje, że używana jest niewłaściwa wersja protokołu SSL, ale nie mogę znaleźć sposobu na zmianę wersji: curl error: "sslv3 alert unexpected message". Używanie curl z mojego terminala zwraca odpowiedź, tak jak trafienie adresu URL w mojej przeglądarce (jest to strona logowania). Mój kod znajduje się poniżej.

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

Czy ktoś ma pojęcie, co może się tutaj wydarzyć?

+0

Czy możesz pokazać nam dokładny kod, którego używasz? Pomogłoby to, gdybyśmy mogli odtworzyć problem. – Ashe

+0

Dzięki Len, To jest mój kod: prośba var = require ('Wniosek') request.get ("https://icmserver.wit.ie/balance" function (eee, res, body) { if (err) { \t return console.log (err) } ciało zwrotne; }); Ciągle rejestruje błąd SSL. – eshortie

+0

Zauważyłem, że po uzyskaniu dostępu do witryny w przeglądarce Chrome otrzymuję komunikat: "* Połączenie musiało zostać ponownie wykonane przy użyciu protokołu SSL 3.0. Zazwyczaj oznacza to, że serwer używa bardzo starego oprogramowania i może mieć inne problemy z zabezpieczeniami. *" Prawdopodobnie został zbudowany węzeł -w SSL nie obsługuje SSL 3. – Ashe

Odpowiedz

13

Spróbuj użyć options = { secureProtocol: 'SSLv3_method' } w żądaniu, które tworzysz.

+0

Dzięki SuperShalabi, które działało, żądanie zwraca dane już teraz! – eshortie

+0

Wyjaśnienie: Opcja secureProtocol przechodzi w nowy https.Agent. –

+3

dla wyjaśnienia, SSLv3 jest zepsuty, nie wolno go używać. –

12

Trafiamy na ten sam problem. Domyślnie żądanie korzysta z https.globalAgent. Dlatego dodaliśmy kod u góry naszego skryptu.

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

Nagle wszystko działało.

+0

Nie spodziewałbym się, że to zadziała, jak bym myślał, że wymaganie https w różnych miejscach nie miałoby tego samego globalAgent, ale niestety, zadziałało. Dzięki! – GotDibbs

+0

Wystąpił błąd SSL23_GET_SERVER_HELLO: nieznany protokół i przeszukano go palcem, aż w końcu znalazłem to rozwiązanie. Mam nadzieję, że ponownie zindeksujemy to, aby inni szybciej uzyskali informacje. –

+0

Nie wiem, dlaczego ta odpowiedź ma więcej głosów. Ustawienie globalnego protokołu może być niebezpieczne. Jeśli zaakceptowana odpowiedź nie działa dla Ciebie, zamiast ustawiać protokół na całym świecie, przeczytaj uważnie dokument, aby zobaczyć, jak go skonfigurować: http://nodejs.org/api/https.html#https_https_request_options_callback – Sylvain

Powiązane problemy