【发布时间】:2019-04-20 16:08:14
【问题描述】:
是否可以更改密钥库中现有条目(私钥)的证书和证书链。据我了解,首先我需要删除现有条目,然后使用新证书和链存储相同的私钥。此解决方案不是一个选项,因为我不知道密钥库中该条目的密码。
目前的解决方案:
密钥生成和初始存储:
KeyPair kp = generateRSAKeyPair();
X509Certificate selfSignedCert = makeSelfSignedCert(kp);
ks.load(...);
ks.setKeyEntry("entry1", kp.getPrivate(), PASSWORD, new X509Certificate[]{selfSignedCert});
ks.store(...);
CA发送我想要的证书后:
ks.load(...);
ks.setCertificateEntry("entry1", caSignedCert);
ks.store(...);
主要问题是在将密钥存储到密钥库时我没有正确的证书。在生成密钥和 CA 发送签名证书之间存在延迟。
另一个选项是根本不设置证书,在 CA 签署 CSR 后,将最终签署的证书添加到密钥库。比如:
KeyPair kp = generateRSAKeyPair();
ks.load(...);
ks.setKeyEntry("entry1", kp.getPrivate(), PASSWORD);
ks.store(...);
// after some time
ks.load(...);
ks.setCertificateEntry("entry1", caSignedCert);
ks.store(...);
但是我找不到在密钥库中没有关联证书的情况下存储私钥的方法。将私钥存储在其他地方也不是一种选择。
一个潜在的解决方案是存储来自 CA 的签名证书,直到用户提供密钥库条目的密码,然后删除现有条目并使用适当的证书创建新条目。这个解决方案并不理想,我想避免走这条路。
欢迎提出任何建议。
【问题讨论】:
-
I don't know the password for that entry in keystore我相信你需要一个密钥密码来替换密钥对证书