单个 ADCS 实例可以“容纳”多个 PKI 命名空间吗?

单个 ADCS 实例可以“容纳”多个 PKI 命名空间吗?

我想节省操作系统许可证、简化 CRL 更新并在给定服务器上拥有多个证书实例。

对我来说,从安全角度来看这是有意义的,因为我有:

  • 一个充当根的 CA,需要发布和更新策略服务器的 CRL(下一个要点)

  • 有许多策略服务器(第二层)受到名称约束或 EKU 用法的约束。同样,这些服务器也需要发布许多 CRL 和 AIA 记录。

  • 我们目前估计需要 10,000 到 50,000 台策略服务器。每台策略服务器都将在 Azure blob 存储中存储一个 CRL,并且每台服务器都有一个专用容器以实现 IO 可扩展性。

根据 certutil -ping 的输出(即 config 参数),似乎每个 ADCS 实例可以有多个配置。

此外,Certutil 的其他几个参数(以及相应的 API)允许我指定要连接到哪个“实例”。

/// --- NOTE: The ability to specify an individual config seems to indicate multiple PKIs are possible per box:
PS C:\Windows\system32\CertSrv\en-US> certutil -ping -config "a.Issue01.bitclear.us\Secure Issuer 01a-001"
Connecting to a.Issue01.bitclear.us\Secure Issuer 01a-001 ...
Server "Secure Issuer 01a-001" ICertRequest2 interface is alive (0ms)
CertUtil: -ping command completed successfully.

 /// --- NOTE "Entry 0" implies that more entries are possible
PS C:\Windows\system32\CertSrv\en-US> certutil -v
Entry 0: (Local)
  Name:                         `Secure Issuer 01a-001'
  Organizational Unit:          `Email Privacy'
  Organization:                 `Bitclear LLC'
  Locality:                     `'
  State:                        `'
  Country/region:               `us'
  Config:                       `a.Issue01.bitclear.us\Secure Issuer 01a-001'
  Exchange Certificate:         `'
  Signature Certificate:        `a.Issue01.bitclear.us_Secure Issuer 01a-001.crt'
  Description:                  `'
  Server:                       `a.Issue01.bitclear.us'
  Authority:                    `Secure Issuer 01a-001'
  Sanitized Name:               `Secure Issuer 01a-001'
  Short Name:                   `Secure Issuer 01a-001'
  Sanitized Short Name:         `Secure Issuer 01a-001'
  Flags:                        `13'
  Web Enrollment Servers:
1
4
0
https://a.issue01.bitclear.us/Secure%20Issuer%2001a-001_CES_UsernamePassword/service.svc/CES
0
CertUtil: -dump command completed successfully.

每个 ADCS 主机是否可以托管多个 PKI?如何实现?

另外:我记得过去曾讨论过这种可能性,但我不确定是否已经实施。

去做:

当我使用自定义 CertFile 和新名称测试此理论时运行命令:

certutil -installcert [-f] [-gmt] [-seconds] [-v] [-config CAMachineName\CAName] [CACertFile]

这可能也与“PolicyServers”和“EnrollmentServers”可以使用此命令连接。将这些与核心 ADCS 实例分离的能力非常有趣,并且记录得非常清楚。

答案1

我的理解是,每个主机只能有一个 ADCS 实例,AD 林中最多可以有 3 个 CA。“\CA 名称”更多是关于 PKI 树的名称,不应与 MSSQL 配置中看到的 \INST1 类型实例混淆,我认为您可能正在考虑后者。

将 CA 分开保存是个好习惯,因为如果所有 CA 都在一台主机上,那么如果该主机受到威胁,则该主机上的所有 CA 都会受到威胁。

如果您的林中有多棵 PKI 树,您将会看到来自 certutil 的多个条目。

可以使用 Web 策略注册服务器分离注册策略服务器 - 这对于需要在外部颁发证书的 DMZ 环境很有用。

答案2

从技术上讲,一台服务器上不可能有多个 PKI 层次结构,而且从安全角度来看,这是一个坏主意,正如前面提到的那样(单点故障)。ADCS 角色与 AD 中的服务器身份相关联,因此更改层次结构的 DN 的唯一方法是删除该角色并重新开始。

就许可证而言,我认为离线根 CA 不需要任何特殊功能。从技术上讲,只要 CRL 和 AIA 端点匹配,您就可以在 Linux 主机上生成密钥材料,并将其从企业颁发 CA 发布到 AD 中。

相关内容