2014-12-05 368 views
4

不會失敗,我現在用的是https library對向的NodeJS發送使用下面的代碼HTTPS GET請求。即使正在測試的服務器的證書已過期,我也會得到有效的200狀態。HTTPS的NodeJS上的SSL證書失效

https.get(options, this.onResponseCallback.bind(this)); 

選項的值如下所示。

{ 
    protocol: 'https: ', 
    slashes: true, 
    auth: null, 
    host: 'XXXXXXXX', 
    port: '443', 
    hostname: 'XXXXXXXX', 
    hash: null, 
    search: 'XXXXXXXX', 
    query: 'XXXXXXXX', 
    pathname: '/XXXXXXXX/XXXXXXXX', 
    path: '/XXXXXXXX/XXXXXXXX?XXXXXXXX', 
    href: 'https://XXXXXXXX', 
    headers: { 
     'User-Agent': 'NodeUptime/3.0(https://github.com/fzaninotto/uptime)' 
    }, 
    rejectUnauthorized: true 
} 

如果我在瀏覽器中找到相同的URL,會出現以下錯誤。

Firefox

我如何當證書過期的NodeJS失敗?

+0

什麼使你確定證書已過期?那個curl錯誤信息不會這麼說。錯誤60可能由許多不同的問題引起,並且過期它說「證書已過期」而不是「無效的證書鏈」。你可以試試'openssl s_client'(只有來自URL的host:端口,如果不是默認情況下使用相同的信任庫),它是什麼意思? – 2014-12-05 23:15:33

+0

什麼使我確信我故意在我們的服務器上使用過期的證書。這是自動測試我們的系統並且無法檢測證書到期失敗的系統的一部分。所以我用舊證書做了一個測試服務器。 – 2014-12-06 00:08:44

+0

然後我忍不住,對不起。 OpenSSL絕對可以在默認情況下檢查過期。我不知道在通往node.js的路上會發生什麼:-( – 2014-12-06 03:12:40

回答

2

我認爲瀏覽器的安全策略比你在節點上可以做得更嚴格一些。

您可以通過訪問信息關於服務器的證書:

https.request(options, function(response){ 
    var cert = response.client.pair.cleartext.getPeerCertificate(); 
}); 

.valid_to是你在找什麼。

有關更多信息TLS

+0

我仍然認爲這個庫默認會失敗,但這會讓我超出我的問題。謝謝 – 2014-12-09 14:48:27