[Domain Fronting] ALB 是否支持 ALB SNI / Host Header 不匹配?

0

【以下的问题经过翻译处理】 我有一个特定的设置,目前正在运行,但我正在尝试查找文档或其他东西,确保它确实受支持,而不仅仅是可能会在以后修复的内容。

我有一个共享的面向互联网的ALB,用于多个不相关的应用程序。目前,它有一个默认的ACM证书附加,例如针对域名shared-alb.com。默认操作是返回固定的503响应。shared-alb.com的DNS公开解析到ALB。

然后,我添加了一个单独的附加路由规则:如果Host标头匹配example-a.com,则将其转发到某个目标组。我没有将覆盖此域的ACM证书附加到ALB上。example-a.com的DNS解析到ALB。

我知道这是非标准的,但我能够通过强制SNI ClientHello中的主机名为shared-alb.com而不匹配实际HTTP请求中的Host标头example-a.com来成功地向我的目标组发送请求。

例如,这将成功:(注意:我甚至不需要传递-k来忽略SSL错误,因为TLS连接对于shared-alb.com主机名有效)

curl -H "Host: example-a.com" https://shared-alb.com

据我所知,大多数其他服务器如果SNI主机与HTTP Host标头不匹配,则会拒绝请求,或者至少需要一些手动设置覆盖才能允许它。但似乎AWS ALB会默认允许此功能?我在文档中找不到有关此事的具体提及。它确实谈到了SNI的“

profile picture
专家
已提问 5 个月前26 查看次数
1 回答
0

【以下的回答经过翻译处理】 通常情况下,客户端先发起 TLS 连接,在 Client Hello Packet 中的 SNI 字段中发送主机名。只有在成功的 TLS 握手后,才会交换应用程序数据,客户端发送与 SNI 中相同的主机头 Host Header。然而,我们可以通过命令 "curl https://shared-alb.com -H "Host: example-a.com"" 来操纵 Host header。这被称为 Domain Fronting,它涉及建立一个与 HTTP Host Header 不同的 SNI 字段的 TLS 连接。例如,TLS 连接可能连接到 www.example.com,然后发送一个 HTTP 请求到 www.example.org

ALB 允许 Domain Fronting。ALB 监听器规则可以支持多个域名/多个主机头。因此,建议在 ALB 监听器规则中创建 Host header 条件,仅针对 ALB 关联有 SSL/TLS 证书的域名,以仅允许真实流量。 然而,CloudFront 不支持 Domain Fronting。CloudFront 包括防止在不同 AWS 帐户之间发生域名前缀的保护。

参考 AWS 文档中的 "Domain fronting" 部分: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html#alternate-domain-names-restrictions

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则