我在阻止使用 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。