我正在寻找一个解决scheme,从EJBCA实例中提取CA,把它放在一个外部驱动器,例如安全保pipe。 所以我只保留子ca在EJBCA实例中签署最终用户证书。
那么当我需要再次生成一个sub-ca或者撤销一个已经创build的sub-ca的时候,我只会把它放回去。
这样,我可以确保即使我的服务器受到攻击,我确信只有剩余的子networking受到攻击,但是我的根CA仍然有效。
有没有办法做这样的事情?
谢谢。
让根CA脱机是一个完善的安全策略,所以这是一个非常好的开始。 但是如果你希望它完全独立,你不应该首先在同一台服务器上build立根CA和子CA,然后删除根CA–相反,你应该从头开始单独设置它们,需要经过任何额外的努力来分开它们。 我将在下面列出几个关于它的方法,还有一种方法是只要锁住钥匙,同时保持实际的CA在同一个地方。
最安全的方法是把钱扔在问题 – 即获得一个单独的服务器的根CA. 在该服务器上创build根CA. 然后转到要运行颁发CA的服务器,并在该服务器上创build子CA。 让根CA签署子CA; 有关EJBCA用户指南中有关如何执行此操作的信息。 一旦完成,您可以locking与根CA的服务器。
第二种方法是有一个单独的EJBCA / JBoss实例和数据库(通常是MySQL),其中所有数据都存储在可移动磁盘上。 好处是你没有额外的服务器。 缺点是增加了一些复杂性 – 你需要单独的configuration文件和systemd启动configuration/ init文件,等等。 但是基本上就像使用单独的服务器一样,除了closures整个服务器之外,您可以closuresJBoss和数据库实例,卸载数据所在的磁盘,然后将磁盘locking。
您可以将根CA与颁发CA(s)一起保留,但删除其私钥。 这实际上是削弱了它 – 它在那里,但它不能签署任何东西,所以它不能被滥用。 这是最便宜的方法,而且在使用root-CA时也更容易。 请在第一次testing之前进行备份!
以下所有步骤都是从命令行完成,而不是从Web GUI完成。 你可以从GUI中完成一些操作,但是你仍然需要访问实际的服务器来移动东西,所以我觉得在这里做所有的事情都比较容易。
$ bin / ejbca.sh ca exportca TestCA /mnt/USBDrive/TestCA.p12 使用JBoss JNDI提供者... input密钥库密码:YourVeryGoodPassword
卸下USB驱动器并将其locking在保险柜中。
从服务器上删除密钥库
$ bin / ejbca.sh ca removekeystore TestCA 使用JBoss JNDI提供者...
如果您现在查看GUI,您将看到TestCA处于脱机状态,无法激活。
$ bin / ejbca.sh ca restorekeystore TestCA /mnt/USBDrive/TestCA.p12 -s SignatureKeyAlias -e EncryptionKeyAlias 使用JBoss JNDI提供者... input密钥库密码:YourVeryGoodPassword $
当然你也可以像第三步一样去除密钥存储,一旦你完成了你正在做的任何事情。