【问题标题】:Misdirected redirect with 3 domains on EV SSLEV SSL 上带有 3 个域的错误重定向
【发布时间】:2019-06-04 05:58:38
【问题描述】:

错误

The client needs a new connection for this request as the requested host name does not match the Server Name Indication (SNI) in use for this connection.

我最近从 Comodo 购买了 EV SSL 证书,将其安装在我的 VPS (cPanel/WHM) 上,一切正常。然后我升级到 http2,现在在证书上的每个网站之间切换时收到错误消息。这 3 个网站共享相同的 IP 地址。据我所知,这可能是问题所在。我不想为每个域重新颁发 SSL 证书,因为我为 EV 多域证书付费。购买2个额外IP并确保每个域都有自己的IP的答案是什么?或者有没有办法可以编辑虚拟主机,以便我可以保持现在的设置?

我应该提一下,这只发生在 Safari 上,而不是 chrome。

SSL 实验室报告

https://www.ssllabs.com/ssltest/analyze.html?d=www.deschutesdesigngroup.com&s=142.4.0.142&hideResults=on

EasyApache HTTP 虚拟主机配置

https://pastebin.com/dNeFRGWJ

EasyApache HTTPS 虚拟主机配置

https://pastebin.com/vgWAD5mg

【问题讨论】:

  • 错误是什么?从http2降级是否再次修复它?您是否通过ssllabs.com/ssltest 运行您的网站以查看设置是否正确?
  • @BarryPollard 我已经用错误和 SSL 实验室报告更新了问题。

标签: apache ssl cpanel http2


【解决方案1】:

您只在三个站点中的两个站点上启用了 HTTP/2。

如果 IP 地址匹配并且证书涵盖所有必要的域,HTTP/2 将尝试为多个域重用连接。这里就是这种情况,因此重用了 HTTP/2。

但是,如果您在所有三个域上运行 SSLLabs,您会发现用于 Chrome 的协议略有不同(例如):

Chrome 70 / Win 10  RSA 2048 (SHA256)   TLS 1.2 > h2  
Chrome 70 / Win 10  RSA 2048 (SHA256)   TLS 1.2 > http/1.1  
Chrome 70 / Win 10  RSA 2048 (SHA256)   TLS 1.2 > h2  

同样在 ALPN 设置中进一步向下:

ALPN    Yes   h2 http/1.1
ALPN    Yes   http/1.1
ALPN    Yes   h2 http/1.1

所以首先进入中间域会起作用,因为它将通过 HTTP/1.1 连接,因此不会重用连接。但是,在向第一个或最后一个域发起请求后转到中间域将尝试重用 HTTP/2 连接并失败,因为中间域不支持 HTTP/2。

当浏览器不应该尝试重用连接时,Web 服务器应该为任何请求返回 421 Misdirected Request status code,表示“是的,你真的不应该在这里尝试重用连接!你能再试一次吗?请问另一个连接?”。如果存在不同的 SSL/TLS 设置(例如,用于连接的密码套件在其他域上不被接受),也会发生同样的事情。

Chrome 和 Firefox 正确处理 421 响应并通过新连接透明地重新发送请求,在这种情况下,新连接使用 HTTP/1.1(查看浏览器中的开发人员工具,您会发现这是真的)。其他浏览器,包括 iOS 使用的 Safari,还没有实现对相对较新的 421 状态码的支持,因此失败并出现如下错误:

错误的请求

客户端需要这个请求的新连接作为请求 主机名与使用的服务器名称指示 (SNI) 不匹配 这个连接。

我认为没有理由不在所有域上启用 HTTP/2,这是配置错误吗?如果是这样,请在所有域中启用 HTTP/2,您的问题应该得到排序。

如果您不想在所有域上都使用 HTTP/2,那么请确保浏览器不会认为它可以重用连接。这意味着要么为该域使用单独的 IP 地址,要么只为两个域重新颁发证书,并为另一个不应该共享连接的域重新颁发证书。

【讨论】:

  • 这很有意义。谢谢你的精彩解释。我使用 cPanel 管理 Apache 配置并使用 EasyApache 安装 HTTP2。我会假设它为所有域启用它?如何确保在所有 3 个域上都启用它?
  • 我想你可能在我关闭 HTTP2 时检查了 SSL Labs。我已重新启用它,它似乎适用于每个域,因为协议和 ALPN 看起来对所有 3 个都是正确的。但我仍然收到 421 错误。
  • 现在看起来好多了,但同意它有时仍然会出现该错误。您可以为每个域提供所有 SSL 虚拟主机配置吗?一定有什么不同。
  • 我已将 EasyApache 自动生成的虚拟主机配置附加到原始帖子中。
  • 好吧,我已经解决了这个问题。我卸载了 Varnish 并安装了 Nginx 作为我的缓存反向代理。 SSL 终止发生在 nginx 上,然后所有请求都通过 HTTP 传递给 Apache。似乎工作得很好。谢谢你的帮助。如果有人好奇,我正在使用 Engintron cPanel 插件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 2013-02-11
  • 1970-01-01
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
  • 2015-06-17
相关资源
最近更新 更多