You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从X509证书生成双向SSL的Java Keystore与Truststore

用keytool生成双向SSL所需的Keystore与Truststore

前提说明

你已经通过OpenSSL生成了以下文件:

  • 根CA:cacert.crt(证书)、root_key.pem(私钥)
  • 客户端:client_cert.crt(证书)、client_key.pem(私钥)
  • 服务端:server_cert.crt(证书)、server_key.pem(私钥)
    所有客户端/服务端证书均由根CA签名。

核心概念

  • Keystore:存储自身的证书和私钥,用于SSL握手时向对方证明身份。
  • Truststore:存储需要信任的证书(或CA证书),用于验证对方的身份。

一、生成服务端的Keystore与Truststore

1. 创建服务端Keystore

keytool无法直接导入PEM格式的私钥,需先通过OpenSSL将服务端私钥+证书转换为PKCS12格式,再导入JKS(或直接使用PKCS12作为Keystore):

步骤1:转换为PKCS12文件

openssl pkcs12 -export -in server_cert.crt -inkey server_key.pem -out server.p12 -name server-alias

执行时需设置PKCS12文件的密码(后续操作会用到)。

步骤2:转换为JKS格式(可选,若直接用PKCS12可跳过)

keytool -importkeystore -srckeystore server.p12 -srcstoretype PKCS12 -destkeystore server.jks -deststoretype JKS

输入源PKCS12的密码,再设置JKS文件的密码。

2. 创建服务端Truststore

双向SSL中,服务端需要验证客户端身份,按你的需求导入客户端证书:

keytool -import -alias client-cert -file client_cert.crt -keystore server-truststore.jks
  • 设置Truststore的密码
  • 提示是否信任该证书时,输入yes确认

补充优化:更规范的做法是导入根CA证书到Truststore,而非单个客户端证书。这样所有由根CA签名的客户端证书都能被服务端信任,适合多客户端场景:

keytool -import -alias root-ca -file cacert.crt -keystore server-truststore.jks

二、生成客户端的Keystore与Truststore

1. 创建客户端Keystore

同服务端步骤,先转换客户端私钥+证书为PKCS12:

步骤1:转换为PKCS12文件

openssl pkcs12 -export -in client_cert.crt -inkey client_key.pem -out client.p12 -name client-alias

设置PKCS12文件密码。

步骤2:转换为JKS格式(可选)

keytool -importkeystore -srckeystore client.p12 -srcstoretype PKCS12 -destkeystore client.jks -deststoretype JKS

输入源密码和目标JKS密码。

2. 创建客户端Truststore

客户端需要验证服务端身份,按你的需求导入服务端证书:

keytool -import -alias server-cert -file server_cert.crt -keystore client-truststore.jks
  • 设置Truststore密码
  • 提示信任时输入yes

补充优化:同样推荐导入根CA证书,这样所有由根CA签名的服务端证书都能被客户端信任:

keytool -import -alias root-ca -file cacert.crt -keystore client-truststore.jks

内容的提问来源于stack exchange,提问作者Anas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 02:00:38