IIS正在提供不正确的localhost证书

atc*_*way 14 iis ssl ssl-certificate

好的我有一个SSL问题,我似乎无法通过这台1 Win7 x64机器.多年来我一直在使用自签名证书,甚至在我之前发表过博客,因此我有经验.然而,有些事情正在发生,这次我无法弄清楚.

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

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

我得到的错误是:

"本网站提供的安全证书是针对不同网站的地址发布的."

当我查看从IE浏览器提供的证书时:它显示正在使用发布到'DevMachine123'的localhost证书,而不是发给localhost的本地主机(上面的#2)应该解决此问题.因此名称不匹配,因为'DevMachine123'与'localhost'不匹配.

另一点要做; 我的证书被添加到"受信任的根证书颁发机构",所以他们都被信任的证书.

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

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

谢谢!

Iso*_*age 30

我有一个类似的问题,也经历了上面提到的网站绑定检查.我运行了以下netsh命令

netsh http show sslcert
Run Code Online (Sandbox Code Playgroud)

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

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

  1. netsh http delete sslcert ipport=[::]:443
  2. iisreset /restart


Sim*_*ver 6

@IsolatedStorage非常相似的答案,但有一些更详细的帮助我.

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

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

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

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

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

C:\WEBSITES\SSL> certutil -dump www.example.com.pfx
Run Code Online (Sandbox Code Playgroud)

这将显示到期日期和散列/指纹.显然,如果这个到期日期是错误的,你可能只是将错误的证书导出到文件系统,所以首先去修复它.

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

运行命令:

netsh http show sslcert > c:\temp\certlog.txt
notepad c:\temp\certlog.txt
Run Code Online (Sandbox Code Playgroud)

你可能在这里有很多东西,所以在文本编辑器中打开它会更容易.

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

对我来说,这产生了以下结果.您会看到它绑定到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
Run Code Online (Sandbox Code Playgroud)

我甚至不知道这个绑定来自哪里 - 我甚至没有在我的默认站点上有任何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
Run Code Online (Sandbox Code Playgroud)

现在我们已经验证了这是'坏'指纹,并且我们可以使用此命令删除预期的单个记录:

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

SSL Certificate successfully deleted
Run Code Online (Sandbox Code Playgroud)

希望如果您现在回到Digicert并重新运行命令,它将为您提供预期的证书指纹.如果您有任何SAN名称,请检查所有SAN名称.

可能希望IISRESET在这里确保以后没有意外.

最后的注意事项:如果你正在使用集中式证书存储,并且你看到不稳定的行为,甚至试图确定它是否从那里拿起你的证书,也不要担心 - 这不是你的错.它似乎有时会立即获取新文件,但缓存旧文件.在进行任何类型的更改后打开并重新启动SSL绑定似乎会重置它,但不是100%的时间.

祝好运 :-)