在亚马逊EC2上运行一个简单的HTTPS Node JS服务器

11

我正在尝试在亚马逊EC2上创建一个简单的https服务器,以测试第三方API。

以下是我所遵循的步骤:

  1. 创建了一个Amazon EC2实例,并打开了HTTP和HTTPS端口:

enter image description here

  1. 使用以下命令创建简单的SSL证书:

openssl genrsa 2048 > privatekey.pem

openssl req -new -key privatekey.pem -out csr.pem

openssl x509 -req -days 365 -in csr.pem -signkey privatekey.pem -out server.crt

  1. 创建一个简单的Node.js服务器
var https = require('https');
var fs = require('fs');
var options = {
  key: fs.readFileSync('./privatekey.pem'),
  cert: fs.readFileSync('./server.crt')
};

https.createServer(options, function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}).listen(8080);
当我运行服务器并尝试使用URL https://ec2-XX-XXX-XXX-XXX.compute-1.amazonaws.com/ 进行连接时,我一直收到“连接被拒绝”的错误信息。
一个telnet测试也产生了以下结果:
Trying XX.XXX.XXX.XXX...
telnet: connect to address XX.XXX.XXX.XXX: Connection refused
telnet: Unable to connect to remote host

有人能告诉我在这个EC2实例上启用https需要修复什么吗?

1个回答

4

如果您没有监听443端口并将请求发送到Node的8080端口,请将listen(8080)更改为listen(443)


哇,原来如此简单。必须使用sudo运行服务器(因为端口号低于1024而收到错误),但对我来说不是阻碍。非常感谢! - dpigera
1
我也在尝试同样的事情,但似乎无法使其工作。 pem 和 crt 已经制作好并且位于同一目录中 - 我从服务器页面登录到控制台并确认它们在那里。我已将默认的 EC2 安全组设置为 443 上的 https。我可以使用 sudo 运行上面的示例 nodejs 服务器,并且它可以运行。但是当我尝试使用 https:// 连接时,它就会卡住。如果我删除选项并在端口 80 上运行 http,则可以正常工作。我没有负载均衡来干扰。有什么想法吗? - Dan Zen
1
我按照dpigera的步骤操作,运行sudo,监听443端口,在Chrome中打开地址后出现了"NET::ERR_CERT_AUTHORITY_INVALID"错误。虽然我可以输入"thisisunsafe"来跳过此错误,但通常该如何解决呢? - Blisterpeanuts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接