我目前正在为网络未完全连接的客户实施企业证书颁发机构;它跨越多个地理站点,其中一些没有路由到 CA 所在的站点。
为了解决这个问题,我使用了Certificate Enrollment Web Service,它允许通过 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 的流量被阻止,则请求失败。
根据文档,您所面临的行为是预期的,是设计的,无法关闭。
Kerberos Authentication
需要从 CA 到 DC 的 RPC 连接。您有哪些选择:Domain Contoller Authentication
证书模板而不是Kerberos Authentication
模板。Domain Contoller Authentication
模板不需要 RPC 连接回 DC。事实上,我不记得所有的细节和对你的赞美,你做了很好的调查并指出了一个失败的 RPC 回调,这确实减少了可能的原因。关于为什么会发生这种情况的完整详细信息如下。
TL;博士
第1部分
首先,关于证书模板:两者,
Domain Controller Authentication
和模板用于在证书/智能卡登录期间Kerberos Authentication
提供对LDAP S (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
template 是唯一使用CT_FLAG_SUBJECT_ALT_REQUIRE_DOMAIN_DNS
标志的默认模板。第2部分
Windows CA 使用[MS-WCCE]协议规范来处理请求和颁发证书。该协议完整地规定了 Windows CA 的客户端行为和一小部分交互和行为。[MS-WCCE] §3.2.2.1.3为作为域控制器的客户端定义了一种特殊行为,并通过在其名称前加上“\\”来准备其名称以准备 RPC 连接。
第 3 部分
Windows CA 按照 [MS-WCCE] §3.2.2.6.2.1.4.5.9 中的
CT_FLAG_SUBJECT_ALT_REQUIRE_DOMAIN_DNS
规定处理。如您所见,
LsarOpenPolicy
call 确实是 RPC 调用,并在成功时返回 RPC 连接句柄。在您的情况下,此调用失败并且 CA 无法调用LsarQueryInformationPolicy
(这又是 RPC 调用!)以获取插入证书所需的名称。底线
可能希望在模板中关闭域 FQDN 和域 NetBIOS 名称
Kerberos Authentication
,但我不建议这样做。也不尝试将KDC Authentication
EKU 添加到Domain Controller Authentication
,因为首先严格依赖于域 FQDN 和 NetBIO 的存在,这会导致您的环境出现问题。为了绕过 RPC 回调到您的 DC,您可以复制 Kerberos 模板并手动添加 SAN。然后启用自动更新。
以下是步骤-
配置模板:
复制 kerberos 模板
将新模板主题名称配置为“在请求中提供”
在您的 WES 上:
iisreset 刷新模板列表
注册证书:
在您的隔离 DC 上注册证书并在 SAN 扩展中添加域名(这不会使 RPC 回调从 CA 到 DC)。
(如果您看不到模板,请清除 C:\ProgramData\Microsoft\Windows\X509Enrollment 处的本地 WES 缓存)
启用自动续订(通过 GPO):
Windows 设置 > 安全设置 > 公钥策略 > 证书服务客户端 - 自动注册。仅标记“更新过期证书、更新待处理证书和删除已撤销证书”就足够了
测试自动更新:
在新模板上 - 右键单击并选择“重新注册所有证书持有者”。这将增加模板的主要版本,并在下一个自动注册周期(8 小时一次)强制更新证书。
如果您不想等待 - 然后 iisreset WES,删除本地 x509enrollment 文件夹并运行“certutil -pulse”
祝你好运