[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
EXPERTE
gefragt vor 5 Monaten30 Aufrufe
1 Antwort
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
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen