在 Windows 中配置受信任的根和不允许的证书

适用于:Windows Server(所有受支持的版本)、Windows 客户端、Azure Stack HCI。

将 Microsoft 自动更新 URL 重定向到托管证书信任列表 (CTL)、不受信任的 CTL 或在断开连接的环境中受信任的 CTL 文件子集的文件或 Web 服务器。

若要详细了解 Microsoft 根证书计划如何在 Windows 操作系统之间自动分发受信任的根证书,请参阅证书和信任

提示

对于计算机能够直接连接到 Windows 更新站点的环境,不需要重定向 Microsoft 自动更新 URL。 可以连接到 Windows 更新站点的计算机能够每天接收更新的 CTL。

先决条件

在将断开连接的环境配置为使用托管在文件或 Web 服务器上的 CTL 文件之前,需要完成以下先决条件。

客户端先决条件

  • 至少要有一台计算机能够连接到 Internet,以便从 Microsoft 下载 CTL。 该计算机需要能够进行 HTTP(TCP 端口 80)访问和名称解析(TCP 和 UDP 端口 53),以联系 ctldl.windowsupdate.com。 此计算机可以是域成员或工作组的成员。 当前,存储所有下载的文件需要大约 1.5 MB 的空间。
  • 客户端计算机必须连接到 Active Directory 域服务域。
  • 必须是本地管理员组的成员。

服务器先决条件

  • 用于托管 CTL 文件的文件服务器或 Web 服务器。
  • 用于将配置设置部署到客户端的 AD 组策略或 MDM 解决方案。
  • 属于 Domain Admins 组或者被委派了必要权限的帐户

配置方法

管理员可以配置一个文件服务器或 Web 服务器,以使用自动更新机制下载以下文件:

  • authrootstl.cab 包含非 Microsoft CTL。

  • disallowedcertstl.cab 包含带有不受信任证书的 CTL。

  • disallowedcert.sst 包含系列化证书存储,该存储中包含不受信任的证书。

  • <thumbprint>.crt 包含非 Microsoft 根证书。

本文档的配置文件服务器或 Web 服务器用于下载 CTL 文件部分中介绍了执行此配置的步骤。

有几种方法可以将环境配置为使用本地 CTL 文件或受信任 CTL 的子集。 可采用以下方法。

  • 将 Active Directory 域服务 (AD DS) 域成员计算机配置为针对受信任和不受信任 CTL 使用自动更新机制,而无需访问 Windows 更新站点。 本文档的重定向 Microsoft 自动更新 URL 部分介绍了此配置。

  • 将 AD DS 域成员计算机配置为独立选择自动更新不受信任和受信任 CTL。 本文档的仅针对不受信任的 CTL 重定向 Microsoft 自动更新 URL 部分介绍了独立的选择加入配置。

  • 在 Windows 根证书程序中检查根证书集。 通过检查根证书,管理员便可以使用组策略对象 (GPO) 来选择要分发的证书子集。 本文档的使用受信任 CTL 的子集部分介绍了此配置。

重要

  • 可以使用 GPO 实施本文档所述设置。 如果取消链接 GPO 或者将它从 AD DS 域中删除,不会自动删除这些设置。 实施后,只能通过使用 GPO 或者修改受影响计算机的注册表来更改这些设置。

  • 本文档中所述的概念与 Windows Server Update Services (WSUS) 无关。

配置文件服务器或 Web 服务器用于下载 CTL 文件

为了便于对连接断开环境分发受信任或不受信任的证书,必须先配置一个文件服务器或 Web 服务器,以便通过自动更新机制下载 CTL 文件。

从 Windows 更新检索 CTL 文件

  1. 在可以使用自动更新机制进行同步,并且可供存储 CTL 文件的文件服务器或 Web 服务器上创建一个共享文件夹。

    提示

    在开始之前,可能必须调整该共享文件夹的权限和 NTFS 文件夹的权限以允许访问相应的帐户,尤其是当你要通过服务帐户使用计划任务时,需要完成这项调整。 有关调整权限的详细信息,请参阅 管理共享文件夹的权限

  2. 在权限提升的 PowerShell 提示符下,运行以下命令:

    Certutil -syncWithWU \\<server>\<share>
    

    将实际服务器名称替换为 <server>,将共享文件夹名称替换为 <share>。例如,对于名为 Server1 且共享文件夹名为 CTL 的服务器,你将运行以下命令:

    Certutil -syncWithWU \\Server1\CTL
    
  3. 将 CTL 文件下载到断开连接环境中的计算机可以使用 FILE 路径(例如 FILE://\\Server1\CTL)或 HTTP 路径(例如 http://Server1/CTL)通过网络访问的服务器上。

注意

  • 如果连接断开环境中的计算机无法访问同步 CTL 的服务器,则你必须提供另一种方法来传输信息。 例如,你可以允许一个域成员连接到该服务器,然后在该域成员计算机上计划另一个任务,以便将信息提取到内部 Web 服务器上的共享文件夹中。 如果肯定无法建立网络连接,则你可能需要使用手动过程(例如,可移动存储设备)来传输文件。

  • 如果你打算使用 Web 服务器,则应为 CTL 文件创建新的虚拟目录。 在本文档中所述的全部受支持操作系统上,使用 Internet 信息服务 (IIS) 创建虚拟目录的步骤都大致相同。 有关详细信息,请参阅 创建虚拟目录 (IIS7)

  • Windows 中的某些系统文件夹和应用程序文件夹已应用了特殊保护。 例如,inetpub 文件夹需要特殊的访问权限,因此,难以创建一个共享文件夹用于配合计划任务传输文件。 管理员可以在逻辑驱动器系统的根目录中创建一个文件夹位置用于文件传输。

重定向 Microsoft 自动更新 URL

网络中的计算机可能在断开连接的环境中配置,因此无法使用自动更新机制或下载 CTL。 可以在 AD DS 中实现 GPO 来配置这些计算机,以便从备用位置获取 CTL 更新。

完成本部分中的配置要求你已事先完成配置文件服务器或 Web 服务器用于下载 CTL 文件中的步骤。

为 GPO 配置自定义管理模板的步骤

  1. 在域控制器上创建新的管理模板。 在记事本中打开文本文件,然后将文件扩展名更改为 .adm。 该文件的内容应如下所示:

    CLASS MACHINE
    CATEGORY !!SystemCertificates
        KEYNAME "Software\Microsoft\SystemCertificates\AuthRoot\AutoUpdate"
        POLICY !!RootDirURL
           EXPLAIN !!RootDirURL_help
           PART !!RootDirURL EDITTEXT
                 VALUENAME "RootDirURL"
           END PART
        END POLICY
    END CATEGORY
    [strings]
    RootDirURL="URL address to be used instead of default ctldl.windowsupdate.com"
    RootDirURL_help="Enter a FILE or HTTP URL to use as the download location of the CTL files."
    SystemCertificates="Windows AutoUpdate Settings"
    
  2. 使用描述性的名称保存该文件,例如 RootDirURL.adm

    • 确保文件扩展名为 .adm 而不是 .txt

    • 如果尚未启用文件扩展名查看,请参阅如何:查看文件扩展名

    • 如果将该文件保存到 %windir%\inf 文件夹,则在执行后续步骤时可以更方便地找到该文件。

  3. 打开组策略管理编辑器。 选择“开始”>“运行”,键入 GPMC.msc,然后按 Enter。

    警告

    可以将新的 GPO 链接到域或链接到任何组织单位 (OU)。 本文档中实施的 GPO 修改将会改动受影响计算机的注册表设置。 你无法通过删除或取消链接该 GPO 来撤消这些设置。 而只能通过在 GPO 中还原这些设置或者使用其他方法修改注册表,来撤消这些设置。

  4. 依次展开“林”对象、“域”对象,以及包含你要更改的计算机帐户的特定域。 如果你要修改某个特定的 OU,请导航到该位置。

  5. 右键单击然后选择“在这个域中创建 GPO 并在此处链接”以创建一个新的 GPO。

  6. 在导航窗格中的“计算机配置”下展开“策略”

  7. 右键单击“管理模板”,然后选择“添加/删除模板”。

  8. 在“添加/删除模板”中选择“添加”。

  9. 在“策略模板”对话框中,选择你前面保存的 .adm 模板。 选择“打开”,然后选择“关闭”。

  10. 在导航窗格中,依次展开“管理模板”和“经典管理模板(ADM)”

  11. 选择“Windows AutoUpdate Settings” ,然后在详细信息窗格中,双击“URL address to be used instead of default ctldl.windowsupdate.com”。

  12. 选择“启用”。 在“选项”部分中,输入包含 CTL 文件的文件服务器或 Web 服务器的 URL。 例如,http://server1/CTLfile://\\server1\CTL

  13. 选择“确定”。

  14. 关闭“组策略管理编辑器”。

该策略将立即生效,但客户端计算机只有在重新启动后才能接收新设置,或者,你也可以从提升的命令提示符或从 Windows PowerShell 键入 gpupdate /force

重要

可以每日更新受信任和不受信任的 CTL,为此,请确保使用计划任务或其他方法(例如,用于处理错误状态的脚本)来保持文件同步,以更新共享文件夹或 Web 虚拟目录。 有关使用 PowerShell 创建计划任务的详细信息,请参阅 New-ScheduledTask。 如果你计划编写每天都会更新的脚本,请参阅 certutil Windows 命令参考。

仅针对不受信任的 CTL 重定向 Microsoft 自动更新 URL

某些组织可能只想要自动更新不受信任的 CTL(而不是受信任的 CTL)。 若要仅自动更新不受信任的 CTL,请创建两个要添加到组策略的 .adm 模板。

在连接断开的环境中,可以将以下过程与前面的过程结合使用(针对受信任的 CTL 和不受信任的 CTL 重定向 Microsoft 自动更新 URL)。 此过程介绍了如何有选择性地禁用受信任 CTL 的自动更新。

也可以独立地在连接断开环境中使用此过程,以便有选择性地禁用受信任 CTL 的自动更新。

有选择性地仅重定向不受信任 CTL 的步骤

  1. 在域控制器上,先从一个文本文件开始创建第一个新的管理模板,然后将文件扩展名更改为 .adm。 该文件的内容应如下所示:

    CLASS MACHINE
    CATEGORY !!SystemCertificates
        KEYNAME "Software\Policies\Microsoft\SystemCertificates\AuthRoot"
        POLICY !!DisableRootAutoUpdate
           EXPLAIN !!Certificates_config
           VALUENAME "DisableRootAutoUpdate"
           VALUEON NUMERIC 0
              VALUEOFF NUMERIC 1
    
        END POLICY
    END CATEGORY
    [strings]
    DisableRootAutoUpdate="Auto Root Update"
    Certificates_config="By default automatic updating of the trusted CTL is enabled. To disable the automatic updating trusted CTLe, select Disabled."
    SystemCertificates="Windows AutoUpdate Settings"
    
  2. 使用描述性的名称保存该文件,例如 DisableAllowedCTLUpdate.adm

  3. 创建另一个新管理模板。 该文件的内容应如下所示:

    CLASS MACHINE
    CATEGORY !!SystemCertificates
        KEYNAME "Software\Policies\Microsoft\SystemCertificates\AuthRoot"
        POLICY !!EnableDisallowedCertAutoUpdate
           EXPLAIN !!Certificates_config
           VALUENAME "EnableDisallowedCertAutoUpdate"
           VALUEON NUMERIC 1
              VALUEOFF NUMERIC 0
    
        END POLICY
    END CATEGORY
    [strings]
    EnableDisallowedCertAutoUpdate="Untrusted CTL Automatic Update"
    Certificates_config="By default untrusted CTL automatic update is enabled. To disable trusted CTL update, select Disabled."
    SystemCertificates="Windows AutoUpdate Settings"
    
  4. 使用描述性的名称保存该文件,例如 EnableUntrustedCTLUpdate.adm

    • 确保这些文件的文件扩展名为 .adm 而不是 .txt

    • 如果将该文件保存到 %windir%\inf 文件夹,则在执行后续步骤时可以更方便地找到该文件。

  5. 打开组策略管理编辑器。

  6. 依次展开“林”对象、“域”对象,以及包含你要更改的计算机帐户的特定域。 如果你要修改某个特定的 OU,请导航到该位置。

  7. 在导航窗格中的“计算机配置”下展开“策略”

  8. 右键单击“管理模板”,然后选择“添加/删除模板”。

  9. 在“添加/删除模板”中选择“添加”。

  10. 在“策略模板”对话框中,选择你前面保存的 .adm 模板。 选择“打开”,然后选择“关闭”。

  11. 在导航窗格中,依次展开“管理模板”和“经典管理模板(ADM)”。

  12. 选择“Windows AutoUpdate Settings”,然后在详细信息窗格中,双击“自动根更新”。

  13. 选择“禁用”,然后选择“确定”。

  14. 在详细信息窗格中,双击“不受信任的 CTL 自动更新”,然后选择“已启用”和“确定”。

该策略将立即生效,但客户端计算机只有在重新启动后才能接收新设置,或者,你也可以从提升的命令提示符或从 Windows PowerShell 键入 gpupdate /force

重要

可以每日更新受信任和不受信任的 CTL,为此,请确保使用计划任务或其他方法来保持文件同步,以更新共享文件夹或虚拟目录。

使用受信任 CTL 的子集

本部分介绍如何生成、查看和筛选你希望组织中的计算机使用的受信任 CTL。 只有实施了前面过程中所述的 GPO 才能利用此解决方案。 此解决方案适用于连接断开的环境和连接的环境。

完成以下两个过程可以自定义受信任 CTL 的列表。

  1. 创建受信任证书的子集

  2. 使用组策略分发受信任证书

创建受信任证书子集的步骤

下面介绍如何使用 Windows 中的 Windows 自动更新机制生成 SST 文件。 有关生成 SST 文件的详细信息,请参阅 Certutil Windows 命令参考。

  1. 在已连接到 Internet 的计算机上,以管理员身份打开 Windows PowerShell,或者,在提升的命令提示符下键入以下命令:

    Certutil -generateSSTFromWU WURoots.sst
    
  2. 在 Windows 资源管理器中运行以下命令以打开 WURoots.sst

    start explorer.exe wuroots.sst
    

    提示

    也可以在 Internet Explorer 中导航到该文件,然后通过双击将它打开。 根据该文件的存储位置,也可以通过键入 wuroots.sst将它打开。

  3. 打开“证书管理器”。

  4. 展开“证书 - 当前用户”下的文件路径,直到显示“证书”,然后选择“证书”。

  5. 在详细信息窗格中,可以看到受信任的证书。 按住 CTRL 键的同时选择你要允许的每个证书。 选择完你要允许的证书后,右键单击选定的证书之一,然后依次选择“所有任务”和“导出”。

    • 只有至少选择了两个证书才能导出 .sst 文件类型。 如果只选择一个证书,.sst 文件类型将不可用,只能改而选择 .cer 文件类型。
  6. 在“证书导出向导”中,选择“下一步”。

  7. 在“导出文件格式”页面上选择“Microsoft 系列证书存储(.SST)”,然后选择“下一步”。

  8. 在“要导出的文件”页面上,输入该文件的文件路径和正确的名称(例如 C:\AllowedCerts.sst),然后单击“下一步”。

  9. 选择“完成”。 当系统通知你导出成功时,请选择“确定”。

  10. 将创建的 .sst 文件复制到域控制器。

使用组策略分发受信任证书列表的步骤

  1. 在包含自定义 .sst 文件的域控制器上,打开组策略管理编辑器。

  2. 依次展开“林”、“域”,以及你要修改的特定域对象。 右键单击“默认域策略 GPO”,然后选择“编辑”。

  3. 在导航窗格中的“计算机配置”下,依次展开“策略”、“Windows 设置”、“安全设置”和“公钥策略”。

  4. 右键单击“受信任的根证书颁发机构”,然后选择“导入”。

  5. 在证书导入向导中,选择“下一步”。

  6. 输入已复制到域控制器的文件的路径和文件名,或使用“浏览”按钮找到该文件。 选择“下一步”。

  7. 选择“下一步”确认你要将这些证书放置在“受信任的根证书颁发机构”证书存储中。 选择“完成”。 当系统通知你证书导入成功时,请选择“确定”。

  8. 关闭“组策略管理编辑器”。

该策略将立即生效,但客户端计算机只有在重新启动后才能接收新设置,或者,你也可以从提升的命令提示符或从 Windows PowerShell 键入 gpupdate /force

修改的注册表设置

本文档中所述的设置将在客户端计算机上配置以下注册表项。 如果取消链接 GPO 或者将它从域中删除,不会自动删除这些设置。 如果你要更改这些设置,则必须对其进行重新配置。

  • 启用或禁用受信任 CTL 的 Windows 自动更新:

    • 键:HKLM\SOFTWARE\Policies\Microsoft\SystemCertificates\AuthRoot\DisableRootAutoUpdate
    • 类型:REG_DWORD
    • 名称DisableRootAutoUpdate
    • 数据:0 表示启用;1 表示禁用。
    • 默认值:默认情况下不存在任何密钥。 如果没有密钥,则启用默认值。
  • 启用或禁用不受信任 CTL 的 Windows 自动更新:

    • 键:SOFTWARE\Policies\Microsoft\SystemCertificates\AuthRoot
    • 类型:REG_DWORD
    • 名称EnableDisallowedCertAutoUpdate
    • 数据:1 表示启用;0 表示禁用。
    • 默认值:默认情况下不存在任何密钥。 如果没有密钥,则启用默认值。
  • 设置共享 CTL 文件位置(HTTP 或 FILE 路径):

    • 键:HKLM\SOFTWARE\Microsoft\SystemCertificates\AuthRoot\AutoUpdate\RootDirUrl
    • 类型:REG_SZ
    • 名称RootDirUrl
    • 数据:输入有效的 HTTP 或文件 URI。
    • 默认值:默认情况下不存在任何密钥。 如果没有密钥,默认行为使用 Windows 更新。

验证受信任和不受信任的 CTL

出于各种原因,可能需要从客户端计算机中验证所有受信任和不受信任的 CTL。 以下 Certutil 选项可用于从客户端计算机中验证所有受信任和不受信任的 CTL。

certutil -verifyCTL AuthRoot
certutil -verifyCTL Disallowed

检查上次同步时间

若要检查本地计算机上受信任或不受信任的 CTL 的最近同步时间,请运行以下 Certutil 命令:

certutil -verifyctl AuthRoot | findstr /i "lastsynctime"
certutil -verifyctl Disallowed | findstr /i "lastsynctime"