IIS 中央证书存储和 SNI

IIS 中央证书存储和 SNI

我正在尝试让 Windows Server 2012 R2 上的 IIS 8.5 实际使用中央证书存储,但我无法弄清楚。

我有两个使用共享配置和 NLB 设置的 IIS 实例,它们将充当前端反向代理(这有效)。但我想为它们添加 SSL 终止,这是我遇到的问题。

我已经设置了中央证书存储。我尝试了域的通配符和特定证书。我尝试了添加证书的显式绑定。我尝试编辑 applicathost.config 中的绑定以使其不包含特定域(来自谷歌搜索)。

如果没有默认 SSL 站点,IIS 会发送连接 RST(通过 wireshark 检查)。有了默认 SSL 站点,IIS 会使用该证书重新签署所有内容,它不会理会 SNI 部分,也不会查看中央证书存储。

有没有办法调试 IIS 以了解它正在做出哪些决定?我看到证书已加载到中央证书存储中,但它们从未被使用过。

以下是结果netsh http show sslcert

IP:port                      : 0.0.0.0:443
Certificate Hash             : 223ee4d18cd634a3227a492de0f50665120a3554
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:port                      : 0.0.0.0:8172
Certificate Hash             : 223ee4d18cd634a3227a492de0f50665120a3554
Application ID               : {00000000-0000-0000-0000-000000000000}
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

Central Certificate Store    : 443
Certificate Hash             : (null)
Application ID               : {4dc3e181-e14b-4a21-b022-59fc669b0914}
Certificate Store Name       : (null)
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

令人困惑的是,第一个绑定有一个主机名,但其他主机使用该证书进行签名,这永远不会起作用,因为 CN/FQDN 总是错误的,所以我不知道为什么 IIS 会这样做。

答案1

如果我浏览这个博客这里,其中详细说明了 HTTP.sys 如何进行决策。具体来说,“CCS 的工作原理”部分描述了 IP:Port 绑定优先。

因此,要解决为什么即使绑定有主机名也会显示管理证书的问题:这是因为您的默认绑定未使用 SNI。当不使用 SNI 时,将通过 TCP/IP 层的 IP 和端口来决定选择要发送给客户端的证书。如果握手成功,则应读取 HTTP 主机标头以确定请求属于哪个网站绑定。

该博客还指出 CCS 基于文件名工作。例如:主机名生成类似 hostname.pfx 的文件名。话虽如此,我建议删除默认绑定并运行进程监视器。这将让您了解 HTTP.sys 是否正在探测特定文件名的 CCS 存储位置。如果是这样,您可以相应地重命名 pfx 文件,如果是权限问题,请调整权限,或者更正为 pfx 文件指定的任何密码或访问存储位置本身。

相关内容