在 Windows Server 2016 上使用带有 TLS/SSL 终止的 HTTP/2

在 Windows Server 2016 上使用带有 TLS/SSL 终止的 HTTP/2

我正在研究使用 Windows Server 2016 来运行位于使用 SSL 卸载的负载均衡器后面的一组 Web 服务器的可能性。

对我来说,Windows Server 2016 相对于 2012 的最大优势在于可以使用 HTTP/2 协议。但是,由于 HTTP/2 通常是针对 HTTPS 实现的,我担心请求不会被识别为 HTTPS,因为它们以 HTTP 形式到达(尽管带有标头x-forwarded-proto)。我确实查看了一下,发现了一些资源但没有太多具体的证据。

是否有人知道 IIS 是否支持此设置并仍通过 HTTP/2 发送响应,或者所有流量是否都会回退到 HTTP/1.1?有没有办法配置/欺骗(!)IIS 在可能看起来不安全的请求上使用 HTTP/2?

谢谢。

编辑:需要澄清的是,负载均衡器将发送x-forwarded-proto:https到服务器,但由于 SSL 卸载,请求应用程序认为它是不安全的。

答案1

正如您链接的博客文章中所指出的那样(并在其变为官方文档时得到确认)这里),仅当与 IIS 服务器建立了 TLS 连接时,IIS 才会使用 HTTP/2 协议。

正如目前在 IIS 10 中实现的那样,HTTP/2 是在 TLS 握手期间使用 ALPN 来识别的。如果没有 ALPN 或 TLS,则不会有 HTTP/2。请参阅此从 2015 年 5 分 06 秒开始的 BUILD 演讲请记住,IIS 没有实现 HTTP/1.1 升级机制(如视频中 8'46" 处所述)。

在您的场景中,几乎可以肯定的是,负载平衡器将建立清晰的 TCP 连接并向后端服务器发送 HTTP/1.1 请求。当 IIS 甚至可以看到标x-forwarded-proto头时,连接已经建立,并且 HTTP/1.1 协议已经被识别。

现在,您的负载均衡器本身可能可以支持 HTTP/2,因此您的最终用户的浏览器将能够与负载均衡器多路复用请求和响应,同时将其转换为对后端服务器的 HTTP/1.1 请求和响应。

您的负载均衡器也有可能与后端服务器建立 TLS 连接并使用 HTTP/2,但这大多会破坏 SSL 卸载的意义。

相关内容