2011-06-06 143 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