通常我们得到的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命令
我们可以利用该命令把PEM格式的证书和私钥转换成P12格式:
1 |
openssl pkcs12 -export -out cert.p12 -in cert.pem -inkey cert.key -passout pass:yourpassword |
请注意,我们所用的不是-certfile参数:

使用OpenSSL将PEM格式转换为P12格式
然后可以使用命令:
1 |
openssl pkcs12 -info -in cert.p12 |
来查看包含了证书和私钥的P12文件:

使用OpenSSL查看P12文件
之后,我们可以使用Java中的keytool工具:

Java中的秘钥和管理工具:keytool工具
来生成JKS文件:
1 |
keytool.exe -importkeystore -srckeystore cert.p12 -srcstoretype PKCS12 -srcstorepass yourpassword -destkeystore cert.jks -deststorepass yourpassword |

使用keytool将p12文件转换为jks文件
其中的参数为:

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中的证书和秘钥