【问题标题】:The incorrect localhost certificate is being served by IISIIS 提供了不正确的本地主机证书
【发布时间】:2012-10-03 16:26:45
【问题描述】:

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

我在我的机器上创建并安装了 (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 证书,而 not 颁发给 localhost(上面的#2)的 localhost 应该解决这个问题。因此名称不匹配,因为“DevMachine123”与“localhost”不匹配。

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

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

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

谢谢!

【问题讨论】:

    标签: iis ssl ssl-certificate


    【解决方案1】:

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

    netsh http show sslcert
    

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

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

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

    【讨论】:

    • 如果可以的话,我会给你 10 分。有些答案就是那么有帮助。我以前使用过 netsh.exe 实用程序,但从未想过要尝试这个。有效!谢谢!
    • 我不小心删除了由 Trusted Authority 颁发的 localhost 证书。我没有创建的那个......无论如何都可以触发重新创建这个证书?
    • Hal - 如果您有另一台包含相同证书的计算机,您可以从该计算机导出它,将其复制到您的计算机,然后再导入。
    • 遇到了同样的问题,这是一个解决方案!
    • 我什至无法描述在与 IIS 斗争了几个小时以摆脱虚假证书之后,您给了我多少安慰。非常感谢。
    【解决方案2】:

    与@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
    

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

    您需要在此文件中搜索您从 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 名称,您应该检查所有名称。

    可能想在这里进行 IISRESET 以确保以后不会有任何意外。

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

    祝你好运:-)

    【讨论】:

    • 感谢 digicert.com 的建议,它表明我的证书已正确发送
    • 谢谢!拯救了我/我们的一天!基于 GUI 的管理的另一个失败。这个答案很准确
    • @Trygve IIS 肯定有一些重大错误。有点难以置信。
    • 有非常相似的问题,服务器 IP 的“我的”存储中有一个证书,并且提供了错误的(旧)证书。很高兴知道该证书是如何/为什么/何时创建的!
    • 附言。从那以后,我在我的网站前切换到 Cloudflare,这使得 HTTPS 处理更加简单(和高级)。处理旧的错误 IIS 的日子已经结束(如果您的情况允许的话)。
    【解决方案3】:

    同样的症状

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-05
        • 2017-06-27
        • 1970-01-01
        • 2018-06-23
        • 1970-01-01
        • 2015-09-14
        • 1970-01-01
        • 2019-09-24
        相关资源
        最近更新 更多