amazon-web-services - 带有负载均衡器和证书管理器的 EC2 实例上的 WSS 套接字
问题描述
我正在尝试设置一个解决方案,其中包括一个运行 NodeJS 的 Apache 的 EC2 实例。我已经成功地创建了一个有效的网络服务器实例,其中包含来自证书管理器的公共 SSL 证书,该证书在端口 80 和 443 上访问。该服务器应该能够连接到我的另一个实例,但由于某种原因,我一直遇到死胡同和我怀疑解决方案是不可能的......
我已经使用 Let's Encrypt 证书构建了一个工作设置,但我希望尽可能多地保留在 AWS 中。
问题: 在 LE 解决方案中,我可以访问服务器上的本地 .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。
推荐阅读
- java - @valid 注释未按预期工作
- python - 任意数量的嵌套for循环的算法
- dialogflow-es - Google Action - 无法在 Fulfillment Dialogflow 中连接网络挂钩
- android - 如何从内部存储中检索图像?
- c# - 如何在 .NET C# 的相同 url Rest API 中使用 POST 和 GET 方法
- wxglade - wxGlade:根据 wxGlade 内部的字符数设置初始大小
- kubernetes - 来自 IDE 的 io.fabric8.kubernetes.client.KubernetesClientException
- visual-studio-code - VSCode 个人快捷方式在笔记本编辑器中不起作用
- python - 如何将第一行添加到 csv_read 值?
- c# - 如何轻松地从解决方案迁移所有项目