2011-06-06 145 views
5

我有需要密钥库的java代码,并且我有privateKey.pem和bank.cer文件。私钥将签署一份价值银行和bank.cer来验证银行的回应。我找不到一种方法将它们放入密钥库,以便我的代码可以正常工作。从私钥和公钥创建密钥库

可以用keytool来完成吗?

+0

我认为如果您能提供您迄今为止所尝试的,这将是一件好事。 – musiKk 2011-06-06 14:02:39

+0

我已经尝试导入keytool,但它导入为trustedCertEntry,但我希望它是一个privateKeyEntry。还尝试了一个名为ktl241的java程序,它说java.lang.Exception:obj:导入私钥pem时不是X509Certificate的实例。还尝试了谷歌的顶级搜索结果。 – ivar 2011-06-07 06:00:32

+2

我曾经写过一篇关于如何做到这一点的博客文章。也许它有帮助:http://quakology.blogspot.com/2009/06/how-to-use-ssl-with-client-certificate.html – musiKk 2011-06-07 07:01:57

回答

13

从我的理解中,不可能单独使用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 

这种方法对我来说一切都失败了。

+2

要列出密钥库的私钥条目中的整个链,可以将证书链的几个.pem文件放在一起,然后使用openssl的'-certfile'选项将它们添加到pkcs-store。 – Andy 2012-10-09 12:12:40

+0

这对我有效。但是,我必须确保始终使用相同的密码;我以为我可以使用临时密码来编写和读取PKCS12,并且只给* key *作为'keytool'的输出,但是它创建了一个密钥库,其中密钥库和密钥具有不同的密码,这显然非常糟糕(http ://joewlarson.com/blog/2009/03/25/java-ssl-use-the-same-password-for-keystore-and-key/)。 – Blaisorblade 2015-05-11 18:41:01

+0

@ musiKk的解决方案在为我创建PKCS12文件时稍作修改,设置密码,否则以后的keytool命令会出现错误。 openssl pkcs12 -inkey key -in cert -export -out keys.pkcs12 -passout pass:yourpasswd – 2016-08-20 03:13:50