PKI EJBCA:从 EJBCA 实例中提取 CA,仅保留子 CA

PKI EJBCA:从 EJBCA 实例中提取 CA,仅保留子 CA

我正在寻找一种解决方案,从 EJBCA 实例中提取 CA,将其放在外部驱动器上,例如存放在保险箱中。因此,我只保留用于在 EJBCA 实例中签署最终用户证书的子 CA。

然后,只有当我需要再次生成子 CA 或撤销已创建的子 CA 时,我才会将其放回去。

这样,我可以确保即使我的服务器受到威胁,我也确信只有剩余的子 ca 受到威胁,但我的根 ca 仍然有效。

有没有什么办法可以解决这样的问题?

谢谢。

答案1

让根 CA 处于离线状态是一种合理的安全策略,因此这是一个很好的开始。但是,如果您希望它们完全分开,则不应先在同一台服务器中构建根 CA 和子 CA,然后删除根 CA - 相反,您应该从一开始就单独设置它们,这样您就不需要付出任何额外的努力来分离它们。我将在下面列出几种方法,以及一种将密钥锁定同时将实际 CA 保存在同一位置的方法。

1 – 完全独立的服务器

最安全的方式是花钱解决问题 - 即为根 CA 单独设置一个服务器。在该服务器上创建根 CA。然后转到您将在其上运行颁发 CA 的服务器,并在该服务器上创建子 CA。让根 CA 签署子 CA;信息位于EJBCA 用户指南如何执行此操作。完成后,您可以使用根 CA 锁定服务器。

2 - 独立磁盘

第二种方法是拥有一个单独的 EJBCA/JBoss 实例和数据库(通常是 MySQL),其中所有数据都存储在可移动磁盘上。优点是您不需要额外的服务器。缺点是增加了现有服务器的复杂性 - 您需要单独的配置文件和 systemd 启动配置/初始化文件等等。但您基本上可以像使用单独的服务器一样进行操作,只是您不是关闭整个服务器,而是关闭 JBoss 和数据库实例,卸载其数据所在的磁盘,然后锁定磁盘。

3 - 移除钥匙而不是磁盘/服务器

您可以将根 CA 与颁发 CA 保留在一起,但删除其私钥。这实际上是在削弱它 - 它在那里,但它无法签署任何东西,因此不会被滥用。这是最便宜的方法,而且当您使用根 CA 时,它也使事情变得更容易。第一次测试之前请务必进行备份!

下面的所有步骤都是通过命令行而不是通过 Web GUI 完成的。您可以从 GUI 执行部分操作,但您仍需要访问实际服务器才能移动内容,因此我发现从那里开始执行所有操作更容易。

  1. 将根 CA 密钥导出到 PKCS#12 文件
$ bin/ejbca.sh ca 导出 TestCA /mnt/USBDrive/TestCA.p12
使用 JBoss JNDI 提供程序...
输入密钥库密码:YourVeryGoodPassword
  1. 卸载 USB 驱动器并将其锁在保险箱中。

  2. 从服务器中删除密钥库

$ bin/ejbca.sh ca removekeystore TestCA
使用 JBoss JNDI 提供程序...

如果您现在查看 GUI,您会发现 TestCA 处于离线状态并且无法激活。

  1. 当您想要再次使用根 CA 时,请导入密钥库:
$ bin/ejbca.sh ca restorekeystore TestCA /mnt/USBDrive/TestCA.p12 -s SignatureKeyAlias -e EncryptionKeyAlias
使用 JBoss JNDI 提供程序...
输入密钥库密码:YourVeryGoodPassword
$

当然,一旦完成您正在做的一切,就按照步骤 3 再次删除密钥库。

相关内容