30 天提醒:Windows DC 上基于证书的身份验证更改的完全实施模式变更

从 2022 年 5 月开始,Windows 域控制器 (DC) 上基于证书的身份验证开始按照计划的启用阶段时间表进行一系列更改,以增强安全性。

CVE-2022-34691、 CVE-2022-26931 和 CVE-2022-26923 解决了当 Kerberos 密钥分发中心 (KDC) 为基于证书的身份验证请求提供服务时可能发生的特权提升漏洞。 在 2022 年 5 月 10 日安全更新之前,基于证书的身份验证不会考虑计算机名称末尾的$ 。 这允许以各种方式模拟 (欺骗) 的相关证书。 此外,用户主体名称 (UPN) 和 sAMAccountName 之间的冲突引入了其他模拟 (欺骗) 漏洞,Microsoft还通过此安全更新解决了这些漏洞。。

安装 2025 年 2 月发布的 Windows 安全更新后,对于不满足预期映射要求的证书的身份验证将被拒绝。此更改称为 Full Enforcement (完全实施) 模式。但是,您可以在 2025 年 9 月之前恢复为兼容模式。

何时会发生这种情况:

在 2025 年 2 月或之后,设备将进入完全强制模式

 

这将对您的组织产生什么影响:

安装 2025 年 2 月 Windows 安全更新时,尚未处于完全强制模式(StrongCertificateBindingEnforcement 注册表值设置为 2)的设备将移至完全强制模式。如果身份验证被拒绝,您将看到事件 ID 39(或 Windows Server 2008 R2 SP1 和 Windows Server 2008 SP2 的事件 ID 41)。在此阶段,您可以选择将注册表项值设置回 1(兼容模式)。在 2025 年 9 月的 Windows 更新中,将不再支持 StrongCertificateBindingEnforcement 注册表值。

 

您需要准备什么:

查看 KB5014754的“执行操作”、“完全强制模式”和“注册表项信息”部分中的日期更改。采取适当的措施,使您的设备更加安全。

  1. 使用 2022 年 5 月 10 日更新更新运行 Active Directory 证书服务的所有服务器和为基于证书的身份验证提供服务的 Windows 域控制器 (请参阅 兼容模式) 。 2022 年 5 月 10 日更新将提供 审核事件 ,用于标识与完全强制模式不兼容的证书。
  2. 如果在安装更新后一个月内未在域控制器上创建审核事件日志,请继续在所有域控制器上启用完全强制模式。 到 2025 年 2 月,如果未配置 StrongCertificateBindingEnforcement 注册表项,域控制器将进入完全强制模式。 否则,将继续遵循注册表项兼容性模式设置。 在完全强制模式下,如果证书不符合强 (安全) 映射条件 (请参阅证书映射) ,身份验证将被拒绝。 但是,返回到兼容模式的选项将保留到 2025 年 9 月。 ​​​​​​​

 

证书映射

域管理员可以使用用户 Object 的 altSecurityIdentities 属性将证书手动映射到 Active Directory 中的用户。 此属性支持六个值,其中三个映射被视为弱 (不安全) ,其他三个映射被视为强映射。 通常,如果映射类型基于你不能重用的标识符,则它们被视为强。 因此,基于用户名和电子邮件地址的所有映射类型都被视为弱映射类型。

映射 示例 类型 备注
X509IssuerSubject “X509:<I>IssuerName<S>SubjectName”
X509SubjectOnly “X509:<S>SubjectName”
X509RFC822 “X509:<RFC822>user@contoso.com” 电子邮件地址
X509IssuerSerialNumber “X509:<I>IssuerName<SR>1234567890” 推荐
X509SKI “X509:<SKI>123456789abcdef”
X509SHA1PublicKey “X509:<SHA1-PUKEY>123456789abcdef”

 

如果客户无法使用新的 SID 扩展重新颁发证书,Microsoft建议使用上述强映射之一创建手动映射。为此,可以将相应的映射字符串添加到 Active Directory 中的用户 altSecurityIdentities 属性。

手动映射证书

备注 某些字段(如颁发者、使用者和序列号)以“转发”格式报告。 将映射字符串添加到 altSecurityIdentities 属性时,必须反转此格式。 例如,若要向用户添加 X509IssuerSerialNumber 映射,请搜索要映射到用户的证书的“颁发者”和“序列号”字段。 请参阅下面的示例输出。

  • 颁发者:CN=CONTOSO-DC-CA、DC=contoso、DC=com
  • SerialNumber:2B0000000011AC000000012

然后,使用以下字符串更新 Active Directory 中用户的 altSecurityIdentities 属性:

  • “X509:<I>DC=com,DC=contoso,CN=CONTOSO-DC-CA<SR>1200000000AC11000000002B”

若要使用 Powershell 更新此属性,可以使用以下命令。 请记住,默认情况下,只有域管理员有权更新此属性。

  • set-aduser ‘DomainUser’ -replace @{altSecurityIdentities= “X509:<I>DC=com,DC=contoso,CN=CONTOSO-DC-CA<SR>1200000000AC1100000002B”}

请注意,反转 SerialNumber 时,必须保留字节顺序。 这意味着,反转 SerialNumber“A1B2C3”应生成字符串“C3B2A1” ,而不是 “3C2B1A”。 有关详细信息,请参阅 HowTo:通过 altSecurityIdentities 属性中提供的所有方法将用户映射到证书

 

 更新的时间线

兼容性模式:

  • 安装 2022 年 5 月 10 日 Windows 更新后,设备将处于兼容模式。如果证书可以强映射到用户,身份验证将按预期进行。 如果证书只能弱映射到用户,身份验证将按预期进行。 但是,除非证书早于用户,否则将记录警告消息。 如果证书早于用户,并且证书备份注册表项不存在,或者该范围超出了回退补偿范围,身份验证将失败,并且将记录错误消息。如果配置了证书备份注册表项,如果日期在回退补偿范围内,它将在事件日志中记录警告消息。
  • 安装 2022 年 5 月 10 日 Windows 更新后,watch一个月或更晚后可能出现的任何警告消息。 如果没有警告消息,Microsoft强烈建议使用基于证书的身份验证在所有域控制器上启用完全强制模式。 可以使用KDC 注册表项 启用完全强制模式。

完全强制模式

  • 除非之前使用StrongCertificateBindingEnforcement 注册表项更新为审核模式或强制模式,否则安装 2025 年 2 月 Windows 安全更新后,域控制器将移至完全强制模式。如果证书无法进行强映射,身份验证将被拒绝。返回到兼容模式的选项将保留到 2025 年 9 月。在此日期之后, 将不再支持 StrongCertificateBindingEnforcement 注册表项

禁用模式

  • 如果基于证书的身份验证依赖于无法从环境中移动的弱映射,则可以使用注册表项设置将域控制器置于“禁用”模式。 Microsoft 不建议 这样做,Microsoft于 2023 年 4 月 11 日删除禁用模式。

强映射默认更改

  • 在 Server 2019 及更高版本上安装 2024 年 2 月 13 日或更高版本的 Windows 更新以及安装了 RSAT 可选功能的受支持客户端后,Active Directory 用户&计算机中的证书映射将默认使用 X509IssuerSerialNumber 选择强映射,而不是使用 X509IssuerSubject 选择弱映射。仍可根据需要更改设置。

安装 CVE-2022-26931 和 CVE-2022-26923 保护后无法登录的解决办法

  • 在相关计算机上使用 Kerberos 操作日志来确定哪个域控制器未能通过登录。 转到 事件查看器 应用程序和服务日志\Microsoft \Windows\Security-Kerberos\Operational
  • 在域控制器上的系统事件日志中查找帐户尝试进行身份验证的相关事件。
  • 如果证书早于帐户,请重新颁发证书或向帐户添加安全的 altSecurityIdentities 映射 (请参阅 证书映射) 。
  • 如果证书包含 SID 扩展,请验证 SID 是否与帐户匹配。
  • 如果证书用于对多个不同的帐户进行身份验证,则每个帐户都需要单独的 altSecurityIdentities 映射。
  • 如果证书没有到帐户的安全映射,请添加一个或将域保留为兼容模式,直到可以添加一个。

 

无法使用传输层安全性 (TLS) 证书映射进行身份验证的解决办法

TLS 证书映射的一个示例是使用 IIS Intranet Web 应用程序。

  • 安装 CVE-2022-26391 和 CVE-2022-26923 保护后,这些方案默认使用 Kerberos 证书服务用户 (S4U) 协议进行证书映射和身份验证。
  • 在 Kerberos 证书 S4U 协议中,身份验证请求从应用程序服务器流向域控制器,而不是从客户端流向域控制器。 因此,相关事件将位于应用程序服务器上。

在 2022 年 5 月 10 日至 2025 年 9 月 10 日或更高版本发布的 Windows 更新中安装 CVE-2022-26931 和 CVE-2022-26923 保护后,以下注册表项可用。

密钥分发中心 (KDC) 注册表项 

安装 2025 年 9 月或之后发布的 Windows 更新后,此注册表项将不受支持。

重要

对于需要此注册表项的环境,使用此注册表项是一种临时解决方法,必须谨慎使用。 对于环境,使用此注册表项意味着以下内容:

  • 此注册表项仅适用于从 2022 年 5 月 10 日发布的更新开始的兼容模式
  • 安装 2025 年 9 月 10 日发布的 Windows 更新后,将不支持此注册表项。
  • 强证书绑定强制使用的 SID 扩展检测和验证依赖于 KDC 注册表项 UseSubjectAltName 值。 如果注册表值不存在或值设置为 0x1 值,将使用 SID 扩展。 如果 UseSubjectAltName 存在,并且值设置为 0x0,则不会使用 SID 扩展。
注册表子项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc
StrongCertificateBindingEnforcement
数据类型 REG_DWORD
数据 1 – 检查是否存在强证书映射。 如果是,则允许身份验证。 否则,如果证书具有新的 SID 扩展,KDC 将检查并对其进行验证。 如果此扩展不存在,则如果用户帐户早于证书,则允许进行身份验证。

2 – 检查是否存在强证书映射。 如果是,则允许身份验证。 否则,如果证书具有新的 SID 扩展,KDC 将检查并对其进行验证。 如果此扩展不存在,身份验证将被拒绝。

0 – 禁用强证书映射检查。 不建议这样做,因为这将禁用所有安全增强功能。

如果将其设置为 0,还必须将 CertificateMappingMethods 设置为 0x1F,如下面的 Schannel 注册表项部分所述,计算机基于证书的身份验证才能成功。

需要重启?

SChannel 注册表项

当服务器应用程序需要客户端身份验证时,Schannel 会自动尝试将 TLS 客户端提供的证书映射到用户帐户。 可以通过创建将证书信息关联到 Windows 用户帐户的映射,对使用客户端证书登录的用户进行身份验证。 创建并启用证书映射后,每当客户端提供客户端证书时,服务器应用程序会自动将该用户与相应的 Windows 用户帐户相关联。

Schannel 将尝试映射已启用的每个证书映射方法,直到成功。 Schannel 首先尝试映射 Service-For-User-To-Self (S4U2Self) 映射。 “使用者/颁发者”、“颁发者”和“UPN”证书映射现在被视为弱证书映射,并且默认处于禁用状态。 所选选项的位掩码总和决定了可用的证书映射方法列表。

SChannel 注册表项默认值已0x1F,现在0x18。 如果遇到基于 Schannel 的服务器应用程序的身份验证失败,建议执行测试。 在域控制器上添加或修改 CertificateMappingMethods 注册表项值,并将其设置为 0x1F,并查看这是否解决了该问题。 有关详细信息,请查看域控制器上的系统事件日志,了解本文中列出的任何错误。 请记住,将 SChannel 注册表项值改回以前的默认 (0x1F) 将还原使用弱证书映射方法。

注册表子项 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannel
CertificateMappingMethods
数据类型 DWORD
数据 0x0001 – 主题/颁发者证书映射 (弱 – 默认禁用)

0x0002 – 颁发者证书映射 (弱 – 默认禁用)

0x0004 – UPN 证书映射 (弱 – 默认禁用)

0x0008 – S4U2 自身证书映射 (强)

0x0010 – S4U2 自身显式证书映射 (强)

需要重启?

证书备份注册表项

安装解决 CVE-2022-26931 和 CVE-2022-26923 的更新后,如果用户证书早于用户创建时间,身份验证可能会失败。 在环境中使用弱 证书映射 并且证书时间早于设置范围内的用户创建时间之前,此注册表项允许成功进行身份验证。 此注册表项不会影响具有强证书映射的用户或计算机,因为不会使用强证书映射检查证书时间和用户创建时间。 当 StrongCertificateBindingEnforcement 设置为 2 时,此注册表项没有任何影响。

对于需要此注册表项的环境,使用此注册表项是一种临时解决方法,必须谨慎使用。 对于环境,使用此注册表项意味着以下内容:

  • 此注册表项仅适用于从 2022 年 5 月 10 日发布的更新开始 的兼容模式 。 允许在后退补偿偏移量内进行身份验证,但会记录弱绑定的事件日志警告。
  • 启用此注册表项允许在证书时间早于设置范围内的用户创建时间时对用户进行身份验证,作为弱映射。 安装 2025 年 9 月或之后发布的 Windows 更新后,弱映射将不受支持。
注册表子项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc
CertificateBackdatingCompensation
数据类型 REG_DWORD
数据 大约几年内解决方法的值:

  • 50 年:0x5E0C89C0
  • 25 年: 0x2EFE0780
  • 10 年:0x12CC0300
  • 5 年:0x9660180
  • 3 年:0x5A39A80
  • 1 年:0x1E13380

注意 如果知道环境中的证书生存期,请将此注册表项设置为略长于证书生存期。  如果不知道环境的证书生存期,请将此注册表项设置为 50 年。 当此密钥不存在时,默认为 10 分钟,这与 Active Directory 证书服务 (ADCS) 匹配。 最大值为 50 年 (0x5E0C89C0) 。

此密钥设置密钥分发中心 (KDC) 将忽略用户/计算机帐户的身份验证证书颁发时间和帐户创建时间之间的时差(以秒为单位)。

重要提示 仅当环境需要时设置此注册表项。 使用此注册表项会禁用安全检查。

需要重启?

 

在安装 2022 年 5 月 10 日 Windows 更新后,企业证书颁发机构 (CA) 将开始添加对象标识符 (OID) (1.3.6.1.4.1.311.25.) 2 的新非关键扩展。 可以通过在相应模板的 msPKI-Enrollment-Flag 值中设置0x00080000位来停止添加此扩展。例如:

运行以下 certutil 命令,从获取新 扩展的用户模板 中排除证书。

  1. 使用企业管理员或等效凭据登录到证书颁发机构服务器或已加入域的Windows 10客户端。
  2. 打开命令提示符并选择 以管理员身份运行”。
  3. 运行 certutil -dstemplate 用户 msPKI-Enrollment-Flag +0x00080000。

禁用此扩展的添加将删除新扩展提供的保护。 请考虑仅在以下任一操作后执行此操作:

  1. 确认在 KDC 进行 Kerberos 协议身份验证时,对于初始身份验证的公钥加密 (PKINIT) ,不能接受相应的证书
  2. 相应的证书配置了其他强证书映射

安装 2022 年 5 月 10 日 Windows 更新后,不会使用新的 SID 扩展保护具有非Microsoft CA 部署的环境。 受影响的客户应与相应的 CA 供应商合作来解决此问题,或者应考虑使用上述其他强证书映射。

更新 CA 后,是否必须续订所有客户端身份验证证书?

否,不需要续订。 CA 将以兼容模式提供。 如果需要使用 ObjectSID 扩展进行强映射,则需要一个新证书。

完全强制模式将如何影响我的环境?

在 2025 年 2 月 11 日 Windows 更新中,尚未在强制 (StrongCertificateBindingEnforcement 注册表值设置为 2) 的设备将移至 Enforcement。 如果身份验证被拒绝,你将看到 Windows Server 2008 R2 SP1 和 Windows Server 2008 SP2) 的事件 ID 39 (或事件 ID 41。 在此阶段,可以选择将注册表项值重新设置为 1 (兼容模式) 。

在 2025 年 9 月 10 日 Windows 更新中, 将不再支持 StrongCertificateBindingEnforcement 注册表值。 ​​​​​​​

 

 


了解 365vCloud's Journey to the Cloud 的更多信息

订阅后即可通过电子邮件收到最新文章。