在 Active Directory 域上实施 PKI

在 Active Directory 域上实施 PKI

我想在相对较小的 Windows 环境中实现两层 PKI:大约 35 个用户和 5 个虚拟服务器。虽然我对 Linux 没有什么经验,但我正在尝试使用西卡在基于 Linux 的虚拟机上作为离线根证书颁发机构,因为我不确定是否有必要为大部分时间处于关闭状态的计算机支付 Windows Server 许可费用。

我找到了两组我想要实现的配置的说明。

但是,我担心做错,而且这些说明对我来说似乎不够。我已经研究了好几个星期,我有几个问题。

一层还是两层?

有人认为,鉴于业务规模,我不需要两层 PKI,而应该使用单一的在线证书颁发机构。我并不完全反对这种配置,但我的理解是,当根 CA 处于离线状态时,从受损的在线根 CA 中恢复比从受损的中间/下属/颁发 CA 中恢复要困难得多。是这样吗?我是否必须在没有其他程序或服务的服务器上安装在线根 CA,因为如果服务器受损,可能需要重建?两层层次结构是否允许我将运行颁发 CA 的服务器用于其他目的?

AIA 和 CDP URL

我之前曾尝试过使用 Windows 根 CA 执行此操作。当时我的笔记中记录了在根 CA 上执行以下脚本的情况。

# VARIABLES
$HTTPUrl = "pki.mycompany.local"

# AIA
certutil -setreg CA\CACertPublicationURLs "1:C:\Windows\system32\CertSrv\CertEnroll\%1_%3%4.crt\n0:ldap:///CN=%7,CN=AIA,CN=Public Key Services,CN=Services,%6%11\n0:http://%1/CertEnroll/%1_%3%4.crt\n0:file://%1/CertEnroll/%1_%3%4.crt\n2:http://$HTTPUrl/pki/%3%4.crt"

# CDP
certutil -setreg CA\CRLPublicationURLs "65:C:\Windows\system32\CertSrv\CertEnroll\%3%8%9.crl\n0:ldap:///CN=%7%8,CN=%2,CN=CDP,CN=Public Key Services,CN=Services,%6%10\n0:http://%1/CertEnroll/%3%8%9.crl\n0:file://%1/CertEnroll/%3%8%9.crl\n6:http://$HTTPUrl/pki/%3%8.crl"

Restart-Service -Name CertSvc -Verbose

我找不到任何与 XCA 等效的程序。事实上,我读到过不应在根 CA 上设置 AIA 和 CDP URL。它们会在颁发 (Windows) CA 的属性中设置吗?

互联网信息服务

IIS 是否需要位于颁发 CA 以外的服务器上?

CAPolicy 配置文件

我读过的一些说明描述了如何修改文件 CAPolicy.inf;其他说明没有。一些说明提到了 OID;其他说明没有。我的理解是 CAPolicy.inf 有帮助但不是必需的。如果我创建它,我可以省略 OID 吗?我是否需要使用描述的步骤获取私有 OIDhttps://www.keyfactor.com/blog/establishing-a-private-oid/

OCSP

我经常看到有人推荐使用 OCSP,但是却找不到很多关于如何实现它的指南。有人可以推荐一些资源吗?

资源

这些是我计划参考的有关配置 Windows 部分的资源。如果您有更好的指南,请分享。

答案1

一层还是两层?

您的环境很小的说法确实有一定道理。根 CA 的目的实际上有两个方面:在多 CA 环境中,它将您的信任锚聚合为一个,从而简化了依赖方存储中信任锚的管理;并且(如果保持真正离线)它有助于在颁发 CA 受到损害的情况下缓解信任锚分布问题,因为它被设计为永远不会受到损害(即离线并具有严格的物理和程序控制)。

听起来第一个目的不适用于你。但是,你的环境可能会增长,如果将来出现第二个颁发 CA,你可能会庆幸你已经有一个根 CA 来签名它?

第二个目的可能听起来不适用于你,但同样,事情可能会随着时间的推移而改变。此外,Microsoft Windows 域在这方面也有些帮助,因为你可以使用 AD 或组策略来分发和/或删除信任锚,但如果你有一个单级 PKI,并且发生了更糟糕的事情,你是否相信 AD/组策略能够从中删除 CA 证书全部您的依赖方?甚至是您忘记的那些,或者由于用户正在路上而处于离线状态的笔记本电脑?

如果您的环境是虚拟的,那么将根 CA 用作另一个 VM 几乎没有什么好处。没有人可以坦诚地说 VM 处于离线状态。它可能已关闭,但可以打开,并且它会有备份(应该有),可以克隆和启动。如果您坚持使用 VM,请确保在磁盘映像上使用某种形式的静态加密,并将密码短语保存得非常安全。然后担心几年后没有人会注意到 VM 已经有一段时间没有启动了,因此会在没有检查的情况下将其删除。这就是这些备份派上用场的地方……

在虚拟环境中,另一种选择是购买一台笔记本电脑并在其上安装根 CA。不使用时,将其锁在保险箱中。您仍然需要在其周围实施一些强大的流程,以确保没有其他人可以访问它,并且没有人会在 10 年后找到它(积满灰尘)并决定将其回收!您还需要在每次使用后将这台笔记本电脑备份到加密的硬盘上,这也需要受到相同级别的保护。

您对此研究得越多,您就越会意识到 PKI 实际上并不是关于技术(它只是少数服务器),而是关于您为使其成为值得信赖的服务而实施的流程和程序。

AIA 和 CDP URL

正如您正确理解的那样,这些将在颁发 CA 证书中设置。它将由根 CA (XCA) 应用于颁发 CA 证书。

XCA 允许您生成用于应用此类设置的模板。只需生成一个新的 CA 模板(基于内置 CA 模板),并将类型设置为证书颁发机构,将路径长度设置为 0(且为关键),以确保此颁发 CA 证书下的任何实体都不能成为另一个 CA。在此模板上启用主题密钥标识符和颁发机构密钥标识符,并将 CRL 分发点设置为您将托管 XCA 生成的 CRL 的 URL(例如http://pki.mycompany.local/cdp/rootCA0.crl)。您需要一些手动过程将 XCA 生成的 CRL 上传到该位置。

无需在颁发 CA 证书上设置 AIA caIssuer,因为颁发者是根 CA,所有依赖方都必须在其信任锚存储中安装根 CA。也就是说,他们永远不需要使用此扩展来查找根 CA 证书。

编辑此模板时,将密钥用法设置为关键,并选择证书签名和 CRL 签名(仅)。不要选择任何扩展密钥用法。

从 Netscape 选项卡中删除所有内容(现在是 2023 年!)

在 CRL 分发点和授权信息访问设置中使用变量的 Microsoft 系统在 XCA 中不可用。但也不是必需的。在 Microsoft 世界中,它用于自动生成 CRL、证书名称和路径,并且在您重新密钥 CA 证书时非常有用。对于 XCA 根 CA,您只有一个 - 下载 CRL 的 URL - 因此使用变量会有些过头。如果将 XCA 用作颁发 CA,这种功能可能在 XCA 中很有用,但我认为它尚未实现。

互联网信息服务

IIS 确实需要位于颁发 CA 以外的服务器上。这是因为它应该绝不在生产环境中安装在 CA 上。

CA 是一项需要保护的高价值服务。考虑添加防火墙规则,以便只有您的订户可以访问它。您的 CRL 的 IIS 服务应该可以从所有依赖方访问,无论他们位于何处。严格的防火墙规则在这里会成为一种障碍。如果您在 CA 上托管 IIS,则需要非常开放的防火墙规则,这会增加攻击面。如果 IIS 受到攻击,攻击者可以访问您的 CA 密钥。

将您的 IIS 服务放在与 CA 不同的服务器上。

话虽如此,但并不存在 PKI 警察,而且我看到很多实施方案为了简单和节省成本而忽略了这一建议。

CAPolicy 配置文件

可能不需要。如果您不想启用所有 ADCS 模板,您可以添加:

[Certsrv_Server]
LoadDefaultTemplates=0

您不太可能需要注册 OID。除了在 PKI 公约中获得一些赞誉之外,它不会给您带来任何好处。检查 OID 的依赖方软件数量极其有限,因此它只是添加到已颁发证书上的标签。如果您决定编写严格的治理文档来管理您的 PKI 服务,那么您可能需要考虑使用 OID,但在深入这个雷区之前,您需要先了解治理原则。

OCSP

如果您希望撤销证书,OCSP 会很有用,因为它减少了您的依赖方下载大型 CRL 的要求(之所以很大,是因为当您撤销证书时它们会变得更大)。

OCSP 还可以帮助在 Web 浏览器中启用撤销功能,而如今 Web 浏览器往往会忽略 CRL。浏览​​器供应商对 CRL 和 OCSP 的支持有所不同,因此如果您坚持要求浏览器检查证书是否被撤销,则需要进行一些研究。

Microsoft 文档值得一读。

资源

为什么要信任一些随机博客来提供如此重要的安全服务?微软用于配置其产品的资源有什么问题?示例:

Microsoft PKI 文档参考

保护 PKI:监控公钥基础设施

ADCS 安全指南

了解证书吊销检查

证书的工作原理(2K3 时代,但有关设置和内部的有用信息)

证书撤销的工作原理(2K8 时代)

如果你真的必须在微软之外冒险,那么我建议PKI 解决方案作为值得信赖的来源,或系统管理员 LV

最后,既然我提到了值得信赖来源,你现在必须问问自己是否相信我的胡言乱语:-)

最后

请先在实验室中构建此服务。要创建值得信赖的服务,您需要确保生产构建顺利进行,这意味着这不应该是您第一次尝试此操作。

相关内容