当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 更新 Windows 中受信任的根证书列表

作者:精品下载站 日期:2024-12-14 23:16:24 浏览:14 分类:玩电脑

更新 Windows 中受信任的根证书列表


所有 Windows 版本都具有自动从 Microsoft 网站更新根证书的内置功能。 MSFT 作为Microsoft 可信根证书计划的一部分,在其在线存储库中维护并发布客户端和 Windows 设备的可信证书列表。如果其证书链中经过验证的证书是指参与该计划的根CA,系统将自动从Windows Update 服务器下载该根证书并将其添加到受信任的证书中。

Windows 每周更新一次受信任的根证书列表 (CTL)。如果 Windows 无法直接访问 Windows Update,系统将无法更新根证书。因此,用户在浏览网站(SSL 证书由不受信任的 CA 签名 - 请参阅有关“Chrome SSL 错误:此网站无法提供安全连接”的文章)或安装/运行签名的脚本和应用程序时可能会遇到一些问题。

在本文中,我们将尝试了解如何在断开(隔离)网络或无法直接访问 Internet 的计算机/服务器中手动更新 TrustedRootCA 中的根证书列表。

注意。 如果您的计算机通过代理服务器访问 Internet,Microsoft 建议您打开对 Microsoft 网站的直接访问(绕过)以自动续订根证书。然而,由于公司的限制,这并不总是可能或适用。

在 Windows 10 和 11 中管理受信任的根证书

如何查看 Windows 计算机上受信任的根证书列表?

  1. 要打开运行 Windows 11/10/8.1/7 或 Windows Server 2022/2019/2016 的计算机的根证书存储,请运行 mmc.exe 控制台;

  2. 选择文件->添加/删除管理单元,在管理单元列表中选择证书(certmgr)->添加

  3. 选择您要管理本地计算机帐户的证书;

    [玩转系统] 更新 Windows 中受信任的根证书列表

  4. 下一步->确定->确定;

  5. 展开证书节点 -> 受信任证书权威存储。此部分包含您计算机上受信任的根证书的列表。

在 mmc 控制台中,您可以查看有关任何证书的信息或将其从受信任的证书中删除。

您还可以使用 PowerShell 获取受信任的根证书及其过期日期的列表:

Get-Childitem cert:\LocalMachine\root |format-list

您可以列出过期的证书或在接下来的 60 天内过期的证书:

Get-ChildItem cert:\LocalMachine\root|Where {$_.NotAfter -lt  (Get-Date).AddDays(60)}|select NotAfter, Subject

[玩转系统] 更新 Windows 中受信任的根证书列表

出于安全原因,建议您使用 Sigcheck 工具定期检查计算机上的证书信任存储是否存在可疑和已吊销的证书。此工具允许您将计算机上安装的证书列表与 Microsoft 网站上的根证书列表进行比较(您可以下载包含最新证书的脱机文件 authrootstl.cab)。

您可以使用导出/导入选项在 Windows 计算机之间手动传输根证书文件。

  1. 您可以通过单击任何证书并选择“所有任务”->“导出”,将任何证书导出到 .CER 文件;

    [玩转系统] 更新 Windows 中受信任的根证书列表

  2. 您可以使用“所有任务”->“导入”选项将该证书导入到另一台计算机上。

    [玩转系统] 更新 Windows 中受信任的根证书列表

如何在 Windows 中禁用/启用自动根证书更新?

正如我们提到的,Windows 会自动更新根证书。您可以通过 GPO 或注册表在 Windows 中启用或禁用证书续订。

打开本地组策略编辑器 (gpedit.msc) 并转到计算机配置 -> 管理模板 -> 系统 -> Internet 通信管理 -> Internet 通信。

本部分中的关闭自动根证书更新选项允许您禁用通过 Windows Update 站点自动更新根证书。默认情况下,未配置此策略,Windows 始终尝试自动续订根证书。

[玩转系统] 更新 Windows 中受信任的根证书列表

如果未配置此 GPO 选项并且根证书未自动续订,请检查是否在注册表中手动启用了此设置。使用 PowerShell 检查注册表参数的值:

Get-ItemProperty -Path 'HKLM:\Software\Policies\Microsoft\SystemCertificates\AuthRoot' -Name DisableRootAutoUpdate

[玩转系统] 更新 Windows 中受信任的根证书列表

如果该命令返回 DisableRootAutoUpdate 注册表参数的值为 1,则表明您的计算机上已禁用根证书更新。要启用它,请将参数值更改为 0。

Certutil:从 Windows 更新下载受信任的根证书

Certutil.exe CLI 工具可用于管理证书(在 Windows 10 中引入,对于 Windows 7 可作为单独的更新提供)。它可用于从 Windows 更新下载最新的根证书列表并将其保存到 SST 文件。

要在运行 Windows 10 或 11 并可以直接访问 Internet 的计算机上生成 SST 文件,请打开提升的命令提示符并运行以下命令:

certutil.exe -generateSSTFromWU C:\PS\roots.sst
Updated SST file.
CertUtil: -generateSSTFromWU command completed successfully.

[玩转系统] 更新 Windows 中受信任的根证书列表

因此,包含最新根证书列表的 SST 文件将出现在目标目录中。双击将其打开。该文件是包含受信任根证书的容器。

[玩转系统] 更新 Windows 中受信任的根证书列表

如您所见,将打开一个熟悉的证书管理管理单元,您可以从中导出您获得的任何证书。就我而言,证书列表中有 358 项。显然,将证书一一导出并安装是不合理的。

提示。这

certutil -syncWithWU

命令可用于生成单独的证书文件。通过这种方式获得的证书可以使用GPO部署到Windows设备上。

您可以使用 PowerShell 脚本安装 SST 文件中的所有证书,并将它们添加到计算机上的受信任根证书列表中:

$sstStore = ( Get-ChildItem -Path C:\ps\rootsupd\roots.sst )
$sstStore | Import-Certificate -CertStoreLocation Cert:\LocalMachine\Root

运行 certmgr.msc 管理单元并确保所有证书均已添加到受信任的根证书颁发机构。在我的 Windows 11 示例中,根证书的数量从 34 个增加到 438 个。

[玩转系统] 更新 Windows 中受信任的根证书列表

安装后 Windows 的干净副本仅在根存储中包含少量证书。如果计算机连接到 Internet,并且您的设备访问其信任链中具有 Microsoft CTL 指纹的 HTTPS 站点或 SSL 证书,则将自动(按需)安装其余根证书。因此,通常不需要立即将 Microsoft 信任的所有证书添加到本地证书存储中。

Windows 中的证书信任列表 (STL)

证书信任列表 (CTL) 只是由受信任方(在本例中为 Microsoft)签名的数据列表(例如证书哈希)。 Windows 客户端定期从 Windows Update 下载此 CTL,其中存储所有受信任根 CA 的哈希值。应该理解的是,此 CTL 不包含证书本身,仅包含它们的哈希值和属性(例如,友好名称)。 Windows 设备可以按需从证书信任列表下载受信任的证书。

您可以手动下载并安装 CTL 文件。为此,请下载文件http://ctldl.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootstl.cab(每月更新两次)。使用任何归档程序(甚至 Windows 资源管理器),解压 authrootstl.cab 归档文件的内容。它包含一个 authroot.stl 文件。

[玩转系统] 更新 Windows 中受信任的根证书列表

Authroot.stl 文件是一个容器,其中包含证书信任列表格式的受信任证书指纹列表。

[玩转系统] 更新 Windows 中受信任的根证书列表

您可以使用 certutil 命令将此 CTL 文件安装到受信任的根证书颁发机构:

certutil -enterprise -f -v -AddStore "Root" "C:\PS\authroot.stl"

[玩转系统] 更新 Windows 中受信任的根证书列表

root "Trusted Root Certification Authorities"
CTL 0 added to store.
CertUtil: -addstore command completed successfully.

您还可以使用证书管理控制台导入证书(信任根 证书颁发机构 -> 证书 -> 所有任务 -> 导入)。指定带有证书指纹的 STL 文件的路径。

[玩转系统] 更新 Windows 中受信任的根证书列表

运行命令后,证书管理器控制台的受信任的根证书颁发机构容器中会出现一个新部分“证书信任列表”(

certmgr.msc

)。

[玩转系统] 更新 Windows 中受信任的根证书列表

以同样的方式,您可以下载并安装已从根证书计划中删除的已撤销(不允许)证书的列表。为此,请下载 disallowedcertstl.cab 文件 (http://ctldl.windowsupdate.com/msdownload/update/v3/static/trustedr/en/disallowedcertstl.cab),将其解压,然后使用以下命令将其添加到不受信任的证书存储中:

certutil -enterprise -f -v -AddStore disallowed "C:\PS\disallowedcert.stl"

在隔离环境中通过 GPO 更新受信任的根证书

如果您的任务是定期更新与 Internet 隔离的 Active Directory 域中的根证书,则可以使用稍微复杂的方案来使用组策略更新加入域的计算机上的本地证书存储。您可以通过多种方式在断开连接的 Windows 网络中的用户计算机上配置根证书更新。

第一种方法假设您定期手动下载带有根证书的文件并将其复制到隔离网络。您可以下载包含当前 Microsoft 根证书的文件,如下所示:

certutil.exe -generateSSTFromWU roots.sst

然后可以通过 GPO 中的 SCCM 或 PowerShell 启动脚本部署此文件中的根证书:

$sstStore = (Get-ChildItem -Path \fr-dc01\SYSVOL\a-d.site\rootcert\roots.sst )
$sstStore | Import-Certificate -CertStoreLocation Cert:\LocalMachine\Root

第二种方法是使用以下命令下载实际的 Microsoft 根证书:

Certutil -syncWithWU -f \fr-dc01\SYSVOL\a-d.site\rootcert\

指定的共享网络文件夹中将出现多个根证书文件(CRT 文件格式)(包括文件 authrootstl.cab、disallowedcertstl.cab、disallowedcert.sst、thumbprint.crt)。

[玩转系统] 更新 Windows 中受信任的根证书列表

然后使用组策略首选项更改 HKLM\Software\Microsoft\SystemCertificates\AuthRoot\AutoUpdate 下注册表参数 RootDirURL 的值。此参数应指向 Windows 计算机将从中接收新根证书的共享网络文件夹。运行域 GPMC.msc 控制台,创建新的 GPO,切换到编辑策略模式,展开计算机配置 -> 首选项 -> Windows 设置 -> 注册表部分。使用以下设置创建新的注册表属性:

  • 操作:更新

  • 蜂巢:HKLM

  • 关键路径:Software\Microsoft\SystemCertificates\AuthRoot\AutoUpdate

  • 值名称:RootDirURL

  • 类型:REG_SZ

  • 数值数据:file://\fr-dc01\SYSVOL\a-d.site原始证书\

[玩转系统] 更新 Windows 中受信任的根证书列表

仍然需要将此策略链接到计算机的 OU 上,并在更新客户端上的 GPO 设置后,检查证书库中是否有新的根证书。

应禁用或不配置计算机配置 -> 管理模板 -> 系统 -> Internet 通信管理 -> Internet 通信设置下的 GPO 参数关闭自动根证书更新

如何在 Windows 7 中更新受信任的根证书?

尽管 Windows 7 现在已处于支持结束阶段,但许多用户和公司仍在使用它。

安装干净的 Windows 7 映像后,您可能会发现许多现代程序和工具无法在其上运行,因为它们是使用新证书签名的。特别是,有人抱怨在不更新根证书的情况下无法在 Windows 7 SP1 x64 上安装 .Net Framework 4.8 或 Microsoft Visual Studio (vs_Community.exe)。

The installer manifest failed signature validation.

或者

NET Framework has not been installed because a certificate chain could not be built to a trusted root authority.

[玩转系统] 更新 Windows 中受信任的根证书列表

要更新 Windows 7 中的根证书,必须首先下载并安装 MSU 更新 KB2813430 (https://support.microsoft.com/en-us/topic/an-update-is-available-that-enables-administrators-to-update-trusted-and-disallowed-ctls-in-disconnected-environments-in-windows-0c51c702-fdcc-f6be-7089-4 585fad729d6)

之后,您可以使用 certutil 生成带有根证书的 SST 文件(在当前或另一台计算机上):

certutil.exe -generateSSTFromWU c:\ps\roots.sst

现在您可以将证书导入到受信任的证书中:

运行MMC -> 添加管理单元 -> 证书 -> 计算机帐户> 本地计算机。右键单击受信任的根证书颁发机构,所有任务 -> 导入,找到您的 SST 文件(在文件类型中选择 Microsoft 序列化证书存储 - *.sst) -> 打开 -> 将所有证书放入以下存储 -> 受信任的根证书颁发机构。

使用 Rootsupd.exe 工具更新 Windows XP 上的根证书

在 Windows XP 中,rootsupd.exe 实用程序用于更新计算机的根证书。其中的根证书和吊销证书列表会定期更新。该工具作为单独的更新KB931125(根证书更新)进行分发。让我们看看现在是否可以使用它。

  1. 使用以下链接下载 rootsupd.exe 实用程序 http://download.windowsupdate.com/msdownload/update/v3/static/trustedr/en/rootsupd.exe。目前(2021 年 1 月)该链接不起作用,微软决定将其从公众中删除。今天,您可以从卡巴斯基网站下载rootsupd.exe - http://media.kaspersky.com/utilities/CorporateUtilities/rootsupd.zip;

  2. 要安装 Windows 根证书,只需运行 rootsupd.exe 文件。但我们会尝试更仔细地检查其内容。使用以下命令从可执行文件中提取证书:

    rootsupd.exe /c /t: C:\PS\rootsupd

    [玩转系统] 更新 Windows 中受信任的根证书列表

  3. 证书存储在 SST 文件中,例如 authroots.sst、delroot.sst 等。要删除或安装证书,可以使用以下命令:

    updroots.exe authroots.sst
    updroots.exe -d delroots.sst

但是,如您所见,这些证书文件是在 2013 年 4 月 4 日创建的(几乎是 Windows XP 官方支持结束前一年)。因此,此后该工具尚未更新,无法用于安装最新证书。

但是您可以在 Windows 10/11 中使用 cerutil 工具下载 root.sst,在 Windows XP 中复制该文件并使用 updroots.exe 安装证书:

updroots.exe c:\temp\roots.sst

有信息表明,不建议在 Windows 10 1803+ 和 Windows 11 的现代版本中使用 updroots.exe 工具,因为它可能会破坏设备上的 Microsoft 根 CA。

在本文中,我们研究了在与 Internet 隔离(断开连接的环境)的 Windows 网络计算机上更新受信任根证书的几种方法。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯