2014-11-08 70 views
2

我試圖在Amazon EC2上運行Node.js應用程序時使用SSL和HTTPS。我已通過Name.com購買了RapidSSL證書,並按照this StackOverflow answer的說明正確設置了適用於HTTPS的服務器。下面是相關的代碼:Node.js使用RapidSSL證書時HTTPS服務器沒有響應

var http = require('http'), 
    https = require('https'); 
var express = require("express"), 
    app = express(); 
var fs = require('fs'); 

... 
app.set('certificate', fs.readFileSync('/path/to/cert.pem', 'utf8')); 
app.set('privateKey', fs.readFileSync('/path/to/privateKey.pem', 'utf8')); 
... 

http.createServer(app).listen(app.get('port'), function() { 
    console.info('Listening on port %d', app.get('port')); 
}); 
var options = {key: app.get('privateKey'), cert: app.get('certificate')}; 
https.createServer(options, app).listen(app.get('sslPort'), function() { 
    console.info('HTTPS listening on port %d', app.get('sslPort')); 
}); 

當我使用自簽名證書在本地運行服務器,一切都忽視了安全警告後可以正常工作。但是,當我將代碼部署到EC2實例時,程序運行時沒有發生錯誤,但是當我使用HTTPS訪問域時,服務器不返回任何內容,並且瀏覽器超時。用HTTP請求站點仍然正常工作。

我已經在Chrome和cURL中試過這個。該證書是針對www子域頒發的,但根據Name.com它也應該與根域一起使用。我試圖在子域和根域上查詢網站,達到相同的效果。

在此先感謝您的幫助。

+0

我不認爲它會破壞某些東西,但是你不需要這些readFileSync調用的''''''''''''''''''。 – loganfsmyth 2014-11-09 02:42:44

+0

在EC2服務器上,證書和密鑰是否位於指定位置?對於EB服務器,這可能是一個問題 – 2015-01-12 19:47:33

回答

3

原來,我沒有允許EC2儀表板中安全組中的端口443的傳入流量。允許從0.0.0.0/0這使SSL工作。我前一陣子解決了這個問題,但忘記了這個問題,所以這是其他人的答案。