无需为同一 IP 但使用相同通配符证书的多个 SSL 站点启用 SNI?

tha*_*ssd 6 iis ssl https sni

我有一个 IIS 服务器托管:

example.com/www.example.com
sub1.example.com
sub2.example.com

它们在 IIS 下被列为 3 个独立的站点,都通过 443 上的 HTTPS 绑定到相同的 IP。但它们都使用相同的 SSL 证书,这是一个覆盖 *.example.com 的通配符证书

在这种情况下,我的理解是 SNI 不是必需的,因为服务器为任何请求提供的证书(即相同的证书)无论如何都适用于所有站点,对吗?我自己测试了它,它似乎有效,但我只是想确保这样做不会对某些用户造成任何意外的不良结果(如果可能,我不想使用 SNI,因为我确实希望 Windows XP 支持这些网站)

出于好奇,我确实想知道当您有这样的设置(同一 IP 上通过 SSL 的多个站点但未启用 SNI)时,IIS 究竟如何决定提供哪个证书(IP 上的第一个 443 绑定?或者最后一个用过?)

此外,如果此设置有效,将来如果我将 example.org 添加到同一 IIS 服务器并使用不同的 SSL 证书,我是否可以仅为 example.org 启用 SNI 而不会影响其他 3 个站点?

Lex*_* Li 7

经验法则是,在 HTTP API 级别,

  • 您可以将单个证书绑定到 IP:443 作为基于 IP 的映射。
  • 您可以将证书绑定到domain:443作为SNI映射。

可以通过Jexus Manager直观地分析此类映射。

当 SSL/TLS 握手开始时,将首先扫描 SNI 映射以匹配请求中的主机名(来自支持 SNI 的浏览器)。如果没有 SNI 映射匹配,则扫描基于 IP 的映射。这就是决议的顺序。

当您在 IIS 管理器中配置站点时,会创建和更新映射。但是,HTTP API 中的此类映射与 IIS 配置是分开的。即使 IIS 中的站点被删除,它们也可以存在。

在您的情况下,由于您只有通配符证书,因此在 IIS 管理器中配置多个站点不会覆盖基于 IP 的映射,并且应该可以完美地工作。

但是,当您尝试使用另一个证书配置第二个域时,您无法使用相同的 IP 地址(因为 IP:443 映射已存在)。如果您强制在 IIS 管理器中进行配置,则应覆盖以前的证书。当然,此时可以使用SNI映射。


小智 6

从技术上讲,不,SNI 不是必需的,因为您所有的网站都共享相同的证书。IIS足够聪明(至少看起来)可以在非 SNI 客户端(甚至可能在启用 SNI 的客户端)上区分使用Host:HTTP 标头的网站,因此一切都按预期工作。

对于证书“优先级”,您可以通过发布查看使用哪个证书netsh http show sslcert,并且可以通过禁用该Require Server Name Indication特定网站的选项(在网站绑定设置窗口中)来选择默认证书(对于非 SNI 客户端)。更多信息:https : //stackoverflow.com/questions/19565961/default-certificate-for-sni-server-name-indication

这也应该回答您的第三个问题:如果您添加另一个带有 SNI 的网站,则现有网站不会发生变化(当然,通过使用不同的域和不同的证书,example.org只有启用 SNI 的客户端才能访问