2014-06-10 98 views
2

編輯:我原本以爲服務器的證書是自簽名的。原來它是由自簽名的CA證書籤署的。如何使用https信任自簽名證書?

我正在嘗試編寫一個Node.js應用程序,該應用程序訪問使用保護的HTTPS站點的自簽名證書通過私有自簽名CA證書籤名的證書。我還想而不是完全禁用證書檢查。

我試圖把自簽名證書服務器的證書放在請求選項中,但似乎沒有工作。有人知道怎麼做嗎?

我希望以下代碼可以打印statusCode 200,但是它會打印[Error: SELF_SIGNED_CERT_IN_CHAIN]

我試過類似的代碼與request具有相同的結果。

var https = require('https'); 
var fs = require('fs'); 

var opts = { 
    hostname: host, 
    port: 443, 
    path: '/', 
    method: 'GET', 
    ca: fs.readFileSync(serverCertificateFile, 'utf-8') 
}; 

var req = https.request(opts, function (res) { 
    console.log('statusCode', res.statusCode); 
}); 

req.end(); 
req.on('error', function (err) { 
    console.error(err); 
}); 
+0

我認爲這可能對您有用:http://stackoverflow.com/questions/10142431/my-node-js-https-client-always-works-regardless-of-certificate-validity – vcazan

+0

@vcazan I嘗試添加'agent:false'和'opts.agent = new https.Agent(opts);',並且都沒有工作:-( – leedm777

+0

您確定您擁有正確的證書嗎?您的代碼適用於我的自簽名如果我爲'opts.ca'讀了一個不同的(不正確的)證書,那麼我會得到'Error:DEPTH_ZERO_SELF_SIGNED_CERT]。' – rhashimoto

回答

1

錯誤[Error: SELF_SIGNED_CERT_IN_CHAIN]是這裏發生了什麼事情的線索。

這表明HTTPS服務器的證書是由自簽名證書籤署的,而不是它自己的自簽名證書。如果服務器證書是自簽名的,則錯誤將爲[Error: DEPTH_ZERO_SELF_SIGNED_CERT]

如果您提供CA證書而不是服務器的證書,它應該工作。