[英]WSS Socket on EC2 instance with Load Balancer and Certificate Manager
我正在尝试设置一个解决方案,其中包括一个运行 NodeJS 的 Apache 的 EC2 实例。 我已经成功地创建了一个有效的网络服务器实例,其中包含来自证书管理器的公共 SSL 证书,该证书在端口 80 和 443 上访问。该服务器应该能够连接到我的另一个实例,但由于某种原因,我一直遇到死胡同和我怀疑解决方案是不可能的......
我已经使用 Let's Encrypt 证书构建了一个工作设置,但我希望尽可能多地保留在 AWS 中。
问题:在 LE 解决方案中,我可以访问服务器上的 local.pem 文件。 我可以在服务器设置文件中包含 LE 证书的本地路径,如下所示:
...
var options = {
key: fs.readFileSync("/etc/letsencrypt/live/example.com/privkey.pem"),
cert: fs.readFileSync("/etc/letsencrypt/live/example.com/fullchain.pem")
};
var https = require('https').Server(options, app);
...
但是当我使用 AWS Certificate Manager 的公共证书时,我不确定如何解决这个问题?
我的解决方案(不起作用):我不是 SSL 向导,所以我可能会在这里尝试做一些不可能的事情。 我尝试使用 OpenSSL 创建本地证书,但将负载均衡器和证书管理器证书保留在域中。
...
var options = {
key: fs.readFileSync("/home/ec2-user/server-key.pem"),
cert: fs.readFileSync("/home/ec2-user/server-cert.pem"),
};
var https = require('https').Server(options, app);
...
当我尝试使用 url: https://live.example.com:3000
连接到节点/套接字服务器时,此解决方案返回以下错误消息:
WebSocket connection to 'wss://live.example.com:3000/socket.io/?EIO=4&transport=websocket' failed: Error in connection establishment: net::ERR_CERT_COMMON_NAME_INVALID
所以我想我的解决方案在域上的证书管理器证书和服务器上的 OpenSSL 证书是不可能的,或者问题可以在其他地方找到?
请告诉我:-)
正如评论中提到的,通过 AWS Certificate Manager 创建的证书只能用于某些 AWS 服务,例如 Elastic Load Balancer,不能用于自我管理的 web 服务器。 您可以做的是使用证书管理器证书并将其放在负载均衡器上,而您的 Apache/Node 服务器位于目标组中的负载均衡器后面。 公共互联网上的所有连接都是 HTTPS,但负载均衡器和您的应用服务器之间的连接(通过 AWS 的内部网络)将是普通的 HTTP。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.