本文目录导读:

- JDK 8 及更早版本(传统 API)
- JDK 9 引入了若干改进(2017年)
- JDK 11(LTS,2018年)
- JDK 14 开始重大变更(2020年)
- JDK 17(LTS,2021年)
- JDK 21 及之后(2023年+)
- 重要趋势(非直接 API 变更,但影响使用)
截至2025年5月,Java 证书管理相关的 API 经历了多次演变,具体取决于你使用的 JDK 版本,以下是关键版本的总结:
JDK 8 及更早版本(传统 API)
- 核心类:
java.security.cert包下的CertificateFactory、X509Certificate、CertPath、CertPathValidator等。 - 密钥库管理:
java.security.KeyStore。 - 特点: API 设计较老,对现代 TLS 特性(如 OCSP Must-Staple、证书透明度)支持较弱。
JDK 9 引入了若干改进(2017年)
java.security.cert包新增了一些方法:X509Certificate增加了对 OCSP(在线证书状态协议)响应的解析方法。KeyStoreAPI 小幅更新: 增加了对 PKCS12(公钥密码标准 #12)更严格的支持(作为默认密钥库格式)。- TLS 层面: 底层 SSL/TLS 实现开始支持更多扩展(Certificate Transparency, CT),但 API 层面变化不明显。
JDK 11(LTS,2018年)
CertificateRevokedException增强: 允许获取撤销原因。KeyStore更新: 对PKCS12格式的内部处理进行了重构,提高了安全性和兼容性。
JDK 14 开始重大变更(2020年)
- 移除底层 SunX509 提供程序的部分实现: 这不会影响
java.security.certAPI,但会影响KeyFactory和CertificateFactory的某些内部实现细节。 java.security.cert.CertificateFactory新增方法: 某些版本中增加了对导入 PEM(隐私增强邮件格式)格式证书的更好的支持(通过InputStream)。
JDK 17(LTS,2021年)
java.security.cert.CertificateRevokedException持续改进: 支持更多撤销数据。PKCS12KeyStore成为默认:KeyStore实例化时默认使用PKCS12,这影响证书和私钥的存储读取方式。CertPathBuilder和CertPathValidatorAPI 更新: 新增了getAlgorithmParameters()等方法,便于获取验证参数。
JDK 21 及之后(2023年+)
CertificateFactory支持PEM直接生成: 虽然以前也可以通过ByteArrayInputStream处理 PEM,但现在官方文档明确支持直接从 PEM 格式的InputStream生成X509Certificate对象。HttpClient与证书管理集成: 虽然没有直接修改java.security.cert包,但新HttpClient的SSLParameters支持更细粒度的证书验证回调。KeyStore沙箱化: 对KeyStore的访问引入了更严格的安全限制,特别是在模块化系统(JPMS,Java平台模块系统)中。CertPathValidator: 增加了对现代撤销机制(如 OCSP 签名委托)的更好支持。
重要趋势(非直接 API 变更,但影响使用)
- 默认证书库更新: Oracle 和 OpenJDK 自建了
cacerts信任库,不再完全依赖系统根证书,API 对应的TrustManagerFactory和KeyManagerFactory行为有所调整(默认使用PKIX算法)。 - 为抗量子密码做准备: JDK 21+ 在底层开始引入混合密钥封装机制(ML-KEM),虽然证书 API 本身未变,但未来的
CertificateFactory和KeyStore可能需要处理更复杂的密钥类型。
是的,Java 证书管理 API 在持续“小步快跑”式升级,而不是一次性的“大版本升级”。 如果你是开发者,最新重要的变化集中在:
KeyStore完全转向 PKCS12。CertificateFactory对 PEM 的更好支持。CertPathValidator对现代撤销链处理的改进。- 模块化系统带来的访问限制。
如果你遇到了具体问题(如代码在 JDK 8 正常但在 JDK 21 报错),这通常是由于这些内部实现细节变化导致的,而非 API 方法签名的彻底改变,建议你升级到最新 LTS(如 JDK 21 或即将发布的 JDK 25 LTS)并参考其 release notes(版本发布说明)中的“安全”章节。