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

标签 java ssl keytool jks

是否可以使用 keytool 或等效工具在 .JKS keystore 中重新生成私钥?

我已获得证书和 JKS keystore ,但在导入证书时,用于生成 CSR 的私钥似乎已被删除。

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

最佳答案

不,这就是非对称密码学的全部要点:在只知道公钥(包含在 CSR 和证书中)的情况下无法生成私钥。

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

如果您丢失了私钥,您只需创建一个新的 key 对,提交一个新的 CSR 并获得一个新的证书。一些 CA 在初始证书的有效期内允许将这种免费的 key 更新作为其契约(Contract)的一部分。


编辑:只是为了阐明什么是 CSR。

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

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

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

拥有没有私钥的 CSR 或证书是没有用的。您可以很容易地再次创建一个新的 CSR,但您还需要创建一个新的 key 对。 CSR 中最重要的部分是公钥,并且要有匹配的私钥。否则您可以丢弃 CSR。

关于java - Tomcat/JKS/Keytool - 重新生成私钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12094986/

相关文章:

java - 为图像拖动动画

java - 如何从 JavaScript 调用 Java 实例的方法?

java - JOptionPane.showMessageDialog 后不显示背景图像

java - Swing - MaskFormatter - 从文本字段的右侧输入数字

java - 如果不重新启动 Firefox, keystore 不会刷新

spring - Apache CXF JaxWsProxyFactoryBean SSL 配置调用外部 https 失败

asp.net - IIS 7 禁用 "Require SSL"

ssl - nginx 通配符 ssl 配置

wordpress - 在哪里为免费域创建SSL证书

java - 新手 keytool 命令——如何更新已添加到 keystore 的证书?