术语表

JKS (Java KeyStore)

最后核实

定义

JKS 是 Java 早期默认的专有密钥库文件格式,用来存放私钥、证书链和受信任证书,通过 keytool 管理。

JKS(Java KeyStore)是 Java 9 之前默认使用的密钥库格式。密钥库里的条目按别名(alias)存放,分为私钥条目(私钥加对应的证书链)和受信任证书条目。同一种文件格式承担两种角色:keystore 存放服务端或客户端自己的身份,truststore 存放 Java 应用信任的 CA 证书。从 Java 9 开始默认类型改为 PKCS#12,keytool 也会提示 JKS 是专有格式,建议迁移。

为什么重要

Tomcat、Kafka、Elasticsearch、Spring Boot 等 Java 服务都通过 keystore、truststore 文件和密码来配置 TLS,大量存量系统仍在用 .jks。国内云厂商的 Tomcat 格式下载包里,常见的是 .jks 或 .pfx 文件加一个记录密码的文件。常见的"PKIX path building failed"报错,意思是 truststore 无法构建到受信任 CA 的证书链;服务端常见的问题则是私钥条目里缺少中间证书,桌面浏览器也许能容忍,其他客户端却会直接报错。

例子

keytool -importkeystore -srckeystore example.com.p12 -srcstoretype PKCS12 \
  -destkeystore example.com.jks -deststoretype JKS
keytool -list -v -keystore example.com.jks
keytool -importcert -alias internal-root -file root.crt -keystore truststore.jks

常见误区

  • Java 只能用 JKS。 现代 Java 原生支持并默认使用 PKCS #12。
  • keystore 和 truststore 是一回事。 格式相同,内容不同:一个放自己的私钥,一个放信任的 CA。
  • 只导入站点证书就够了。 私钥条目需要完整证书链,CA 回复要导入到持有私钥的那个别名下。

延伸阅读