跳到主要内容

JEP 229:默认创建 PKCS12 密钥库

概括

将默认密钥库类型从 JKS 转换为PKCS12

目标

  • 提高安全性。 PKCS12 提供比 JKS 更强大的加密算法。

  • 保持向前和向后兼容性。访问 JKS 和 PKCS12 密钥库的应用程序必须在 JDK 版本之间继续运行。

动机

JKS 是一种自定义的、特定于 JDK 的密钥库类型。自 JDK 1.2 以来,它一直是 Java 平台的默认密钥库类型。 JKS 密钥库只能存储私钥和受信任的公钥证书,并且它们基于专有格式,不易扩展到新的加密算法。

PKCS12是一种可扩展、标准且得到广泛支持的存储加密密钥的格式。从 JDK 8 开始,PKCS12 密钥库可以存储私钥、受信任的公钥证书和秘密密钥。切换到 PKCS12 可以提高密钥库的完整性和机密性。它还为与其他也支持 PKCS12 的系统进行互操作提供了机会。

描述

此功能将默认密钥库类型从 JKS 更改为 PKCS12。默认情况下,将以 PKCS12 密钥库格式创建新密钥库。现有密钥库不会更改,密钥库应用程序可以继续显式指定它们所需的密钥库类型。

现有的应用程序不得中断。密钥库往往是长期存在的,因此我们需要支持跨多个 JDK 版本的访问。访问由早期 JDK 版本创建的密钥库的应用程序必须在 JDK 9 上运行,而无需更改。同样,访问由 JDK 9 创建的密钥库的应用程序也应在早期 JDK 版本上运行,无需更改。

这一要求是通过引入可识别 JKS 和 PKCS12 格式的密钥库检测机制来实现的。在加载密钥库之前会检查其格式以确定其类型,然后使用适当的密钥库实现来访问它。该机制默认启用,但可以根据需要禁用。

对此密钥库检测机制的支持可能会向后移植到早期的 JDK 版本。

测试

需要对各个 JDK 版本进行大量测试,以确保访问密钥库的应用程序保持兼容性。