amazon-web-services - AWS NLB 是否在终止 TLS 时传递 SNI 值? (通过 SNI 路由)

标签 amazon-web-services ssl tcp amazon-elb sni

AWS 网络负载均衡器 support TLS termination .这意味着可以在 AWS Certificate Manager 中创建证书并将其安装到 NLB,然后使用 TLS 加密的 TCP 连接将在 NLB 处解密,然后重新加密或传递给未加密的监听器。详情在这里:https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-tls-listener.html .

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

我想根据 SNI 将 TCP 连接路由到 NLB,即可以根据客户端请求的服务器名称将到同一端口和 IP 的连接路由到不同的目标。虽然我可以看到 multiple TLS certificates for a given listener are supported使用 SNI 来确定要提供哪个证书,我看不到如何基于 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

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

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

最佳答案

根据this SO answeristio docs ,如果您在负载均衡器上终止 TLS,它不会将 SNI 传送到目标组。我遇到了完全相同的问题,我最终通过将主机设置为 '*' 来解决它在入口Gateway然后在不同的 VirtualService 上指定主机s(推荐 here)。
我认为 this solution也可以,但没试过。您必须在 istio Gateway 上设置证书 secret 并在 NLB 上进行 TLS 传递,但是您不能使用 AWS ACM SSL certificates正如在上一个链接中指出的那样。

关于amazon-web-services - AWS NLB 是否在终止 TLS 时传递 SNI 值? (通过 SNI 路由),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59326184/

相关文章:

postgresql - 以编程方式获取 AWS RDS 连接字符串

amazon-web-services - 如果失败,Lambda 会重试该消息吗?

mysql - 如何使用 IP 直接从本地主机连接嵌套虚拟机?

ssl - DBeaver SSL 已禁用

WCF 服务限制

c# - 检查 TcpLayer 或 udpLayer 是否不为空

python - Boto3 S3 列表对象在 AWS lambda 中抛出错误

spring - Firebase 信任库并设置 Spring 以接受来自 Firebase 的证书

java - 客户端的证书?

c - 非阻塞 TCP 接受器不从套接字读取