Tomcat / JKS / Keytool - 重新生成私钥?

时间:2012-08-23 15:20:22

标签: java ssl keytool jks

是否可以使用keytool或同等产品在.JKS密钥库中重新生成私钥?

我已经提供了证书和JKS密钥库,但是在导入证书时,看起来已经删除了用于生成CSR的私钥。

我可以看到如何使用新的私钥创建新的密钥库,但这不会与CSR或证书匹配。

3 个答案:

答案 0 :(得分:4)

不,这就是非对称加密的重点:当只知道公钥(包含在CSR和证书中)时,无法生成私钥。

如果您只能从CSR或证书重新生成私钥,则任何人都可以冒充已颁发证书的实体。

如果您丢失了私钥,则只需创建新的密钥对,提交新的CSR并获取新证书即可。一些CA允许在初始证书期间免费将这种重新键入作为合同的一部分。


编辑:只是为了澄清CSR是什么。

要申请X.509证书,您必须:

  • 生成公钥/私钥对。本质上,公钥可以公开发布,因为它不足以获取私钥(至少在合理的时间内不足)。
  • 将包含您的身份信息的公钥提交给证书颁发机构。这可以使用:
    • 证书签名请求(CSR,PKCS#10),其中包含您的公钥和您希望在证书中的数据(例如您想要的主题DN)。尽管与证书中的数据非常相似,但CA应主要使用此数据来识别请求本身,因为正确执行其工作的CA应检查它们在证书中的内容,而不是盲目地将CSR转换为证书。使用与证书中的公钥匹配的私钥对CSR本身进行签名。它实际上非常类似于自签名X.509证书(没有发行人信息和有效日期),但不是一个。
    • 用于浏览器内证书申请的SPKAC或CRMF。
  • CA然后获取此CSR(或等效的)并在此过程之外进行必要的验证,以审核其要嵌入您的证书中的信息,并颁发您的证书(通过使用自己的私钥对其进行签名)。它有效地保证了您的公钥(从CSR中提取)与其嵌入证书中的信息(例如您的名称和/或此证书所在的域名)之间的绑定。它会将此证书发回给您。

然后,您必须将此证书与匹配其公钥的私钥一起使用。有些工具使用单独的文件执行此操作,也可以将证书导入密钥库中的私钥条目。

拥有CSR或没有私钥的证书是没有用的。您可以轻松地再次创建新的CSR,但您还需要创建一个新的密钥对。 CSR最重要的部分是公钥,并具有匹配的私钥。否则你可以丢弃CSR。

答案 1 :(得分:0)

  

是否可以使用keytool或同等产品在.JKS密钥库中重新生成私钥?

是的,但重新生成私钥和CSR。 CSR将提交给CA,您将在其中获得新的公钥。

  

您可以使用以下命令随时重新导入密钥库:

keytool.exe" -import -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -file .\certificate.cer

确保您还将证书导入到新JDK版本的两个路径中:

C:\ Program Files \ Java \ jdk1.6.0_31

较新的版本还部署了一个单独的JRE:

C:\ Program Files \ Java \ jre6

如果不这样做,可能会在日志中导致以下异常:

Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

要重新生成私钥和CSR,可以使用以下命令:

$ openssl req -new -newkey rsa:2048  -nodes -keyout private.key -out signing request.csr -config openssl.conf

答案 2 :(得分:0)

我遇到了同样的麻烦(我的私钥被意外地从密钥库中删除)并且只有一种方法可以恢复它:用备份替换密钥库文件(* .jks)。因此,我建议始终使用与SSL相关的所有文件进行备份,如果在密钥库中错误地删除了任何内容,只需将文件替换为较旧的文件即可。