2016-04-18 147 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 –