当证书具有多个指向根 CA 的多个受信任的证书路径时,证书验证失败

本文提供解决方法,解决网站在具有多个受信任的根 CA 证书路径时安全证书未颁发的问题。

适用于:Windows 7 Service Pack 1,Windows Server 2012 R2
原始 KB 编号: 2831004

症状

当用户尝试访问受保护的网站时,用户会在 Web 浏览器中收到以下警告消息:

本网站的安全证书有问题。

本网站提供的安全证书并非由受信任的证书颁发机构颁发。

用户单击继续访问此网站(不建议)后,用户可以访问受保护的网站。

原因

出现此问题的原因是网站证书在 Web 服务器上具有多个受信任的证书路径。

例如,假定你正在使用的客户端计算机信任根证书颁发机构 (CA) 证书 (2)。 并且,Web 服务器信任根 CA 证书 (1)根 CA 证书 (2)。 此外,证书在 Web 服务器上具有以下两个受信任根 CA 的证书路径:

  1. 证书路径 1:网站证书 - 中间 CA 证书 - 根 CA 证书 (1)
  2. 证书路径 2:网站证书 - 中间 CA 证书 - 跨根 CA 证书 - 根 CA 证书 (2)

当计算机在证书验证过程中找到多个受信任的证书路径时,Microsoft CryptoAPI 会通过计算每条链路的分数来选择最佳证书路径。 分数是根据证书路径可以提供的信息的质量和数量计算的。 如果多个证书路径的分数相同,则选择最短链路。

当证书路径 1 和证书路径 2 具有相同的质量分数时,CryptoAPI 将选择较短的路径(证书路径 1),并将路径发送到客户端。 但是,客户端计算机只能使用链接到根 CA 证书 (2) 的较长证书路径来验证证书。 因此,证书验证失败。

解决方法

要解决此问题,请按照以下步骤从不想使用的证书路径中删除或禁用证书:

  1. 以系统管理员身份登录 Web 服务器。

  2. 按照以下步骤将证书管理单元添加到 Microsoft 管理控制台:

    1. 单击“开始”>“运行”,键入“mmc”,然后按 Enter。
    2. “文件”菜单上,单击“添加/删除管理单元”
    3. 选择“证书”,单击“添加”,选择“计算机帐户”,然后单击“下一步”
    4. 选择“本地计算机(运行此控制台的计算机)”,然后单击“完成”
    5. 单击“确定”
  3. 在管理控制台中展开证书(本地计算机),然后找到不想使用的证书路径上的证书。

    注意

    如果证书是根 CA 证书,则它包含在受信任的根证书颁发机构中。 如果证书是中间 CA 证书,则它包含在中间证书颁发机构中。

  4. 可以通过以下方式删除或禁用证书:

    • 要删除证书,请右键单击证书,然后单击“删除”
    • 要禁用证书,请右键单击证书,单击“属性”,选择“禁用此证书的所有目的”,然后单击“确定”
  5. 如果问题仍在,请重启服务器。

此外,如果服务器禁用或未配置关闭自动根证书更新组策略设置,则在下次构建链路时,可能会启用或安装你不想使用的证书路径中的证书。 要配置该组策略设置,请遵循以下步骤:

  1. 单击“开始”>“运行”,键入“gpedit.msc”,然后按 Enter。

  2. 展开“计算机配置”>“管理模板”>“系统”>“Internet 通信管理”,然后单击“Internet 通信设置”

  3. 双击“关闭自动根证书更新”,选择“已启用”,然后单击“确定”

  4. 关闭本地组策略编辑器。

状态

此行为是设计使然。