如何从cert等.pem文件生成JKS密钥库?是否需合并所有证书到同一库?
关于PEM证书转换为JKS密钥库的常见问题解答
是否需要将所有PEM文件导入同一个JKS
不需要全部导入,可根据你手头的文件二选一操作即可:
- 如果你已有
fullchain.pem:仅需将privkey.pem(客户端私钥)和fullchain.pem(已包含客户端证书+中间证书链的完整链)导入同一个JKS的同一个密钥条目即可,无需重复导入cert.pem和chain.pem - 如果你没有
fullchain.pem:需要将privkey.pem+cert.pem(客户端终端证书) +chain.pem(中间证书链)按顺序导入同一个JKS的同一个密钥条目
特别注意:私钥和对应的证书链必须绑定到同一个密钥条目下,拆分存储到不同JKS会导致TLS双向认证握手失败
如果目标服务端使用的是自签名证书、或者私有CA签发的未被JDK默认信任库收录的证书,你可以选择:
- 将服务端根证书/自签名证书导入上述同一个JKS的信任证书条目
- 单独生成一个信任库存放服务端证书,运行程序时通过
javax.net.ssl.trustStore参数单独指定,和客户端密钥库分开存储也可正常使用
具体转换步骤(官方操作流程翻译)
JDK原生keytool无法直接导入PEM格式的私钥,需要先转换为PKCS12格式作为中间层:
- 生成PKCS12格式证书包
openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out client.p12 -name client-cert
执行时按照提示设置PKCS12文件的保护密码,后续步骤需要使用该密码
2. 将PKCS12文件转换为JKS格式
keytool -importkeystore -srckeystore client.p12 -srcstoretype PKCS12 -destkeystore client.jks -deststoretype JKS
执行时依次输入源PKCS12的密码、目标JKS的存储密码即可
3. (可选)导入服务端自签名证书到JKS信任库
keytool -import -alias server-root -file server-cert.pem -keystore client.jks
内容的提问来源于stack exchange,提问作者user1354825
相关产品推荐
相关产品推荐

