我目前正在为网络尚未完全连接的客户实施企业证书颁发机构;它跨越多个地理站点,其中一些没有到 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 连接。您有哪些选择:
- 启用 CA 和域控制器之间的 RPC 通信。
- 使用
Domain Contoller Authentication
证书模板而不是Kerberos Authentication
模板。Domain Contoller Authentication
模板不需要 RPC 连接回 DC。
事实上,我记不住所有的细节,但值得称赞的是,你做了很好的调查,并指出了失败的 RPC 回调,这确实减少了可能的原因。有关发生这种情况的详细信息如下。
总结
第1部分
首先,关于证书模板:Domain Controller Authentication
和Kerberos Authentication
模板都用于提供对 LDAP 的支持年代(LDAP over TLS)以及证书/智能卡登录期间的相互身份验证。
两者之间的区别在于主题的构造方式,或者其中包含的内容。Domain Controller Authentication
仅在 SAN 扩展中包含域控制器的 FQDN。Kerberos Authentication
添加两个名称:FDQN 和域的 NetBIOS 名称。此外,Kerberos Authentication
还添加了KDC Authentication
EKU。默认模板配置在[MS-CRTD],附录 A更明确地说:
Domain Controller Authentication
主题名称具有 134217728(0x8000000)标志组合,其转换为仅标志:CT_FLAG_SUBJECT_ALT_REQUIRE_DNS
Kerberos Authentication
主体名称具有 138412032 (0x8400000) 个标志组合,其转换为两个标志:CT_FLAG_SUBJECT_ALT_REQUIRE_DNS
和CT_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
参数设置为上一步获取的值,InformationClas
s 参数设置为PolicyDnsDomainInformation
。- CA 必须将上一步返回的 DNS 域信息中的
Name
和字段的值添加到颁发证书的主题备用名称扩展中。DNSDomainName
如您所见,LsarOpenPolicy
调用确实是 RPC 调用,并在成功时返回 RPC 连接的句柄。 在您的例子中,此调用失败,CA 无法调用LsarQueryInformationPolicy
(这又是 RPC 调用!)以获取插入证书所需的名称。
结论
可能希望在模板中关闭域 FQDN 和域 NetBIOS 名称Kerberos Authentication
,但我不建议这样做。也不要尝试将KDC Authentication
EKU 添加到Domain Controller Authentication
,因为前者严格依赖于域 FQDN 和 NetBIOS 的存在,这会在您的环境中导致问题。
答案2
为了绕过 RPC 调用回到您的 DC,您可以复制 Kerberos 模板并手动添加 SAN。然后启用自动续订。
步骤如下 -
配置模板:
复制 Kerberos 模板
将新模板主题名称配置为“请求中的供应”
- 授予你的 DC 对新模板的读取和注册权限
- 如果需要,你可以取代旧模板
- 发布模板
在您的 WES 上:
iisreset 刷新模板列表
注册证书:
在您的独立 DC 上注册证书并在 SAN 扩展中添加域名(这不会使 RPC 从 CA 回调到 DC)。
(如果您看不到模板,请清除 C:\ProgramData\Microsoft\Windows\X509Enrollment 中的本地 WES 缓存)
启用自动续订(通过 GPO):
Windows 设置 > 安全设置 > 公钥策略 > 证书服务客户端 - 自动注册。只需标记“续订过期证书、更新待处理证书和删除已撤销证书”即可
测试自动续订:
在新模板上 - 右键单击并选择“重新注册所有证书持有者”。这将增加模板的主要版本,并在下一个自动注册周期(8 小时一次)强制更新证书。
如果您不想等待 - 请重置 WES,删除本地 x509enrollment 文件夹并运行“certutil -pulse”
祝你好运