好吧,这可能是一个新手问题,但这是我的情况。
- 我目前有一个负载均衡器来管理单个 EC2 实例。
- 我有一个应用程序在该 EC2 实例上运行。
我想要实现的目标:1. 与 EC2 上当前绑定到 8080 的应用程序建立完整的 HTTPS 连接。
实现这一目标的正确方法是什么? 1. 我是否应该将 SSL 证书上传到负载均衡器并强制在客户端和负载均衡器之间建立 SSL 连接? 我应该让安全组保护负载均衡器和 EC2 之间的流量吗?
或者 -
- 我是否需要使用另一个证书配置我的 tomcat Web 应用服务器并使用密钥库路径配置其 443 https 连接器并将 HTTP 连接重定向到 443 端口?
或者 -
我是否遗漏了什么?谢谢,
答案1
满足您需求的最简单的配置可能是:
- 将 tomcat 设置为以 HTTP 方式监听 8080 端口
- 将您的 SSL 证书上传到 ELB 并将您的 ELB 设置为终止 SSL。
- 将 ELB 上的端口 443 转发到实例上的端口 8080。
- 将您的 EC2 安全组配置为仅接受来自端口 8080 上的 ELB 安全组的连接。这样,就没有人可以绕过您的 ELB。
这会将加密从您的 EC2 实例卸载到 ELB。
可选附加项:
- 还将 ELB 上的 HTTP 端口 80 转发到 tomcat 上的另一个端口,并将 HTTP 重定向到 HTTPS。
这样,如果您的客户端通过 HTTP 连接,它们将自动重定向到 HTTPS。
答案2
通常,您的负载均衡器将负责协商与客户端的 https 连接,然后它将连接回原始 tomcat 服务器以通过纯 http 获取内容(因为对于该短跳,不需要太多加密,并且大概您可以信任本地网络)。您应该将负载均衡器设置为将其收到的任何 http 请求重定向到 https,并且您只需要在负载均衡器上设置 https 证书。对于 tomcat 后端,您需要确保所有链接都是相对的,或者告诉客户端转到 https。
我不能 100% 确定这是否是您想要的,因此如果您想知道其他信息,请告诉我。
答案3
我认为接受的答案不正确。将您的 SSL 证书上传到负载均衡器并请求 HTTPS 通道将导致负载均衡器解密 SSL 流量并将其解密后传递到负载均衡器后面。(OP 要求将 SSL 提供给应用程序)。
根据ELB 文档
“如果您不希望负载均衡器处理 SSL 终止(称为 SSL 卸载),则可以对前端和后端连接使用 TCP,并在处理请求的注册实例上部署证书。”
因此,正确的做法是转发 TCP:443(在负载均衡器上)--> TCP:443(在实例上或其他端口上)。
如果您想要端到端加密,则必须在应用程序服务器上安装 SSL 密钥。
这也意味着 ELB 无法篡改您的 HTTPS 标头——我认为这是粘性连接所必需的。对于无状态应用服务器,这不是问题。