我有两个不同的相关站点“系列”,每个站点在同一台服务器上都有自己的 UCC 证书。
我将它们托管在同一个 IIS 服务器上,每个家庭使用一个 IP 地址。
两个 UCC 证书均来自 GoDaddy。
每个绑定(对于 UCC 中的每个 SAN)都已禁用“需要服务器名称指示”。
然而,当我尝试通过 Windows XP 上的 IE 8 访问该网站时,只有一个“系列”网站可以正常运行。另一个则无法运行。
在分析 SSL 时SSLLabs.com我得到以下结果 - 告诉我“该网站仅在支持 SNI 的浏览器中运行。”
但这怎么可能呢!我已为每个 :443 绑定禁用了“需要 SNI”。
我甚至查看了该applicationHost.config
文件,没有一个站点sslFlags="1"
表明此设置已启用。是的,我还重新启动了 IIS。
发生了什么事?我很困惑。我想知道我是否可以以某种方式完全禁用服务器上的 SNI,或者是什么会触发这种情况发生。我昨天进行了几个月的 Windows 更新,但坦率地说,我认为这种情况已经持续了很长时间而我却没有意识到 - 基于 IE8 XP 客户端的销售额为 0 美元 ;-)
编辑:
我真的认为我的 IIS 已损坏。当我运行时,netsh http show sslcert
每个绑定都是 IP:port 形式。根据本文如果启用了 SNI,那么我会看到并且看不到这种格式的条目。注册表中hostname:port
也没有条目- 但我确认如果我临时添加 SNI 绑定,这里会创建一个新的条目。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\SslSniBindingInfo
IP:port : 10.0.0.2:443
Certificate Hash : d59a149e6678bc10d62093401c5b705cc23094be
Application ID : {4dc3e181-e14b-4a21-b022-59fc669b0914}
Certificate Store Name : My
Verify Client Certificate Revocation : Enabled
Verify Revocation Using Cached Client Certificate Only : Disabled
Usage Check : Enabled
Revocation Freshness Time : 0
URL Retrieval Timeout : 0
Ctl Identifier : (null)
Ctl Store Name : (null)
DS Mapper Usage : Disabled
Negotiate Client Certificate : Disabled
答案1
有一件事我没有提到,那就是我正在使用IIS 集中证书存储- 事实证明这一点很重要。
对于我的网站,我们假设它们是以下组(IP 是内部的并通过防火墙映射)。
Group A : red.com, blue.com, green.com (UCC certificate A) 10.0.0.1
Group B : cat.com, dog.com, mouse.com (UCC certificate B) 10.0.0.2
组 A 是按我期望的方式运行的组(未报告需要 SNI)。组 B 未在装有 IIS 8 的 XP 上运行。
在我的证书存储中,我有每个证书的多个副本(只是pfx
文件系统中的文件)。
red.com.pfx
blue.com.pfx
green.com.pfx
等等,适用于所有网站
当我运行命令时,netsh http show sslcert
结果发现只有一个条目10.0.0.1:443
,而没有一个条目10.0.0.2:443
。这就是导致每个站点行为不同的原因。
IP:port : 10.0.0.1:443
Certificate Hash : d4a17e3b57e48c1166f18394a819edf770459ac8
Application ID : {4dc3e181-e14b-4a21-b022-59fc669b0914}
Certificate Store Name : My
Verify Client Certificate Revocation : Enabled
Verify Revocation Using Cached Client Certificate Only : Disabled
Usage Check : Enabled
Revocation Freshness Time : 0
URL Retrieval Timeout : 0
Ctl Identifier : (null)
Ctl Store Name : (null)
DS Mapper Usage : Disabled
Negotiate Client Certificate : Disabled
为什么这个 IP 会显示一个条目?我还在另一个网站上对同一个 IP 地址进行了额外的绑定,该网站上有同一个证书(用于将非 SSL 重定向到 SSL)。
我猜 IIS 假设如果您使用集中式存储,那么您正在使用 SNI,因此它似乎隐式地报告它需要它 - 即使它实际上并不需要。
我终于可以通过改变来解决这个问题一我对 B 组的绑定明确引用了证书,而不是仅在存储中查找。完成此操作后,条目10.0.0.2:443
当然会出现在netsh http show sslcert
列表中,并且网站在 XP 中运行良好 :-)
(我只需要为 做这个dog.com
。其他动物站点仍然设置为使用中央存储)。
答案2
你说,
我将它们托管在同一个 IIS 服务器上,每个家庭使用一个 IP 地址。
这正是这种情况SNI 的设计目的。
SNI [...] 允许服务器在同一个 IP 地址和 TCP 端口号上提供多个证书,从而允许多个安全(HTTPS)网站(或任何其他通过 TLS 的服务)由同一个 IP 地址提供服务,而无需所有这些网站都使用同一个证书。
由于这些站点共享相同的 IP 地址和端口,因此唯一区分它们的方法是通过域名。但是,如果没有 SNI 支持,服务器在决定向客户端发送哪个证书时就无法访问域名。这是因为客户端尚未发送请求,而域名实际上是 HTTP 请求的一部分。