Java 如何将SHA1证书作为PrivateKeyEntry类型而不是trustedCertEntry导入密钥库

Java 如何将SHA1证书作为PrivateKeyEntry类型而不是trustedCertEntry导入密钥库,java,cryptography,keystore,jks,x509certficiate2,Java,Cryptography,Keystore,Jks,X509certficiate2,我确实有一个Jks文件(key.Jks),其中有一个别名为abc的现有SHA1证书(server.cer)。证书已过期,我必须用我获得的新证书续订。上一个条目使用entrytypePrivateKeyEntry。我已删除了旧条目,并尝试使用keytool导入命令导入新证书。由于握手失败,始终将entrytype添加为trustedCertEntry。我使用的命令如下 keytool-import-keystore key.jks-storepass changeit-alias abc-file

我确实有一个Jks文件(key.Jks),其中有一个别名为abc的现有SHA1证书(server.cer)。证书已过期,我必须用我获得的新证书续订。上一个条目使用entrytypePrivateKeyEntry。我已删除了旧条目,并尝试使用keytool导入命令导入新证书。由于握手失败,始终将entrytype添加为trustedCertEntry。我使用的命令如下

keytool-import-keystore key.jks-storepass changeit-alias abc-file server.cer

如何将此证书添加为PrivateKeyEntry类型。我使用的别名与旧证书使用的别名相同。
任何备受赞赏的帮助

APrivateKeyEntry实际上是一对由三部分组成的“钥匙对”。私钥、公钥和证书。证书可以是自签名的,也可以由其他实体(可信证书颁发机构-CA)签名

trustedCertEntry仅是具有分配的公钥(无私钥)的证书

当证书过期时,您可以创建新的密钥对、证书签名请求(csr),当CA颁发新证书时,您可以导入证书回复

有时CA可能会为相同的公钥颁发新证书,因此您只需要导入回复

导入证书(回复)-第二部分实际上做得很好。如果导入证书且已有密钥对(PrivateKeyEntry),则密钥工具将检查证书是否与公钥匹配,然后用保留私钥的新证书替换旧证书


问题是您确实删除了私钥。我希望你有后援。如果没有,我建议创建一个新的密钥对并请求一个新的证书

谢谢你的回复。我有一个旧的备份文件。我可以尝试添加新的证书而不删除旧的证书吗?它是否会使用privateKeyEntry EntryType的新条目替换现有条目。@liam创建备份的副本并进行尝试。如果证书是为相同的密钥对生成的,那么是的,证书将被替换为相同的私钥。基本上,它不适用于现有证书的顶部。它将错误作为公钥进行回复,密钥库不匹配。因此CA已颁发新证书。你能不能给我一些指导链接,我应该如何继续在这种情况下。我是否也需要与客户端共享相同的公钥和证书?对不起,我对这个完全陌生process@Liam:如果新证书与旧密钥项不匹配,则CA不仅颁发了新证书,还为新密钥对和CSR颁发了新证书。如果您发送了CSR,那么您必须已经生成了新的密钥对——使用它。如果其他人发送了CSR,请从他们那里获取新的密钥对。此外,如果服务器回复尚未在服务器证书之后包含任何所需的链证书,请在导入之前将它们添加到回复中,或确保它们分别位于密钥库中(作为trustedCertEntry)。(需要什么样的连锁证书取决于您没有识别或描述的CA。)