2014-11-08 108 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工作。我前一阵子解决了这个问题,但忘记了这个问题,所以这是其他人的答案。