2016-04-18 142 views
1

我在下面的方式通過OpenSSL的生成密鑰對導入現有的私有密鑰到密鑰存儲BKS

的OpenSSL genrsa -out private_key.pem 2048

的我將其轉換爲DER格式遵循

OpenSSL的PKCS8 -topk8 -inform PEM -outform DER -in private_key.pem \ 退房手續private_key.der -nocrypt

現在我想在android中導入它,但我不想導入它,因爲它想保護它在密鑰庫中。

所以我的問題是如何使用keytool將現有密鑰導入BKS密鑰庫?

由於

回答

2

Private Key總是伴隨着一個Certificate Chain(包括相應的證書)的密鑰庫中。你不能僅僅將它自己添加到KeyStore中。

生成Private Key後,您可以生成自簽名證書,然後可以使用此證書將您的私鑰和證書一起添加到KeyStore中。

生成自簽名證書

OpenSSL的REQ -new -x509 - 鍵[PRIVATE_KEY_FILE] -out [SELF_SIGNED_CERTIFICATE_FILE] -days 3650 -subj/[YOUR_SUBJECT_DN]

創建包含PrivateKey和證書的PKCS#12文件

OpenSSL的PKCS12 -export -inkey [PRIVATE_KEY_FILE] -in [CERTIFICATE_FILE] -out [PKCS12_FILE.p12] -name的myKey

最後,轉換PKCS12密鑰庫到所需BKS商店類型

密鑰工具-importkeystore -srckeystore [ABOVE_P12_FILE] -srcstorepass [ABOVE_P12_PASSWORD] -srcstoretype PKCS12 -destkeystore [NEW_P12_FILE.p12] -deststorepass [NEW_P12_PASSWORD] -deststoretype BKS -providerclass org.bouncycastle.jce.provider.Bou ncyCastleProvider -providerpath [ABSOLUTE_PATH_TO__bcprov-jdk15on-152.jar]

如果您需要Java默認存儲類型JKS,您可以從最後的命令刪除-providerclass-providerpath參數。

+0

好吧,我明白了,但現在用PKCS#12文件,我該如何讀取java中的私鑰? – RdlP

+1

你可以參考這個 - http:// stackoverflow。com/questions/150167/how-do-i-list-export-private-keys-from-a-keystore and http://www.java2s.com/Code/Java/Security/RetrievingaKeyPairfromaKeyStore.htm –