无法在 Windows Server 2012 上禁用 SNI

无法在 Windows Server 2012 上禁用 SNI

我有两个不同的相关站点“系列”,每个站点在同一台服务器上都有自己的 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 请求的一部分。

相关内容