gpt4 book ai didi

http-status-codes - http2:421 错误定向请求状态代码示例

转载 作者:行者123 更新时间:2023-12-02 20:52:26 27 4
gpt4 key购买 nike

我正在阅读 spec并尝试准确了解 421 何时可能返回。给出了一个例子,但我不太明白。

背景

该规范建立了两个允许连接重用的条件:

For TCP connections without TLS, this depends on the host having resolved to the same IP address.

For https resources, connection reuse additionally depends on having a certificate that is valid for the host in the URI.

如果连接中使用的证书有多个subjectAltNamesubjectAltName 中的任何一个是通配符,则该连接可以重复用于主机名位于 subjectAltName 列表中的任何请求。 s 或 匹配任何通配符。

规范中的具体示例

In some deployments, reusing a connection for multiple origins can result in requests being directed to the wrong origin server. For example, TLS termination might be performed by a middlebox that uses the TLS Server Name Indication (SNI) [TLS-EXT] extension to select an origin server. This means that it is possible for clients to send confidential information to servers that might not be the intended target for the request, even though the server is otherwise authoritative.

请解释我对这个例子的理解哪里错误:

使用具有域 x.com 的请求建立与中间件的 https 连接。中间盒的 IP 地址为 1.2.3.4 和 x.com解析到该地址。使用 SNI,TLS 握手有 x.com并且中间件返回对该域有效的证书。此连接上的所有消息都从客户端发送到中间件或从中间件发送到客户端。从客户端到中间件的应用程序级消息由中间件转发到不同连接上的源。从源到中间盒的消息被转发到客户端。如果要重用连接,满足上面讨论的两个条件是不够的。具体来说,对于域 y.com 的请求:如果y.com解析为 1.2.3.4 并且中间件具有对 y.com 有效的证书,仍然可能存在问题。因为原始连接使用 x.com 进行 TLS 握手。并且由于握手仅在新连接开始时进行,因此无法建立 https 连接来获取 y.com 的证书。 。因此客户端错误地在同一连接上向 y.com 发送请求。 。中间件拒绝请求,因为与连接关联的证书对于 x.com 有效。 - 不是y.com 。 (x.com 证书仅对 x.com 有效,而 y.com 证书仅对 y.com 有效)。

最佳答案

据我所知,您的示例都不会触发 421。

是的,您是对的,连接需要同时证书中的 IP 地址和 SAN 字段才有效 - 如果没有这些,则不应重复使用连接。

那么什么会触发 421?据我所知,这主要是由于不同的 SSL/TLS 设置造成的。

例如:假设网站 A (siteA.example.com) 和网站 B (www.example.com) 都位于同一 IP 地址。假设网站 A 有一个 *.example.com 的通配符证书,而网站 B 有一个特定的证书。可能有几个原因:例如,它为主网站提供 EV 证书,而该证书不能是通配符证书。

因此证书 A 涵盖网站 A 和网站 B。IP 地址也是如此。因此,如果您连接到网站 siteA.example.com,然后尝试连接到 www.example.com,那么从技术上讲,根据 HTTP/2 标准,您可以重用该连接。但我们不希望这种情况发生,因为我们想使用我们的 EV 证书。因此服务器应该拒绝 421。现在,在这个示例中,网络服务器能够区分正确的主机并拥有该主机的有效证书,因此理论上可以在通配符证书下提供正确的内容,而不是发送 421 - 但由于没有为该虚拟主机定义通配符证书,因此不应该这样做。

其他示例包括您是否在不同主机上设置了不同的密码。例如,站点 A 具有 super 宽松的 HTTPS 配置,因为它不是真正安全的内容,并且他们甚至希望访问旧版浏览器,但站点 B 具有 super 安全配置,并且仅接受最新的 TLS 版本和强密码。在这里,您显然不希望他们重复使用相同的连接详细信息。请参阅here一个真实的例子。

此外,这只是某些浏览器的问题,具体取决于它们决定连接共享的方式。此页面显示了他们每个人执行此操作的不同之处(至少在撰写本博客文章时没有意识到此后发生的任何变化):https://daniel.haxx.se/blog/2016/08/18/http2-connection-coalescing/

另请注意,这会存在一些错误(例如: https://bugs.chromium.org/p/chromium/issues/detail?id=546991 )。最好的建议是:如果您不希望发生连接共享,请使用不同的 IP 地址和/或确保证书中没有重叠。

关于http-status-codes - http2:421 错误定向请求状态代码示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41785803/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com