将现有私钥导入BKS密钥库

时间:2016-04-18 07:46:34

标签: java android security rsa keytool

我有一个由openssl以下列方式生成的密钥对

  

openssl genrsa -out private_key.pem 2048

我将其转换为DER格式,如下所示

  

openssl pkcs8 -topk8 -inform PEM -outform DER -in private_key.pem \   -out private_key.der -nocrypt

现在我想在android中导入它,但我不想导入它,因为我想在密钥库中保护它。

所以我的问题是如何使用keytool将现有密钥导入BKS密钥库?

由于

1 个答案:

答案 0 :(得分:5)

Private Key始终伴随着KeyStore中的Certificate Chain(包括相应的证书)。您不能仅仅将它自己添加到KeyStore。

生成Private Key后,您可以生成自签名证书,然后可以使用此证书将您的私钥与证书一起添加到KeyStore。

生成自签名证书

  

openssl req -new -x509 -key [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 KeyStore转换为您想要的BKS商店类型

  

keytool -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.BouncyCastleProvider -providerpath   [ABSOLUTE_PATH_TO__bcprov-jdk15on-152.jar]

如果您需要Java默认存储类型JKS,则可以从上一个命令中删除-providerclass-providerpath个参数。