我正在寻找 EJBCA 用于生成私钥的一般方法(CA、Sub-Ca、证书……)。
比如说,您想要 RSA 2048 密钥大小。生成过程是否全部在 EJBCA 应用程序中完成?它们是否依赖于基于 Java EE 的应用程序服务器随机生成(在我的情况下是 Jboss)?是否存在与本地实现的随机数生成的链接,例如在 Linux /dev/(u)random 上?
熵的水平是多少?他们能保证吗?
答案1
我从 EJBCA 邮件列表中获得了答案,并且还在源代码中获取了信息。
也许它可以对其他人有所帮助,所以我将答案粘贴在这里。
EJBCA 生成私钥所使用的底层方法是通过 Java 类 java.util.Random 和类 java.security.SecureRandom。
在 EJBCA 代码中,密钥由 CryptoTokenManagementSessionBean 类中的 createCryptoToken 方法生成,该方法使用文件 modules/cesecore-ejb/src/org/cesecore/keys/token/CryptoTokenManagementSessionBean.java 中的 SecureRandom()
最后,OpenJDK SecureRandom 实现使用 /dev/random。因此,总熵就是 /dev/random 的熵。有很多方法可以改善它的熵池。一种解决方案是使用硬件令牌。
注意:这里它仅适用于没有 HSM 的系统(在这种情况下密钥是在 HSM 中生成的,因此它依赖于 HSM)并且在 Linux 上运行(并且很可能在具有 /dev/random 的系统上,因此是 BSD 系列)。