【发布时间】:2018-01-20 12:14:15
【问题描述】:
我担心这可能是一个编程问题,但我也希望它足够普遍,您可能会提出一些建议。
我正在迁移到使用 AWS 弹性负载均衡器将流量定向到 EC2 实例的故障转移环境。目前,我已经在 ELB 后面设置了一个 EC2 实例。你马上就会明白为什么。尽管它使用此 ELB -> EC2 路径向我的客户提供内容,但它仍处于测试模式。
在我的每个生产环境(我有两个)中,我在负载均衡器上都有一个 AWS 证书,在 EC2 实例上有一个私人获取的安全证书。负载均衡器侦听器配置为将在端口 443 上接收到的流量发送到 EC2 实例上的安全端口 (443)。这是有效的;但是,当我在负载均衡器后面扩展到更多 EC2 实例时,我必须为每个 EC2 实例购买一个安全证书。
根据向我提出的建议,我设置了一个测试环境,其中包含一个新的负载均衡器及其配置的 EC2 服务器。此 ELB 服务器将在其端口 443 上接收到的消息发送到 EC2 系统上的端口 80。有人告诉我这是应该做的方式 - 将加密/解密限制在负载均衡器上,并在负载均衡器与其实例之间使用未加密的通信。
最后,这是我的问题。此应用程序提供的 HTML 页面使用对每个页面中嵌入脚本和其他工件的相对引用。当请求到达 EC2 实例(应用程序服务器)时,它已被降级为 HTTP,无论它最初是什么。这意味着对这些嵌入式工件的引用被呈现为不安全 (HTTP)。因为原始页面引用是安全的 (HTTPS),所以浏览器拒绝加载这些不安全的资源。
我已经在应用程序中使用标头 X-Forwarded-Proto 来确定负载平衡器上的原始请求是 HTTP 还是 HTTPS。我希望 EC2 实例中有一些参数告诉它根据收到的 X-Forwarded-Proto 标头呈现相对引用。除此之外,您对其他人如何解决此问题有任何想法吗?
感谢您的时间和考虑。
【问题讨论】:
-
为什么必须为每个 EC2 实例购买安全证书?
标签: security amazon-ec2 elastic-load-balancer