错误:
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,现在在证书上的每个网站之间切换时收到错误消息。这三个网站共享相同的IP地址。据我所知,这可能是问题所在。我不想为每个域重新发行SSL证书,因为我为EV多域证书付费。是否可以购买2个其他IP并确保每个域都有自己的IP?还是有一种方法可以编辑虚拟主机,以便保持现在的设置?
我应该提到,这仅在Safari上发生,而不是在chrome上发生。
SSL实验室报告
轻松的Apache HTTP vhost配置
轻松的Apache HTTPS虚拟主机配置
答案 0 :(得分:0)
您仅在三个站点中的两个站点上启用了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地址,要么仅为两个域重新颁发证书,为另一个域(而不应该共享连接)获得单独的证书。