你好 - 我是 SSL/HTTPS 的初学者,所以如果我的术语/理解有限,请原谅。
我正在运行一个 NodeJS 应用程序,它是多个其他服务器的代理服务器(它是一个简单的负载平衡器,遵循代码这文章)。
Node 应用程序在端口上运行7080
。我有一个 AWS Elastic Load Balancer,它监听端口80
并将请求(通过 TCP)转发到端口7080
,一切运行正常。
我一直在尝试添加 SSL 支持,并为我的域创建了 Let's Encrypt 证书(指向 ELB 端点)。我将证书上传到 AWS,并添加了一个带有证书的 SSL 侦听器,该侦听器也会转发到 TCP 7080
。这不起作用 - 请求只是超时。
在我遵循的 Node 应用程序说明中,它建议使用 SSL 证书文件配置应用程序并将这些设置传递给它创建的代理服务器。我也尝试过这个,但出现了证书错误,我认为这是因为我正在加载原始 EC2 实例 URL,而不是负载均衡器域(证书指向的域)。我希望通过在负载均衡器级别终止 SSL 请求,我不需要配置底层 Node 应用程序在 SSL 上运行。我误解了吗?
正如我上面所说,我对此很陌生,仍在努力弄清楚发生了什么。任何提示都将不胜感激。
答案1
首先,您说得对,通过在 AWS ELB 上终止 SSL,您无需担心在 NodeJS 应用程序上配置 SSL。这是我常用的模式 - 您不需要为节点应用程序配置任何与 SSL 相关的东西。
其次,在 AWS 中,我强烈建议您使用 Amazon 的证书管理器来创建证书,这样您就不必担心续订,而且实际上比尝试使用 Let's encrypt(这很好,但更适合 AWS 之外的应用程序)更容易设置和维护(而且仍然免费)。同样,我现在尽可能使用 ACM 证书 - 在生产中。
现在尝试解决您的问题。
假设这在 HTTP 上按预期工作,那么让它在 HTTPS 上运行应该很简单。
我首先要检查的是:
- 确保负载均衡器上没有阻止访问端口 443(我假设您的 HTTPS 侦听器正在侦听该端口)的安全组。ELB 上的关联安全组需要允许访问端口 80 和端口 443
- 使用浏览器开发者工具检查你没有收到意外的重定向到无法访问的内容,这可能是因为连接工作正常 -
curl
或者openssl s_client
可能有助于进一步调试
答案2
啊,我自己解决了这个问题。负载均衡器安全组没有打开端口 443(EC2 实例有,但存在冗余)。