421错误的请求


11

我偶尔会收到以下421错误:

错误请求

客户端需要用于此请求的新连接,因为请求的主机名与用于该连接的服务器名称指示(SNI)不匹配。

但是,刷新浏览器可以清除错误,并且页面可以正常加载。下次加载该页面时将不会产生错误,因此该模式看起来非常随机。我可以看到的唯一模式是,当我使用header(“ Location:”。$ url);重定向页面时,可能会发生这种情况。

我有来自Comodo的PositiveSSL多域证书。我的服务器是共享Web托管服务上的Apache,因此我无权访问该配置。

我从一个域加载页面,并且页面内是指向证书上第二个域的链接。

我已阅读的有关此错误的所有内容似乎都表明此问题与作为多域证书有关。

我想知道的是,在网页(php)编码方面是否有任何事情可能导致此问题(并且可以解决),或者是配置错误还是服务器错误,只有我的托管服务可以修理它。

到目前为止,我的托管服务无法提供任何服务,因此要求您致电告知下一次发生的确切时间,以便他们进行调查。任何帮助将不胜感激,因为我不太相信他们能解决这个问题。

更新 大约两年后,确定是时候应对它了。通过删除提供图片和JavaScript的静态域,我能够解决大多数问题。但是,我仍在为其中一些内容使用第二个域,特别是Safari仍然给我带来了问题。

我做了更多的研究,然后在这里碰到另一篇文章。正是@Kevin所描述的。该文章确认它在Safari中发生。因此,根据建议,我着手为每个域获取单独的证书。我在共享主机(Webhostinghub)上,发现它们现在提供免费的SSL(AutoSSL),可以自动续订。听起来确实不错。他们为我设置了5张免费证书。到目前为止,一切都很好。我什至可以尝试重新启用静态域以进行测试。如果这一切都行得通,我将节省$奖金作为启动费用,并让我的Comodo证书在7月过期。


您是否在同一Apache服务器上托管多个网站并使用相同的SSL证书,并且在这些域名之间切换时发生错误?
约翰·汉利

如果答案为“是”,请检查每个域的IP地址是否映射到同一虚拟服务器。如果是,那么您有两个选择(我能想到):1)为每个域名分别颁发SSL证书。2)将每个域的Web服务器移到不同的服务器上(不同的IP地址)。考虑到您使用共享主机,选项1可能是最好的解决方案。您可以使用Let's Encrypt发行多个免费证书以在其他Web服务器上安装来测试此解决方案。
约翰·汉利

询问您的托管服务提供商是否可以禁用mod_http2。
约翰·汉利

@JohnHanley-关于#1,是的,它是具有6个域的相同SSL。准确指出错误何时发生并不容易。主要场景是,我在一个域中从另外两个域中提取内容(图像和js)。关于#2:IP地址绝对相同-我收集每个域名分别颁发证书的费用会更高。我调查了“让我们加密”,但我的提供商不支持它。我的提供商在过去6个月中提供了免费证书,因此当本月续订时,我将切换并查看会发生什么。Re#3-他们无法禁用mod_http2。谢谢
mseifert

实际上,所有提供程序都支持“让我们加密”,除非他们专门阻止了它。无论您从何处获得SSL证书,都是相同的。唯一的区别是验证的类型(DV,OV,EV)和文件包装/格式。Apache非常流行,每个人都支持它们。只要您的供应商支持您上传自己的证书(证书和私钥),您就可以使用DNS验证来解决它们。如果他们不支持上传您自己的证书,那么我将更换供应商。
John Hanley

Answers:


14

这是由以下事件序列引起的:

  1. 服务器和客户端都支持并使用HTTP / 2。
  2. 客户在处请求一个页面foo.example.com
  3. 在TLS协商期间,服务器会提供一个对foo.example.com和都有效的证书bar.example.com(并且客户端会接受该证书)。这可以通过通配符证书或SAN证书来完成。
  4. 客户端重用该连接以发出请求bar.example.com
  5. 服务器无法或不希望支持跨域连接重用(例如,因为您配置了不同的SSL且Apache希望强制进行TLS重新协商),并且服务器提供HTTP 421服务。
  6. 客户端不会使用新的连接自动重试(例如,现已修复的Chrome bug#546991)。在相关的变更请求,表示该客户端可以重试,而不是它必须或者应当。无法重试并不是特别用户友好,但是对于调试工具或HTTP库而言可能是理想的。

事件6无法控制,但是根据服务器的软件,事件5可能是可修复的。有关如何以及何时发送HTTP 421的更多信息,请查阅服务器的HTTP / 2文档。或者,您可以为每个域颁发单独的证书,但是这样做会增加管理开销,可能不值得。您也可以完全关闭HTTP / 2,但是在大多数情况下,这可能会显得过分。


我有一个Comodo PositiveSSL多域证书-实际上是一个SSL证书。此时,要分开使用证书是一项巨大的工作和/或费用。主要问题在于尝试使用静态无cookie域来提供我的图像。我得到的421s数不值。目前,我已禁用了静态域。我仍然在域之间共享资源,但是421的数量急剧下降。目前还不值得所谓的效率。有一天,我有更多时间会测试您的建议。
mseifert

感谢您的详细说明。尽管这是一个令人烦恼的问题(大部分时候您只在使用Safari时才注意到它),但我发现导致此问题的一系列事件非常有趣:)
星期五

1

也许这对某人会有帮助。

当我尝试将apache虚拟主机配置更改为HTTPS但仅将端口从80更改为443并忘记添加时,出现此错误

   SSLEngine on
   SSLCertificateFile "/opt/lampp/htdocs/localhost.crt"
   SSLCertificateKeyFile "/opt/lampp/htdocs/localhost.key"

导致错误421的配置:

<VirtualHost mydoamin.local:443>   <-- fistly I 
       DocumentRoot "/opt/lampp/htdocs/mydomain/"
       ServerName www.mydomain.local
</VirtualHost>

正确的配置:

<VirtualHost mydoamin.local:443>
       DocumentRoot "/opt/lampp/htdocs/mydomain/"
       ServerName www.mydomain.local
       SSLEngine on
       SSLCertificateFile "/opt/lampp/htdocs/localhost.crt"
       SSLCertificateKeyFile "/opt/lampp/htdocs/localhost.key"
</VirtualHost>

-1

我遇到过同样的问题。切换到两个单插槽SSL可以解决问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.