这个问题看似简单,但确实有效。
当不支持 SNI 的浏览器尝试访问配置为通过 SNI 强制 SSL 的站点时,究竟会发生什么情况。
谢谢
答案1
这取决于你的 Web 服务器在收到没有 SNI 的 HTTPS 请求时如何反应。(如果你想测试它,你可以使用 openssl 模拟非 SNI 浏览器。需要基本的 HTTP 协议知识。)
使用 IIS 10 时,会发生以下情况:
如果配置了“默认 SSL 站点”(绑定到端口 443 且没有主机名的站点),则非 SNI 客户端将看到:
- 这证书的默认(错误)SSL 站点(通常会导致证书警告,除非您将默认 SSL 站点证书配置为包含 SAN全部托管在您的 IP 地址上的站点)以及
- 这内容的请求(正确的)站点(在用户忽略证书警告之后)。
这是很有道理的:
- SSL 握手发生在 HTTP 请求传输之前。因此,如果浏览器不支持 SNI,服务器只能返回默认的 SSL 站点证书。
- SSL 连接建立后(使用“错误”的证书),服务器接收 HTTP 请求,通过标
Host:
头读取请求的主机名并返回正确的内容。
如果没有配置“默认 SSL 站点”,则连接将被关闭。
(来源:刚刚用旧的 Windows XP IE8 虚拟机进行了测试。)
答案2
它可能会连接到默认 SSL 虚拟主机。换句话说,如果您使用以下 IP 连接,您将看到相同的站点:https://1.2.3.4/
答案3
肯定无法加载网站。这就是为什么近期没有大型网站会迁移到 SNI 托管的 HTTPS 网站的原因。XP 中的 IE6 和 IE7 似乎是不支持 SNI 的最大旧浏览器。
如果你能找到不支持 SNI 的浏览器,你可以访问以下地址查看会发生什么:https://alice.sni.velox.ch/
您使用的服务器软件似乎也很重要。使用 Apache,不支持 SNI 的浏览器只会获取第一个配置的网站(并且可能出现主机名不匹配警告)。
答案4
我刚刚使用在 Windows NT 4 Workstation 上运行的 IE 4.0 对其进行了测试。我的网站托管于http://www.nosupportlinuxhosting.com/,加载完美。我不确定他们的托管是否符合上述标准,但他们的“限制”页面表明情况确实如此。我对页面加载有点惊讶。