2012-06-18 41 views
10

我試圖通過節點https.request()獲取網頁。這樣做會導致我的代碼記錄錯誤。使用節點請求模塊具有相同的結果:nodejs中的SSL錯誤

問題請求:140398870042432:錯誤:140773F2:SSL例程:SSL23_GET_SERVER_HELLO:SSLV3警報意外的消息:s23_clnt.c:658:

以下表示正在使用錯誤的SSL版本,但我找不到更改版本的方法:curl error: "sslv3 alert unexpected message"。在我的終端上使用curl會返回一個響應,就像在瀏覽器中輸入URL一樣(這是一個登錄頁面)。我的代碼如下。

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

有沒有人有任何想法可能發生在這裏?

+0

你能告訴我們你正在使用的確切代碼嗎?如果我們能夠重現問題,它會有所幫助。 – Ashe

+0

由於萊恩, 這是我的代碼: VAR請求=需要( '請求') request.GET中( 「https://icmserver.wit.ie/balance」, 功能(ERR,RES,體) (err)\t return console.log(err) } return body; });如果(err){ } 它會記錄SSL錯誤。 – eshortie

+0

我注意到,當我在Chrome中訪問該網站時,我得到:「*連接必須使用SSL 3.0重試,這通常意味着服務器使用的是非常舊的軟件,並且可能存在其他安全問題。*」可能是Node的內置在SSL不支持SSL 3. – Ashe

回答

13

嘗試在您要製作的請求中使用options = { secureProtocol: 'SSLv3_method' }

+0

感謝SuperShalabi的工作,請求現在正在返回數據! – eshortie

+0

說明:secureProtocol選項在新的https.Agent中。 –

+3

只是爲了澄清,SSLv3已損壞,您不得使用它。 –

12

我們遇到了同樣的問題。默認情況下,請求使用https.globalAgent。所以我們在腳本的頂部附近添加了代碼。

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

所有的突然一切工作。

+0

我不會期望這樣工作,因爲我會認爲要求https在不同的地方,因此不會有相同的globalAgent,但它已經工作。謝謝! – GotDibbs

+0

我得到了錯誤SSL23_GET_SERVER_HELLO:未知的協議,並在我終於找到這個解決方案之前用我的手指血腥搜索。希望重新編制索引,以便其他人更快地獲取信息。 –

+0

我不知道爲什麼這個答案有更多的選票。全局設置協議可能很危險。如果接受的答案不適用於您,而不是全局設置協議,請仔細閱讀文檔以瞭解如何設置它:http://nodejs.org/api/https.html#https_https_request_options_callback – Sylvain