终止 TLS 时 AWS NLB 是否传递 SNI 值?(通过 SNI 进行路由)

Joh*_*ohn 8 ssl tcp amazon-web-services sni amazon-elb

AWS 网络负载均衡器支持 TLS 终止。这意味着可以在 AWS Certificate Manager 中创建证书并将其安装到 NLB 上,然后使用 TLS 加密的 TCP 连接将在 NLB 上解密,然后重新加密或传递到未加密的侦听器。详细信息位于: https: //docs.aws.amazon.com/elasticloadbalancing/latest/network/create-tls-listener.html

使用 AWS Certificate Manager 的好处是证书将由 AWS 自动管理和轮换。无需将面向公众的证书放在私有实例上。

我想基于 SNI 将 TCP 连接路由到 NLB,即可以根据客户端请求的服务器名称将到同一端口和 IP 的连接路由到不同的目标。虽然我可以看到使用 SNI来支持给定侦听器的多个 TLS 证书来确定提供哪个证书,但我不知道如何基于 SNI 配置侦听器。

因此,我将 HAProxy 放在 NLB 后面,并希望使用 SNI 路由到不同的后端。我在 NLB 处终止与客户端的 TLS,使用 HAProxy 上的自签名证书重新加密 NLB 和 HAProxy 之间的流量,然后使用未加密的 TCP 路由到后端。

(client) --TLS/TCP--> (NLB on port 443) --TLS/TCP--> (AWS target group on port 5000, running HAProxy) --TCP--> backends on different IPs/ports
Run Code Online (Sandbox Code Playgroud)

AWS NLB 是否将 SNI 详细信息传递给目标组?

如果我直接连接到 HAProxy(不通过 NLB),那么我可以使用 SNI 路由到选择的后端,但如果我通过 NLB 连接,则无法使 SNI 路由工作。

Bru*_*ira 1

根据这个SO答案istio文档,如果您终止负载均衡器上的TLS,它不会将SNI携带到目标组。我遇到了完全相同的问题,最终通过将主机设置'*'为入口Gateway,然后指定不同的主机VirtualService(如此处推荐的那样)来解决它。

我认为这个解决方案也可以工作,但没有尝试。您必须在 istio GatewaySecret 上设置证书并在 NLB 上执行 TLS 传递,但是您不能使用AWS ACM SSL certificates上一个链接中指出的那样。