IIS 7 仍在提供旧的 SSL 证书

IIS 7 仍在提供旧的 SSL 证书

我在 IIS7 中安装了新的 SSL 证书,删除了旧证书并设置了新证书的绑定 - 因此 https 现在仅绑定到新证书。

我重新启动了 IIS7(以及 Windows 2008 Server 本身)并使用以下命令检查了证书:

netsh http show sslcert

正如我所料,这只显示了新证书

certutil -store MY

正如我所料,这也只显示了新证书,而不是旧证书

我还打开了 mmc 并检查了那里的证书,但我只看到新的证书,而看不到旧的证书。

我也正在使用具有管理员权限的帐户。

但是 — 当我打开浏览器(从任何计算机)并访问 https 站点时,它仍在使用旧证书。即使我从浏览器中删除了旧证书,它仍会发送旧证书,而不是新证书。

有人能帮我找出问题所在吗?我该如何驱除旧的幻影证书?

答案1

首先,你可能也同意以下几点

  • 我试图更新证书,因为它已过期。
  • 我有多个域名绑定到同一个 IP。它们恰好是 SAN 证书,但这可能无关紧要。
  • 我尝试使用集中式证书存储。我再次认为这与我的大部分回答无关。
  • 我已经尝试更新证书但它没有显示新的日期。
  • 如果您的旧证书已过期,您现在可能会感到恐慌。深呼吸...

首先,我强烈建议您访问https://www.digicert.com/help/并下载他们的 DigiCert 工具。您也可以在线使用它。

输入您的网站https://example.com,它会显示到期日期和指纹(MS 称之为证书哈希)。它会进行实时查找,因此您不必担心浏览器(或中间服务器)是否正在缓存某些内容。

如果您使用集中式证书存储,您将需要 100% 确保 .pfx 文件是最新版本,因此请转到您的存储目录并运行以下命令:

C:\WEBSITES\SSL> certutil -dump www.example.com.pfx

这将向您显示到期日期和哈希/指纹。显然,如果此到期日期错误,则您可能只是将错误的证书导出到文件系统,因此请先修复该问题。

如果您正在使用 CCS,那么假设此 certutil 命令为您提供了(更新后的证书的)预计到期日期,那么您可以继续。

运行命令:

netsh http show sslcert > c:\temp\certlog.txt
notepad c:\temp\certlog.txt

您可能在这里有很多东西,因此更容易在文本编辑器中打开它。

您将需要在此文件中搜索您从中获取的错误哈希值digicert.com(或从 Chrome 获取的指纹)。

对我来说,这产生了以下结果。您会看到它绑定到 IP 而不是我预期的域名。这就是问题所在。似乎这(出于某种原因,我不确定)优先于我刚刚更新的 IIS 中的绑定集example.com

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

我甚至不知道这个绑定来自哪里 - 我的默认站点上甚至没有任何 SSL 绑定,但这个服务器已经有几年的历史了,我认为有些东西被损坏并卡住了。

因此你会想删除它。

为了安全起见,您需要先运行以下命令以确保只删除这一项:

C:\Windows\system32>netsh http show sslcert ipport=10.0.0.1:443

SSL Certificate bindings:
-------------------------

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

现在我们已经验证这是“坏”指纹,并且预期单个记录,我们可以使用以下命令将其删除:

C:\Windows\system32>netsh http delete sslcert ipport=10.0.0.1:443

SSL Certificate successfully deleted

希望您现在返回 Digicert 并重新运行该命令,它将为您提供预期的证书指纹。您应该检查所有 SAN 名称(如果有),以确保万无一失。

可能需要在此处执行 IISRESET 以确保以后不会出现意外。

最后说明:如果您使用的是集中式证书存储,并且您发现行为不稳定,甚至无法确定它是否从那里获取了您的证书,请不要担心 - 这不是您的错。它似乎有时会立即获取新文件,但会缓存旧文件。在进行任何类型的更改后打开并重新保存 SSL 绑定似乎会重置它,但并非 100% 如此。

祝你好运 :-)

答案2

检查 IIS 中绑定到站点的证书。您可以右键单击站点并选择编辑绑定。在那里,您应该看到与 SSL 证书关联的端口 443 的绑定。它可能仍指向旧证书。

答案3

我遇到了同样的问题,也检查了绑定。我在 IIS 中安装了 2 个应用程序,一个使用新证书,一个使用旧证书。

为了解决这个问题,我必须从服务器上完全删除证书(然后可能需要重新启动)。

从 IIS 管理器 -> (IIS 树根)-> 服务器证书图标中,选择旧证书并单击操作窗格中的删除。

答案4

我在 IPv6 升级期间遇到了这种情况。我让 IIS 提供重定向,以防有人试图通过 HTTP 访问实际上不是基于 Web 服务器的服务。我将实际服务(语音服务器)更新为 IPv6,但我未能更新重定向的绑定以包含 IPv6 地址。

这导致解决方案失败,转向了全球范围的、证书过期的捕获所有网站。由于捕获所有网站都显示 404,因此该网站似乎无法正常工作,而实际上它访问的是错误的网站。

相关内容