通常我们得到的SSL证书至少包含三个文件:
ca.pem:CA根证书
cert.pem:ca.pem签发的用户证书
cert.key:用户私钥
视情况可能还有中间CA的证书。
生成JKS文件需要用到Java中的keytool工具,用来生成KeyStore文件。而keytool需要P12格式,因而需要用到openssl将PEM转换为P12。P12同时包含了证书/私钥,通常由密码保护。openssl的pcs12命令参数如下:
![OpenSSL的PKCS12命令](http://www.meilongkui.com/wp-content/uploads/2019/07/openssl_pkcs12.png)
OpenSSL的PKCS12命令
我们可以利用该命令把PEM格式的证书和私钥转换成P12格式:
1 |
openssl pkcs12 -export -out cert.p12 -in cert.pem -inkey cert.key -passout pass:yourpassword |
请注意,我们所用的不是-certfile参数:
![使用OpenSSL将PEM格式转换为P12格式](http://www.meilongkui.com/wp-content/uploads/2019/07/openssl_pem_to_pkcs12-1-1024x75.png)
使用OpenSSL将PEM格式转换为P12格式
然后可以使用命令:
1 |
openssl pkcs12 -info -in cert.p12 |
来查看包含了证书和私钥的P12文件:
![使用OpenSSL查看P12文件](http://www.meilongkui.com/wp-content/uploads/2019/07/openssl_show_p12.png)
使用OpenSSL查看P12文件
之后,我们可以使用Java中的keytool工具:
![Java中的秘钥和管理工具:keytool工具](http://www.meilongkui.com/wp-content/uploads/2019/07/keytool.png)
Java中的秘钥和管理工具:keytool工具
来生成JKS文件:
1 |
keytool.exe -importkeystore -srckeystore cert.p12 -srcstoretype PKCS12 -srcstorepass yourpassword -destkeystore cert.jks -deststorepass yourpassword |
![使用keytool将p12文件转换为jks文件](http://www.meilongkui.com/wp-content/uploads/2019/07/keytool_p12_to_jks-1-1024x191.png)
使用keytool将p12文件转换为jks文件
其中的参数为:
![keytool的importkeystore参数](http://www.meilongkui.com/wp-content/uploads/2019/07/keytool_import_keystore.png)
keytool的importkeystore参数
请注意,keytool执行时的warning中的JCEKS(实际转换后变成了同时兼容JKS和JCEKS两种的格式)。
我们可以使用keytool的list参数查看JKS中的证书和秘钥:
1 2 |
keytool.exe -list -keystore cert.jks keytool.exe -list -rfc -keystore cert.jks |
![使用keytool的list参数查看JKS中的证书和秘钥](http://www.meilongkui.com/wp-content/uploads/2019/07/keytool_list.png)
使用keytool的list参数查看JKS中的证书和秘钥