我重新启动IIS7(以及Windows 2008 Server本身)并使用以下命令检查证书:
netsh http show sslcert
正如我所料,这只显示了新证书
certutil -store MY
这也只显示了新证书而不是旧证书,正如我所料
我还打开了mmc并检查了那里的证书,我只看到了新证书,而不是旧证书.
我还使用具有管理员权限的帐户.
但是 – 当我打开浏览器(从任何计算机)并转到https站点时,它仍然使用旧证书.即使我从浏览器中删除旧证书,它仍然会发送旧证书而不是新证书.
任何人都可以帮我解决我出错的地方吗?我如何驱逐旧的幻影证书?
>我试图更新证书,因为它已过期.
>我有多个域绑定到同一个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而不是我期望的域名.这就是问题.似乎这(无论出于何种原因,我不确定)优先于我刚刚为example.com更新的IIS中的绑定集.
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名称,请检查所有SAN名称.
可能希望IISRESET在这里确保以后没有意外.
最后的注意事项:如果您正在使用集中式证书存储,并且您看到不稳定的行为,甚至试图确定它是否从那里拿起您的证书,请不要担心 – 这不是您的错.它似乎有时会立即获取新文件,但缓存旧文件.在进行任何类型的更改后打开并重新启动SSL绑定似乎会重置它,但不是100%的时间.
祝好运 :-)