3

我在阻止使用 HTTP/2 以强制浏览器使用 HTTP/1 作为 https 中的协议时遇到问题。TLS MITM 是不可能的,最多可以考虑类似 NFQUEUE 的用户模式包过滤,具体取决于处理开销。

从阅读 ALPN RFC 来看,当我看到包含 ALPN:http/2 的 ClientHello 时,是否提供警报响应或断开连接尚不清楚是否会使浏览器在没有 ALPN 的情况下重试。

如果我理解正确,修改 ClientHello 是不可能的,因为当服务器用 ServerHello 响应时它会导致校验和错误,因为更改 ClientHello 会使该数据包的 MAC 无效。

ALPN 中阻塞握手的行为是否与处理 TLS 版本回退相同,即 TLS_FALLBACK_SCSV ?

编辑:根据 openssl 的 t1_lib.c,如果服务器不知道 ALPN,它会忽略它。因此,如果服务器为包含 ALPN 的 ClientHello 返回 Alert,可能只是因为它不支持 TLS1.2,除了“alert”之外,无法向客户端发出“请在没有 ALPN 的情况下重试”的信号,这会导致客户端尝试 TLS1.1。

4

1 回答 1

2

通过 ALPN 协商基于 TLS 的 HTTP/2。

浏览器会告诉服务器他们支持它。

如果您不想使用 HTTP/2,那么您只需要修改服务器配置,使其不具备h2可以通过 ALPN 协商的协议之一。

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

于 2017-11-08T17:40:45.520 回答