【发布时间】:2018-04-21 11:04:43
【问题描述】:
我在阻止使用 HTTP/2 以强制浏览器使用 HTTP/1 作为 https 中的协议时遇到了问题。 TLS MITM 是不可能的,最多可以考虑类似 NFQUEUE 的用户模式包过滤,具体取决于处理开销。
通过阅读 ALPN RFC,不清楚当我看到包含 ALPN:http/2 的 ClientHello 时提供警报响应或断开连接是否会使浏览器在没有 ALPN 的情况下重试。
如果我理解正确,修改 ClientHello 是不可能的,因为它会在服务器响应 ServerHello 时导致校验和错误,因为更改 ClientHello 会使该数据包的 MAC 无效。
是阻塞握手的行为 w.r.t. ALPN 与处理 TLS 版本回退相同,即 TLS_FALLBACK_SCSV ?
编辑:根据 openssl 的 t1_lib.c,如果服务器不知道 ALPN,它会忽略它。因此,如果服务器为包含 ALPN 的 ClientHello 返回 Alert,可能只是因为它不支持 TLS1.2,除了“alert”之外,无法向客户端发出“请在没有 ALPN 的情况下重试”的信号,这会导致客户端尝试 TLS1.1。
【问题讨论】:
-
是什么防火墙?如果这是一个简单的数据包过滤器,那么您将无法成功阻止 HTTP/2,但我认为阻止也没有用,因为您无论如何都不检查内容。如果这是一个可以检查 SSL 流量的防火墙,它将作为中间人工作,因此可能会自动剥离 ALPN 扩展,从而导致降级到 HTTP/1.x。除此之外,我认为这个问题在这里是题外话,在 security.stackexchange.com 或 serverfault.com 上有更多的话题。
-
为什么要这样做?因为可能有更好的选择。还有你说的是入站连接还是出站连接?
-
我编辑了问题以排除 TLS MITM,这是针对出站防火墙。