9.6. 克隆已重新密钥的 CA
当证书过期时,必须替换它。这可以通过续订证书来完成,该证书可重新使用原始密钥对来生成新证书,或者通过生成新的密钥对和证书来完成。第二种方法称为 re-keying。
当 CA 重新密钥时,新密钥对存储在其证书数据库中,它们是正常操作的密钥引用。但是,对于克隆子系统,克隆过程会检查存储在其 CS.cfg
配置文件中的 CA 私钥 ID - 和这些密钥 ID 在证书数据库密钥更改时不会更新。
如果 CA 已重新密钥,然后管理员尝试克隆它,克隆的 CA 无法为重新密钥的证书生成任何证书,并在错误日志中显示出错信息:
CertUtil::createSelfSignedCert() - CA private key is null!
CertUtil::createSelfSignedCert() - CA private key is null!
克隆已重新密钥的 CA:
在
CS.cfg
文件中查找所有私钥 ID。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 打印存储在 NSS 数据库中的所有当前私钥 ID,并将其与存储在
CS.cfg
文件中的私钥 ID 进行比较:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,只有审计签名密钥是相同的,其他密钥已更改。
使用上一步中返回的密钥,将其从未签名值(即
certutil
返回)转换为签署 Java BigIntegers (这是如何在证书系统数据库中存储的密钥)。这可以通过计算器或使用 例 9.1 “certutil 到 BigInteger 转换程序” 中的脚本完成。
将新密钥值复制到
CS.cfg
文件中。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 克隆 CA,如 第 9.2 节 “克隆 CA” 所述。
例 9.1. certutil 到 BigInteger 转换程序
此 Java 程序可以将密钥输出从 certutil
转换为所需的 BigInteger 格式。
将它保存为 .java
文件,如 Test.java
。
然后编译该文件:
javac Test.java
# javac Test.java