我们正在清理 Windows PKI/CA 环境并用新服务器替换我们的根 CA。当前的根 CA 多年来一直在颁发以下证书模板(除了下属证书模板):
- Kerberos 身份验证
- 域控制器身份验证(我们知道这现在已被 Kerberos 身份验证模板取代)
- 域控制器(我们知道这现在已经被取代了)
- 目录电子邮件复制
从属 CA 也已“发布”模板。
我们知道这并不理想,新的根 CA 将被设置为仅颁发从属证书模板。
问题:
删除根 CA 颁发的上述模板后(不是删除模板本身,只是删除该根 CA 颁发的模板),当域控制器自动更新上述证书时,他们是否知道根据域控制器所需的模板查看下属 CA 以更新/颁发新证书? 或者我们是否需要做其他事情来主动向环境中的 DC 颁发新证书?现有证书不会被撤销,因此它们在重新注册之前将一直有效,但我们很好奇,如果原始证书是由旧根 CA 颁发的,重新注册是否会失败。如果允许多个 CA 颁发这些 DC 模板,我们不确定 DC 如何“决定”从哪个 CA 中选择。
附加问题:
您知道在我们替换 rootCA 后,现有 SubCA 颁发的现有证书会产生什么影响吗?我们正在将 rootCA 迁移到新名称:逐步将 CA 迁移到新服务器-- 评论中的其他人问的问题与我问的关于现有证书的问题基本相同,但没有人回复。我的猜测是,只要客户端的受信任根存储中仍有旧 RootCA,中间存储中仍有 SubCA,那么在证书过期之前,他们应该仍拥有良好的证书链,但我希望提前知道确切情况。
答案1
当域控制器自动更新上述证书时,他们是否知道根据域控制器所需的模板查看下属 CA 以更新/颁发新证书?
是的。注册客户端将首先从 AD 中枚举所有支持请求模板的 CA。然后客户端将从此列表中随机选择 CA 发送续订请求。也就是说,从根 CA 中删除所有模板是可以的,客户端将尝试另一个支持此模板的可用 CA。
附言:不过我会考虑将企业根 CA(域加入)转换为独立根 CA(工作组成员),这样您就可以在大多数时间关闭根 CA,因为它与在线无关。您可以每年打开它一两次来发布 CRL 或当您需要签署下属 CA 证书时。但这是另一个问题,只是遵循最佳实践的好方法。
更新 1(2022 年 1 月 21 日)
Microsoft Docs 页面没有显示有关如何枚举 CA 等的任何内容。
注册客户端调用通用IX509注册::注册执行一系列调用(非常简化的步骤):
CA 发现使用[MS-XCEP]
- 从注册表中加载策略列表。
- 分组策略依据策略编号属性。
- 组排序依据成本属性,然后通过验证属性。Kerberos 身份验证具有更高的优先级。其余组按任意顺序排列。
- 通过调用以下方法查询每项政策IPolicy::获取策略响应web 方法。响应包含 CA web 服务列表
- 响应包含:调用者有权注册的证书模板列表和 CA 端点列表(实现[MS-WSTEP]请参阅证书协议 (英译:证书协议) 以及受支持的证书模板信息。
- 准备空列表。
- 对于每个已排序的策略组:
- 订购 CA 依据成本属性,然后通过验证属性。Kerberos 身份验证具有更高的优先级。其余组按任意顺序放置。消除调用者没有权限的 CA。按相同顺序将有序 CA 附加到列表中。
- 重复(8),直到所有CA都添加到列表中。
- 对于剩余列表中的每个 CA:
- 生成证书请求并调用ICertRequest::提交向选定的 CA 提交请求。
- 重复(11),直到调用成功。
CA 发现使用[MS-WCCE]
- 做 do-while 循环调用ICertConfig::下一步枚举所有自动发现的 CA(本地、在 AD 中注册、存储在共享目录中等)。这将生成所有可能的 CA 的列表。
- 每个 CA 客户端都使用作为参数进行
ICertRequest2::GetCAProperty
调用。消除离线 CA。CR_PROP_TEMPLATES
propID
- 对(1)中获得的过滤列表,剔除那些不支持请求模板的CA。
- 如果CA 站点意识配置后,过滤与客户端位于同一 ADDS 站点的 CA 列表。如果未配置 CA 站点感知或客户端所在的同一 ADDS 站点中没有 CA,则不进行过滤。
- 称呼ICertRequest::获取CACertificate检索 CA 证书并验证每个证书。消除证书无效或不受信任的 CA。
- 从剩余列表中选择任意 CA,生成证书请求并调用ICertRequest::提交向选定的 CA 提交请求。
再次,这是注册客户端发现 CA 和提交证书请求的简化任务序列。
更新 2
您知道我们替换 rootCA 后,从现有 SubCA 颁发的现有证书会产生什么影响吗?
只要根 CA 受到客户端信任,实际上就没有什么事情。