JEP 124:增强证书吊销检查 API
概述
改进证书吊销检查 API,以支持尽力而为的检查、终端实体证书检查以及特定机制的选项和参数。
目标
- 提供对尽力而为检查的 API 支持。使用尽力而为检查时,如果无法连接到持有吊销信息的服务器,则不会认为证书无效。
- 提供 API 支持,仅检查最终实体证书的吊销状态,而不是证书链中的每个证书。
- 提供对当前指定为系统属性的吊销检查选项的 API 支持。添加特定于所使用的吊销检查机制类型的其他参数,CRL 或 OCSP。
动机
当前的 java.security.cert
API 认为无法联系持有吊销信息的服务器是一个致命错误,这在许多环境中过于严格。尽力而为的选项可以在安全性和可用性之间提供合理的平衡,并且许多其他吊销检查实现也支持该选项。
当前的 API 也是“全有或全无”的模式,该模式要求检查证书链中每个证书的吊销状态。它不允许您仅检查最终实体证书的吊销状态。
当前的 API 缺乏对指定特定于某种吊销机制(如 CRL 或 OCSP)的选项的支持。目前,这些选项要么缺失(例如 OCSP 随机数),要么只能作为安全属性进行指定。
这些增强功能将使 API 更加完善、灵活,并且在与其他实现的竞争中更具优势。许多实现提供了额外的吊销检查选项,例如尽力而为的检查。
描述
这是为支持上述目标而对 API 进行的更改的摘要。
CertPathValidator
和 CertPathBuilder
类中新增了一个 getRevocationChecker
方法,该方法返回一个 CertPathChecker
,可以用来指定额外的吊销选项和参数。类似地,相应的 Spi 类(CertPathValidatorSpi
和 CertPathBuilderSpi
)中也增加了一个 engineGetRevocationChecker
方法。
新增了一个 PKIXRevocationChecker
类(它是 PKIXCertPathChecker
的子类),可以用于使用 PKIX 算法检查证书的吊销状态。
PKIXRevocationChecker
类包含一些方法,允许在请求吊销时指定各种参数和选项。
现有的证书路径调试选项将得到增强,以记录用于调试的重要问题(-Djava.security.debug=certpath
)。
测试
将创建单元测试来测试新的 API。可能需要实现 OCSP 和 CRL 服务器,以模拟适当的测试环境。
理想情况下,每个供应商都应该实现一个测试套件,用于检查供应商特定的 cacerts
文件中的每个证书颁发机构 (CA) 是否已吊销证书(因为 OpenJDK 中的 cacerts
文件是空的)。这将降低因实现中的细微错误或 CA 部署而导致失败的风险。一些 CA 会颁发测试证书以测试其服务;然而,这些证书通常是短期有效的,因此需要定期更新。
影响
- 文档:PKI 程序员指南需要使用新的 API 进行更新。
- 国际化/本地化:可能需要对错误消息进行本地化处理。