在防火墙级别上阻止HTTP/2协议

4
我遇到了一些问题,无法阻止使用HTTP/2,以便强制浏览器在https内部使用HTTP/1协议。 TLS MITM不可行,最多考虑类似于NFQUEUE的用户模式数据包过滤,具体取决于处理开销。
从阅读ALPN RFC来看,如果我看到包含ALPN:http/2的ClientHello时提供警报响应或断开连接,是否会使浏览器重试而没有ALPN,目前还不清楚。
如果我理解正确,修改ClientHello是不可能的,因为当服务器响应ServerHello时更改ClientHello会导致校验和错误,因为更改ClientHello会使该数据包的MAC失效。
关于阻止握手的行为是否与处理TLS版本回退的行为相同,即TLS_FALLBACK_SCSV?
编辑:根据openssl的t1_lib.c,如果服务器不知道ALPN,则会忽略它。因此,如果服务器返回Alert,表示包含ALPN的ClientHello,这可能仅是因为它不支持TLS1.2,除了“alert”之外,没有任何方法可以向客户端发出“请重试而没有ALPN”的信号,这将导致客户端尝试TLS1.1。

这是什么类型的防火墙?如果这是一个简单的数据包过滤器,那么你将无法成功地阻止HTTP/2,但我也看不到阻止的用处,因为你无论如何都不会检查内容。如果这是一个可以检查SSL流量的防火墙,它将作为中间人工作,因此可能会自动剥离ALPN扩展,导致降级到HTTP/1.x。除此之外,我认为这个问题不适合在这里讨论,更适合在security.stackexchange.com或serverfault.com上讨论。 - Steffen Ullrich
为什么你想这样做呢?可能有更好的替代方案。另外,你是在谈论入站连接还是出站连接? - Barry Pollard
我编辑了问题以排除TLS MITM,这是针对出站防火墙的。 - patraulea
1个回答

3

HTTP/2通过ALPN协议进行TLS协商。

浏览器通知服务器它们支持HTTP/2。

如果您不想使用HTTP/2,则只需修改服务器配置,使其不将h2作为可以通过ALPN协商的协议之一即可。

然后ALPN协商将回退到HTTP/1.1,并且客户端将使用HTTP/1.1。


最简单的解决方法是在服务器配置中进行更改,但我无法控制Web服务器。我更新了问题以使其清晰明了。对我来说不清楚的是,是否可以在(出站)防火墙上拒绝http2或ALPN,而无需向客户端推送策略或执行TLS MITM。 - patraulea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接