2017-10-08 248 views
0

我想为我的API定制“可信CA”配置。当不使用ELB时,我可以通过在我的Web服务器中配置“ca.pem”文件来实现此目的。但是,使用ELB时,我认为我的Web服务器不会收到原始传入客户端证书(而是ELB的证书)。如何自定义AWS ELB可信认证中心?

是否有可能以某种方式使我的自定义CA即使在ELB后面生效?

回答

0

您的实例不仅看不到原始客户端的证书......它实际上并不参与与客户端相同的TLS会话。 ELB Classic和ALB创建两个独立的TLS会话并将其有效载荷捆绑在一起。

要做你想做的事,ELB根本无法参与TLS。它必须全部由您的服务器完成,并且平衡器必须在第4层或更低层操作。这就排除了仅在第7层操作的应用程序负载平衡器。

有两种解决方案。

旧的解决方案是在TCP模式下使用ELB(经典),TLS(SSL)已禁用。 ELB将有效载荷从加密连接盲目地传递到实例,该实例直接与浏览器协商TLS,并因此可以使用其CA文件来验证浏览器。然而,它有点棘手,因为默认情况下你的实例不会看到客户端的IP地址,并且因为ELB运行在第4层模式(更不用说处理它不理解的加密流量),它不能添加X-Forwarded-For标题...因此必须在ELB上启用“代理协议”支持,并且您的实例必须了解如何从代理协议标题中提取客户端地址。

较新的解决方案是第三种平衡器,称为Network Load Balancer。此服务在第3层运行,并允许您 - 实质上 - 将单个弹性IP地址映射到多个EC2实例,以平衡特定端口上的传入请求,并进行运行状况检查以消除旋转中不健康的实例。您的实例仍然负责处理所有 TLS本身,但他们将在传入连接上看到客户端地址。