在Windows 10/8.1/7中更新受信任的根证书列表

时间:2020-01-09 10:46:57  来源:igfitidea点击:

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

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

在本文中,请尝试找出如何在隔离的网络或者计算机/服务器上在没有直接Internet连接的情况下手动更新TrustedRootCA中的根证书列表。

注意。如果计算机通过代理服务器访问Internet,为了自动更新用户计算机上的根证书,Microsoft建议我们打开对Microsoft网站的直接访问(旁路)。但是,由于的限制,它并不总是可能或者适用。

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

如何查看Windows计算机的根证书列表?

  • 要打开运行Windows 10/8.1/7/Windows Server的计算机的根证书存储,请启动" mmc.exe"控制台。
  • 选择"文件"->"添加/删除管理单元",在管理单元列表中选择"证书"(certmgr)->"添加";
  • 选择我们要管理本地"计算机帐户"的证书;
  • 下一步->确定->确定;
  • 展开Certificates节点->TrustedRootCertification``Authorities``Store.这部分包含计算机上受信任的根证书的列表。

我们还可以使用PowerShell获取具有到期日期的受信任的根证书列表:

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

我们可以列出已过期的证书,也可以列出在接下来的30天内过期的证书:

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

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

出于安全原因,建议我们使用" Sigcheck"工具定期检查计算机的证书存储区中是否存在可疑和已撤销的证书。

我们可以使用"导出/导入"功能在Windows计算机之间手动传输根证书文件。

  • 我们可以将任何证书导出到.CER文件,方法是单击它,然后选择"所有任务"->"导出";
  • 我们可以使用选项所有任务->导入在另一台计算机上导入此证书。

Rootsupd.exe实用程序

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

  • 使用以下链接http://download.windowsupdate.com/msdownload/update/v3/static/trustedr/en/rootsupd.exe下载" rootsupd.exe"实用程序。此刻(2019年8月2日),该链接不起作用,可能是Microsoft决定将其从公众场合删除。今天,我们可以从kaspersky.com网站http://media.kaspersky.com/utilities/CorporateUtilities/rootsupd.zip下载rootsupd.exe;
  • 要安装Windows根证书,只需运行rootsupd.exe文件。但是,我们将尝试更仔细地检查其内容。使用以下命令从可执行文件中提取证书:
rootsupd.exe /c /t: C:\PS\rootsupd
  • 证书存储在SST文件中,例如authroots.sst,delroot.sst等。要删除/安装证书,可以使用以下命令:
updroots.exe authroots.sst
updroots.exe -d delroots.sst

但是,正如我们所看到的,这些证书文件创建于2013年4月4日(Windows XP正式支持终止将近一年之前)。因此,此后该实用程序尚未更新,因此无法用于安装最新证书。稍后,我们将需要updroots.exe文件。

Certutil:从Windows Update获取最新的根证书

用于管理证书的" Certutil.exe"工具的最新版本(在Windows 10中可用)允许我们从Windows Update下载并将实际的根证书列表保存到SST文件。

要生成SST文件,请在具有Windows 10且可以直接访问Internet的计算机上以管理员权限运行以下命令:

certutil.exe -generateSSTFromWU roots.sst

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

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

提示。要生成单个证书文件,请使用以下命令

certutil -syncWithWU

。可以使用GPO在Windows客户端上部署以这种方式获得的证书。

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

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

要安装文件中列出的所有证书,请使用" updroots.exe"(位于上一节中提取的rootsupd.exe文件中)。

updroots.exe roots.sst

运行" certmgr.msc"管理单元,并确保所有证书都已添加到"受信任的根证书颁发机构"。

STL格式的根证书列表

还有另一种方法可以从Microsoft网站获取根证书列表。为此,下载文件http://ctldl.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootstl.cab(每月更新两次)。使用任何存档器(甚至Windows资源管理器)解压缩authrootstl.cab。它包含一个文件authroot.stl。

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

我们可以使用STL文件的上下文菜单("安装CTL")在系统中安装此文件。

或者使用certutil.exe工具:

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

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

运行命令后,证书管理器控制台(certmgr.msc)的"受信任的根证书颁发机构"容器中将出现一个新的部分"证书信任列表"。

以相同的方式,我们可以下载并安装已从"根证书程序"中删除的已撤销(禁止)证书的列表。为此,请下载disallowedcertstl.cab(http://ctldl.windowsupdate.com/msdownload/update/v3/static/trustedr/en/disallowedcertstl.cab),将其解压缩并使用此命令添加到"不受信任的证书"部分。 :

certutil -addstore -f  disallowed disallowedcert.stl

在隔离环境中使用GPO在Windows中更新根证书

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

第一种"方式"假设我们定期手动下载一个文件,并将其具有如下所示的根证书的文件复制到隔离的网络:

certutil.exe –generateSSTFromWU roots.sst

然后,可以通过GPO中的SCCM或者PowerShell登录脚本分发此文件中的证书:

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

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

Certutil -syncWithWU -f \fr-dc01\SYSVOL\theitroad.local\rootcert\

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

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

  • 动作:更新
  • Hive:HKLM
  • 密钥路径:Software\Microsoft\SystemCertificates\AuthRoot\AutoUpdate
  • 值名称:RootDirURL
  • 类型:REG_SZ
  • 值数据:file:// \ fr-dc01\SYSVOL\theitroad.local\rootcert \

在更新策略以在certstore中检查新的根证书之后,仍然可以在计算机的OU上链接此策略。

应该禁用或者不配置"计算机配置"->"管理模板"->"系统"->" Internet通信管理"->" Internet通信"设置下的"关闭自动根证书更新"策略。

在本文中,我们研究了几种在与Internet隔离的Windows网络上更新受信任的根证书的方法。