我们希望强制远程桌面使用基于特定命名模板的证书,而不是使用自签名证书。这在具有证书颁发机构服务器的林中有效,但在没有自己的 CA 服务器的林中无效。我想避免对要在每台计算机上使用的证书指纹进行硬编码,因为每次更新证书时都需要更新它。
我们有许多 Active Directory 域(每个林一个域),这些域具有 Microsoft Enterprise CA(每个林一个 CA 服务器)。这些原始域/林彼此不信任,并且彼此之间有防火墙。我们所有的服务器都使用 Windows Server 2016。
证书模板在一个 CA 上生成,然后复制到其他 CA。所有证书模板均不具有扩展名“远程桌面身份验证”(1.3.6.1.4.1.311.54.1.2)。域中的每台服务器都有一个基于带有“服务器身份验证”扩展名的模板的证书,并且我们有一个 GPO,其设置“服务器身份验证证书模板”,并配置了我们想要与 RDP 一起使用的证书模板的名称。这在具有 CA 的域/林中似乎运行良好。
为了支持第三方开发应用程序,我们为每个原始林构建了额外的林,每个新林都信任其对应的原始林。开发林没有 CA - 它们的证书由其对应的原始林中的 CA 颁发。开发林的 GPO 通常是其对应的原始林中 GPO 的副本。
如果我查看具有 CA 的主林中的证书,在属性“证书模板信息”中,显示的值的形式为“Template= Display Name
( OID
)...”。在没有 CA 服务器的域中,显示的值的形式为“Template= OID
”(即没有显示名称,只有 OID)。我相信这就是 GPO 设置在没有本地 CA 的林中不起作用的原因。
我在这里使用了脚本:https://www.sysadmins.lv/blog-en/export-and-import-certificate-templates-with-powershell.aspx将证书模板和 OID 从具有 CA 的林复制到其对应的开发林。虽然该过程成功了,但这无助于将 OID 解析为证书的显示名称,也无法使 GPO 设置正常工作。我注意到,在转移到新域时,模板的 OID 有所不同(我在 AD 站点和服务中的“公钥服务”下查看)。我还尝试了以下模块:https://www.powershellgallery.com/packages/ADCSTemplate/1.0.1.0得到了类似的结果。
有没有一种简单的方法,无需更改原始证书模板或创建新的证书模板,我们可以有一个 GPO(在所有林之间复制)来指定要与 RDP 一起使用的证书模板,或者我们必须在开发林中拥有单独的 GPO,这些 GPO 具有证书模板的 OID 而不是显示名称?
答案1
你只有两个选择:
- 在每个林中安装 CA
- 在有 CA 和没有 CA 的林之间建立双向林信任,并配置跨林证书注册。
- 没有第三个选择。