【问题标题】:Java keytool: Inserting a private key into an X.509 certificateJava keytool:将私钥插入 X.509 证书
【发布时间】:2011-07-09 15:20:51
【问题描述】:

Java 的 keytool 是否能够导出带有私钥的 X.509 证书?

我正在考虑用户生成证书(其中包含私钥)并将其提供给签名工具的场景。签名工具使用证书中的私钥对目标文件进行签名。最终,私钥从证书中移除,并将证书附加到目标文件以进行分发。

【问题讨论】:

标签: java key private keytool x509


【解决方案1】:

我还不能发表评论,所以我将使用此表单: 通常使用 PKCS #12 http://en.wikipedia.org/wiki/PKCS#12 来存储带有私钥的证书。此外,可以将公钥/私钥对存储在 PCKS #8 容器中并单独发送证书。

如果您有兴趣,我想我有一些用于 PKCS #12 存储的 java 代码示例。

此外,开源 Java 证书颁发机构 EJBCA (http://www.ejbca.org/) 是一个很好的示例来源。

【讨论】:

  • 因为我仍然无法发表评论,所以我想补充一点:您引用的证书创建工具不会创建包含私钥的 x.509 证书,但是,它会创建一个专有的未受保护的 *. snk 文件包含证书和私钥。他们也建议使用容器来存储证书和密钥。
  • 知道了。阅读 PKCS#12 让我意识到这将是密钥库文件(例如 Java 密钥库)使用的格式,它允许将私钥和证书对存储在同一个文件中。感谢您的答复。我将在您之前回复中引用的网站上阅读更多相关信息。
【解决方案2】:

生成的私钥绝不会为任何目的被他人使用或共享。 我知道的签名工具会使用他们自己的私钥来生成他们的签名来证明你的公钥。例如您使用 keytool 生成密钥对并将 CSR 提交给 CA。 CA 将使用他们自己的 pvt 密钥在您的证书上加盖他们的签名。

【讨论】:

  • 名为 PEM,包含私钥和公钥的文件
【解决方案3】:

keytool(命令行可执行文件)没有导出私钥的选项。但是您可以使用 JSA-API 以编程方式执行此操作(但尚未尝试过)。

【讨论】:

    【解决方案4】:

    密钥及其签名证书通常存储在密钥库容器中,例如 PKCS12 或 Java 的 JKS。还可以将证书和密钥提取到 PEM 格式文件中,以便在 Apache HTTPD 等应用程序中使用。

    要从 JKS 文件中提取证书和密钥,需要在使用 openssl 提取证书之前将其转换为 PKCS12 格式文件:

    keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.pkcs12 -deststoretype pkcs12
    openssl pkcs12 -in keystore.pkcs12 -out mycert.crt -nokeys
    openssl pkcs12 -in keystore.pkcs12 -out mykey.key -nocerts
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-16
      • 2014-11-16
      • 1970-01-01
      • 2013-01-31
      • 1970-01-01
      • 2020-01-25
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多