总结

总结

我目前正在为网络尚未完全连接的客户实施企业证书颁发机构;它跨越多个地理站点,其中一些没有到 CA 所在站点的路由。

为了解决这个问题,我使用了证书注册 Web 服务,允许通过 HTTPS 进行证书注册;该服务通过公共名称和 IP 地址公开,远程站点的计算机可以通过这种方式访问​​它。

该解决方案适用于所有类型的证书;但是,远程站点中的域控制器无法使用模板“Kerberos 身份验证”获取证书(最近的 DC 在启用自动注册时尝试使用该模板);错误是通用的“RPC 服务器不可用”,但它发生在 CA 本身上,记录失败的请求。

这让我困惑了一段时间,直到我决定查看网络流量;瞧,似乎当使用模板“Kerberos 身份验证”请求证书时,CA 尝试重新连接发出请求的域控制器。这在客户网络中是不可能发生的,而且这似乎是请求失败的原因。

我猜想 CA 在某种程度上试图验证请求证书的计算机实际上是一个域控制器;但是,我找不到任何相关文档,而且这种“回调”似乎与证书请求的客户端/服务器逻辑相悖。

这种行为有记录吗?

可以关掉吗?

CA 上的操作系统是 Windows Server 2019。


编辑

AD 林中有四个域;CA 位于林根域中。
所有域中的所有 DC 的行为都是相同的:每当请求“Kerberos 身份验证”证书时(手动或通过自动注册),CA 都会尝试通过端口 445 和 139 联系请求的 DC(奇怪的是,没有实际的 LDAP、Kerberos 或 RPC 流量);如果此操作失败,请求将被拒绝,错误为“策略模块拒绝”,状态代码为“RPC 服务器不可用”。

这仅发生在“Kerberos 身份验证”证书中;所有其他证书都可以通过 CES 成功注册,包括“域控制器身份验证”和“目录电子邮件复制”。

我还针对可以与 CA 进行实际通信的 DC 进行了测试:如果从 DC 到 CA 的流量被阻止,从而强制请求使用 CES,但反之则不行,则请求成功;如果从 CA 到 DC 的流量被阻止,则请求失败。

答案1

根据文档,您所遇到的行为是预期行为,设计如此,无法关闭。Kerberos Authentication需要从 CA 到 DC 的 RPC 连接。您有哪些选择:

  1. 启用 CA 和域控制器之间的 RPC 通信。
  2. 使用Domain Contoller Authentication证书模板而不是Kerberos Authentication模板。Domain Contoller Authentication模板不需要 RPC 连接回 DC。

事实上,我记不住所有的细节,但值得称赞的是,你做了很好的调查,并指出了失败的 RPC 回调,这确实减少了可能的原因。有关发生这种情况的详细信息如下。


总结

第1部分

首先,关于证书模板:Domain Controller AuthenticationKerberos Authentication模板都用于提供对 LDAP 的支持年代(LDAP over TLS)以及证书/智能卡登录期间的相互身份验证。

两者之间的区别在于主题的构造方式,或者其中包含的内容。Domain Controller Authentication仅在 SAN 扩展中包含域控制器的 FQDN。Kerberos Authentication添加两个名称:FDQN 和域的 NetBIOS 名称。此外,Kerberos Authentication还添加了KDC AuthenticationEKU。默认模板配置在[MS-CRTD],附录 A更明确地说:

  • Domain Controller Authentication主题名称具有 134217728(0x8000000)标志组合,其转换为仅标志:CT_FLAG_SUBJECT_ALT_REQUIRE_DNS

  • Kerberos Authentication主体名称具有 138412032 (0x8400000) 个标志组合,其转换为两个标志:CT_FLAG_SUBJECT_ALT_REQUIRE_DNSCT_FLAG_SUBJECT_ALT_REQUIRE_DOMAIN_DNS

主题名称标志存储在msPKI-Certificate-Name-Flag属性中([MS-CRTD] §2.28)。

您的问题是由于 SAN 中要求包含域 FQDN 和 NetBIOS 名称而导致的。Kerberos Authentication模板是唯一使用CT_FLAG_SUBJECT_ALT_REQUIRE_DOMAIN_DNS标志的默认模板。

第2部分

Windows CA 使用[MS-WCCE]协议规范来处理请求和颁发证书。此协议完全指定了客户端行为以及 Windows CA 的一小部分交互和行为。[MS-WCCE] §3.2.2.1.3为作为域控制器的客户端定义一种特殊行为,并通过在其名称前面添加“\\”来准备用于 RPC 连接的名称。

第 3 部分

Windows CACT_FLAG_SUBJECT_ALT_REQUIRE_DOMAIN_DNS按照指定的方式处理[MS-WCCE] §3.2.2.6.2.1.4.5.9

如果CT_FLAG_SUBJECT_ALT_REQUIRE_DOMAIN_DNS设置了该标志,则 CA 应该:

  • CA 应该使用 LsarOpenPolicy 方法检索信息策略的句柄([MS-LSAD] 第 3.1.4.4.2 节),将SystemName参数设置为dNSHostName来自请求者的计算机对象的属性,将的所有字段ObjectAttributes设置为NULL,将DesiredAccess参数设置为POLICY_VIEW_LOCAL_INFORMATION
  • CA 应使用以下LsarQueryInformationPolicy方法获取请求者的计算机 DNS 域信息([MS-LSAD] 第 3.1.4.4.4 节),其中PolicyHandle参数设置为上一步获取的值,InformationClass 参数设置为PolicyDnsDomainInformation
  • CA 必须将上一步返回的 DNS 域信息中的Name和字段的值添加到颁发证书的主题备用名称扩展中。DNSDomainName

如您所见,LsarOpenPolicy调用确实是 RPC 调用,并在成功时返回 RPC 连接的句柄。 在您的例子中,此调用失败,CA 无法调用LsarQueryInformationPolicy(这又是 RPC 调用!)以获取插入证书所需的名称。

结论

可能希望在模板中关闭域 FQDN 和域 NetBIOS 名称Kerberos Authentication,但我不建议这样做。也不要尝试将KDC AuthenticationEKU 添加到Domain Controller Authentication,因为前者严格依赖于域 FQDN 和 NetBIOS 的存在,这会在您的环境中导致问题。

答案2

为了绕过 RPC 调用回到您的 DC,您可以复制 Kerberos 模板并手动添加 SAN。然后启用自动续订。

步骤如下 -

配置模板:

  1. 复制 Kerberos 模板

  2. 将新模板主题名称配置为“请求中的供应”

  3. 授予你的 DC 对新模板的读取和注册权限
  4. 如果需要,你可以取代旧模板
  5. 发布模板

在您的 WES 上:

iisreset 刷新模板列表

注册证书:

在您的独立 DC 上注册证书并在 SAN 扩展中添加域名(这不会使 RPC 从 CA 回调到 DC)。

(如果您看不到模板,请清除 C:\ProgramData\Microsoft\Windows\X509Enrollment 中的本地 WES 缓存)

启用自动续订(通过 GPO):

Windows 设置 > 安全设置 > 公钥策略 > 证书服务客户端 - 自动注册。只需标记“续订过期证书、更新待处理证书和删除已撤销证书”即可

测试自动续订:

在新模板上 - 右键单击​​并选择“重新注册所有证书持有者”。这将增加模板的主要版本,并在下一个自动注册周期(8 小时一次)强制更新证书。

如果您不想等待 - 请重置 WES,删除本地 x509enrollment 文件夹并运行“certutil -pulse”

祝你好运

相关内容