使用 GPO 分发的有效根 CA 证书可能会间歇性地显示为不受信任

本文提供了一种解决方法,用于解决使用 GPO 分发的有效根 CA 证书显示为不受信任的问题。

原始 KB 编号: 4560600

现象

重要

不受信任的根证书颁发机构(CA)证书问题可能是由许多 PKI 配置问题引起的。 本文仅说明不受信任的根 CA 证书的可能原因之一。

使用证书和公钥基础结构(PKI)的各种应用程序可能会遇到间歇性问题,例如连接错误,每天/周出现一次或两次。 由于最终实体证书验证失败,因此会出现这些问题。 受影响的应用程序可能会返回不同的连接错误,但它们都会出现不受信任的根证书错误。 下面是此类错误的示例:

Hex Decimal 符号 文本版本
0x800b0109 -2146762487 (CERT_E_UNTRUSTEDROOT) 已处理的证书链,但在根证书中终止

使用 CryptoAPI 系统体系结构 的任何已启用 PKI 的应用程序都可能会因间歇性连接丢失或 PKI/证书相关功能故障而受到影响。 截至 2020 年 4 月,已知受此问题影响的应用程序列表包括但不限于:

  • Citrix
  • 远程桌面服务 (RDS)
  • Skype
  • Web 浏览器

管理员可以通过检查 CAPI2 日志来识别和排查不受信任的根 CA 证书问题。

专注于 CAPI2 日志中包含以下签名的生成链/验证链策略错误的故障排除工作。 例如:

错误 <DateTime> CAPI2 11 生成链
错误 <DateTime> CAPI2 30 验证链策略

结果已处理证书链,但在不受信任提供程序信任的根证书中终止。
[value] 800b0109

原因

如果使用以下组策略(GP)分发根 CA 证书,则可能会出现不受信任的根 CA 证书问题:

计算机配置>Windows 设置>安全设置>公钥策略>受信任的根证书颁发机构

根本原因详细信息

使用 GPO 分发根 CA 证书时,将删除并再次写入其内容 HKLM\SOFTWARE\Policies\Microsoft\SystemCertificates\Root\Certificates 。 此删除是按设计进行的,因为 GP 如何应用注册表更改。

为根 CA 证书保留的 Windows 注册表区域中的更改将通知 客户端应用程序的 Crypto API 组件 。 应用程序将开始与注册表更改同步。 同步是应用程序保持最新状态的方式,并了解最新的有效根 CA 证书列表。

在某些情况下,组策略处理需要更长的时间。 例如,许多根 CA 证书通过 GPO 分发(类似于许多 防火墙Applocker 策略)。 在这些情况下,应用程序可能不会收到受信任的根 CA 证书的完整列表。

因此,链接到缺少根 CA 证书的结束实体证书将呈现为不受信任。 各种与证书相关的问题将开始出现。 此问题是间歇性的,可以通过重新启用 GPO 处理或重新启动来暂时解决。

如果使用替代方法发布根 CA 证书,则由于上述情况,可能会出现问题。

解决方法

Microsoft知道此问题,并且正在努力改进将来版本的 Windows 中的证书和加密 API 体验。

若要解决此问题,请避免使用 GPO 分发根 CA 证书。 它可能包括针对注册表位置(例如 HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\SystemCertificates\Root\Certificates)将根 CA 证书传送到客户端。

将根 CA 证书存储在不同的物理、根 CA 证书存储中时,应解决问题。

发布根 CA 证书的替代方法示例

方法 1: 使用命令行工具和 certutil 根存储在文件中 的 CA 证书rootca.cer

certutil -addstore root c:\tmp\rootca.cer

注意

此命令只能由本地管理员执行,并且仅影响单台计算机。

方法 2:启动 certlm.msc(本地计算机的证书管理控制台),并在注册表物理存储中导入根 CA 证书。

选择注册表下的证书管理控制台证书的屏幕截图。

注意

certlm.msc 控制台只能由本地管理员启动。 此外,导入将仅影响单台计算机。

方法 3:使用 GPO 首选项发布根 CA 证书,如组策略首选项中所述

若要发布根 CA 证书,请执行以下步骤:

  1. 使用 certutil -addstore root c:\tmp\rootca.cer 命令手动导入计算机上的根证书(请参阅方法 1)。

  2. 在导入根证书的计算机上打开 GPMC.msc。

  3. 编辑想要使用以下方式部署注册表设置的 GPO:

    1. 编辑根证书的计算机 配置 > 组策略首选项 > Windows 设置 > 注册表 > 路径。
    2. 将根证书添加到 GPO,如以下屏幕截图所示。
  4. 将新的 GPO 部署到需要发布根证书的计算机。

    “组策略管理编辑器”窗口的屏幕截图,其中选择了根证书。

将根 CA 证书写入位置 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates\ROOT\Certificates 来分发根 CA 证书的任何其他方法、工具或客户端管理解决方案都将正常工作。

参考