18

好的,我有一个 SSL 问题,我似乎无法在这台 1 Win7 x64 机器上解决。多年来,我一直在使用自签名证书,甚至之前还写过关于它们的博客,所以我有经验。但是,发生了一些我这次无法弄清楚的事情。

我在我的机器上创建并安装了 (2) 个 localhost SSL 证书。

  1. localhost(友好名称)在 IIS (7.5) 中发布和创建。它包含我的机器名称的“颁发给”和“颁发者”值:“DevMachine123”。这是为在 IIS 的“默认网站”下配置的应用程序提供的证书。
  2. localhost 使用 makecert.exe 工具创建的 SSL 证书,其中使用了 CN=localhost(通用名称)。它包含'localhost'的'Issued To'和'Issued By'值。这是我希望在 IIS 中为在“默认网站”下配置的应用程序提供的 SSL 证书。

我得到的错误是:

“本网站提供的安全证书是针对不同网站的地址签发的。”

当我查看从 IE 浏览器提供的证书时:它显示正在使用颁发给“DevMachine123”的 localhost 证书,而不是颁发给 localhost 的 localhost(上面的#2)应该可以解决这个问题。因此名称不匹配,因为“DevMachine123”与“localhost”不匹配。

还有一点要说;我的证书添加到“受信任的根证书颁发机构”,因此它们都是受信任的证书

最后一点,我在 IIS 中检查了我机器上“默认网站”的 https 端口 443 绑定配置。我查看证书,它显示绑定了正确的localhost 证书(上面的#2,CN=localhost)。

我觉得我已经在这里覆盖了我的基础(是的,我已经看到了这个这个,所以请不要重新发布)。我在这里想念什么?

谢谢!

4

4 回答 4

34

我遇到了类似的问题,并且还通过了您上面提到的站点绑定检查。我运行了以下 netsh 命令

netsh http show sslcert

这向我展示了两个 SSL 证书绑定。一个在 IP:Port 0.0.0.0:443 上具有正确的证书,另一个在 IP:Port [::]:443 上具有过期证书。我为本地计算机打开了 CertMgr.msc(有关说明,请参见此处)并搜索无效证书并发现它已过期。

为了解决这个问题,我做了以下

  1. netsh http delete sslcert ipport=[::]:443
  2. iisreset /restart
于 2012-11-26T04:31:08.877 回答
7

与@IsolatedStorage 的答案非常相似,但提供了更多帮助我的细节。

首先,对您来说可能相同的几点

  • 我试图更新证书,因为它已过期。
  • 我有多个域绑定到同一个 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

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

您需要在此文件中搜索您从中获得的 WRONG 哈希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% 的时间。

祝你好运 :-)

于 2016-04-08T08:35:28.453 回答
2

相同的症状

将下拉列表中的 HTTPS 绑定更改为服务器 IP(在站点绑定对话框中)。它被设置为“全部未分配”收到关于覆盖现有证书/IP 组合的警告,我接受了,并且问题已解决。

于 2014-05-19T13:50:42.627 回答
0

验证您在 IIS 中的每个绑定也只有一个站点集。

如果安装了默认站点和单独的站点,则它们可能都在同一端口上具有 HTTPS 绑定。如果发生这种情况,则提供的证书可能是来自其他站点的证书。

于 2018-11-05T23:47:34.100 回答