2017-08-11 186 views
0

我担心这可能是一个编程问题,但我也希望您可能会有一些建议。从AWS ELB转发到EC2实例上的不安全端口

我正在使用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头来呈现相对引用。除此之外,你有没有关于别人如何解决这个问题的想法?

谢谢你的时间和考虑。

+1

为什么你需要为每个EC2实例购买安全证书? –

回答

0

首先,通过在ELB/ALB中使用SSL终端,然后将安全组分配给仅接受来自ELB/ALB的流量的EC2的安全组,这是正确的方法。

但是,基于X-Forwarded-Proto请求头或基于自定义配置的https url响应需要在应用程序代码或Web服务器中处理。