为了更新某些证书,我不得不将一个jks密钥库转换为PKCS#12密钥库并在转换过程中包含私钥。我们收到的密钥库是JKS密钥库,但是我们的Web服务器使用PKCS#12密钥库,并且我们收到的密钥库仅包含证书而没有私钥。
我试图在Google上搜索并阅读了SO的几个条目,只找到了一种解决方案,这似乎更像是一个变通方法而不是一个好的方法,因此我想知道是否有人有更好的方法来注入私钥并以更简单的方式从jks密钥库转换为PKCS#12密钥库。
看起来只有keytool可以操纵JKS密钥库,但是据我所知,keytool实用程序不支持将私钥注入trustedCertEntries,因此我使用的方法如下:
假设我有私钥作为pem文件。
1. 使用keytool从jks密钥库中提取所有证书。 2. 使用openssl创建PKCS#12密钥库。 3. 重命名使用keytool创建的PKCS12中的别名。 4. 再次使用openssl创建另一个PKCS#12密钥库。 5. 使用keytool重命名另一个创建的PKCS#12中的别名。 6. 使用keytool合并两个密钥库。 7. 导入非私钥证书。
因此,整个流程如下(如果需要):
我试图在Google上搜索并阅读了SO的几个条目,只找到了一种解决方案,这似乎更像是一个变通方法而不是一个好的方法,因此我想知道是否有人有更好的方法来注入私钥并以更简单的方式从jks密钥库转换为PKCS#12密钥库。
看起来只有keytool可以操纵JKS密钥库,但是据我所知,keytool实用程序不支持将私钥注入trustedCertEntries,因此我使用的方法如下:
假设我有私钥作为pem文件。
1. 使用keytool从jks密钥库中提取所有证书。 2. 使用openssl创建PKCS#12密钥库。 3. 重命名使用keytool创建的PKCS12中的别名。 4. 再次使用openssl创建另一个PKCS#12密钥库。 5. 使用keytool重命名另一个创建的PKCS#12中的别名。 6. 使用keytool合并两个密钥库。 7. 导入非私钥证书。
因此,整个流程如下(如果需要):
openssl pkcs12 -in orig.alias.p12 -nodes -nocerts -out key.pem -passin pass:PASSWORD
keytool -keystore keystore1 -storepass PASSWORD -list
keytool -keystore keystore1 -storepass PASSWORD -rfc -file alias.root.pem -alias "root" -exportcert
keytool -keystore keystore1 -storepass PASSWORD -rfc -file alias.ca3.pem -alias "ca3" -exportcert
keytool -keystore keystore1 -storepass PASSWORD -rfc -file alias.long.pem -alias "long" -exportcert
keytool -keystore keystore1 -storepass PASSWORD -rfc -file alias.short.pem -alias "short" -exportcert
openssl pkcs12 -export -out keystore.p12 -inkey key.pem -in alias.short.pem -passout pass:PASSWORD
keytool -changealias -alias "1" -destalias "short" -keypass PASSWORD -keystore keystore.p12 -storepass PASSWORD
openssl pkcs12 -export -out keystore2.p12 -inkey key.pem -in alias.long.pem -passout pass:PASSWORD
keytool -changealias -alias "1" -destalias "long" -keypass PASSWORD -keystore keystore2.p12 -storepass PASSWORD
keytool -importkeystore -srckeystore keystore2.p12 -srcstoretype pkcs12 -srcstorepass PASSWORD -destkeystore keystore.p12 -deststoretype pkcs12 -deststorepass PASSWORD
keytool -keystore keystore.p12 -storepass PASSWORD -file alias.ca3.pem -alias "ca3" -importcert -noprompt
keytool -keystore keystore.p12 -storepass PASSWORD -file alias.root.pem -alias "root" -importcert -noprompt
keytool -keystore keystore.p12 -storepass PASSWORD -list
比如说,如果我在导入私钥证书时就能设置别名,那么我就不需要之后再重命名别名了。这个可能吗?
无论如何,提前感谢。