如何自定义AWS ELB可信证书颁发机构?

时间:2017-10-08 11:39:24

标签: amazon-elb client-certificates

我希望为我的API提供自定义的“可信CA”配置。不使用ELB时,我可以通过在我的Web服务器中配置“ca.pem”文件来实现此目的。但是,在使用ELB时,我认为我的Web服务器没有收到原始的传入客户端证书(而是ELB的证书)。

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

1 个答案:

答案 0 :(得分:0)

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

为了做你想做的事,ELB根本不能参加TLS。它必须由您的服务器完成,并且平衡器必须在第4层或更低层运行。这排除了Application Load Balancer,它仅在第7层运行。

有两种解决方案。

旧的解决方案是在TCP模式下使用ELB(Classic),禁用TLS(SSL) 。 ELB盲目地将有效载荷从加密连接传递到实例,该实例直接与浏览器协商TLS,因此可以使用其CA文件来验证浏览器。但是,它有点棘手,因为默认情况下,您的实例将无法看到客户端的IP地址,并且因为ELB正在以第4层模式运行(更不用说处理加密流量,它不理解),它不能添加 <intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:mimeType="text/plain"/> </intent-filter> 标题...所以必须启用&#34;代理协议&#34;对ELB的支持,您的实例必须了解如何从代理协议前导码中提取客户端地址。

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