【问题标题】:Creating a keystore from private key and a public key从私钥和公钥创建密钥库
【发布时间】:2011-06-06 12:32:16
【问题描述】:

我有需要密钥库的 java 代码,并且我有 privateKey.pem 和 bank.cer 文件。私钥将向银行和 bank.cer 签署一个值,以验证银行的响应。我找不到将它们放入密钥库的方法,因此我的代码可以正常工作。

可以用keytool完成吗?

【问题讨论】:

  • 我认为如果你能提供你迄今为止尝试过的东西会很好。
  • 我尝试使用 keytool 导入,但它作为trustedCertEntry 导入,但我希望它是 privateKeyEntry。还尝试了一个名为 ktl241 的 java 程序,它说 java.lang.Exception: obj: not an instance of X509Certificate when importing private key pem。还尝试了 google 的热门搜索结果。
  • 我曾经写过一篇关于如何做到这一点的博客文章。也许有帮助:quakology.blogspot.com/2009/06/…
  • 感谢您的回答,但没有成功。没有证书与私钥匹配。我的 pem 只包含私钥

标签: java keystore pem


【解决方案1】:

据我了解,单独使用 keytool 是不可能做到这一点的。我使用openssl 进行准备。

假设密钥在文件key 中,证书在文件cert 中。您必须创建一个包含两者的 PKCS12 文件(因为 keytool 可以处理 PKCS12 和 JKS,我不知道是否还有其他内容):

openssl pkcs12 -inkey key -in cert -export -out keys.pkcs12

现在您可以将其导入密钥库:

keytool -importkeystore -srckeystore keys.pkcs12 -srcstoretype pkcs12 -destkeystore mykeystore

这种方法对我有用,其他方法都失败了。

【讨论】:

  • 要在 keystore 的 private-key-entry 中列出整个链,您可以将证书链的几个 .pem 文件组合在一起,并使用 openssl 的 -certfile 选项将它们添加到 pkcs-store。
  • 这对我有用。但是,我必须确保始终使用相同的密码;我以为我可以使用临时密码编写和读取 PKCS12,并且只为 keytool 的输出提供 real 一个,但这创建了一个密钥库,其中密钥库和密钥具有不同的密码,这显然非常糟糕(joewlarson.com/blog/2009/03/25/…)。
  • @musiKk 的解决方案对我有用,在创建 PKCS12 文件时稍作更改,设置密码,否则后面的 keytool 命令会出错。 openssl pkcs12 -inkey key -in cert -export -out keys.pkcs12 -passout pass:yourpasswd
最近更新 更多