我无法阻止使用HTTP / 2以强制浏览器使用HTTP / 1作为https内的协议。 TLS MITM是不可能的,根据处理开销,最多可以考虑类似NFQUEUE的用户模式数据包过滤。
通过阅读ALPN RFC,当我看到包含ALPN的ClientHello时,提供警报响应或断开连接是不明确的:http / 2将使浏览器在没有ALPN的情况下重试。
如果我理解正确,修改ClientHello是不可能的,因为当服务器使用ServerHello响应时会导致校验和错误,因为更改ClientHello会使该数据包的MAC无效。
阻止握手的行为是否为w.r.t. ALPN与处理TLS版本回退相同,即TLS_FALLBACK_SCSV?
编辑:根据openssl的t1_lib.c,如果服务器不知道ALPN,它会忽略它。因此,如果服务器为包含ALPN的ClientHello返回Alert,可能只是因为它不支持TLS1.2,没有办法向客户端发出信号“请在没有ALPN的情况下重试”而不是“alert”导致客户端尝试TLS1.1。
答案 0 :(得分:2)
通过ALPN协商TLS上的HTTP / 2。
浏览器会告诉服务器他们支持它。
如果您不想使用HTTP / 2,那么您只需修改服务器配置,使其没有h2
作为可以通过ALPN协商的协议之一。
ALPN协商将回退到HTTP / 1.1,客户端将使用HTTP / 1.1。