加密
混合公钥加密(HPKE,Hybrid Publick Key Encryption)
HPKE 是一种现代加密方案,用于使用接收者的公钥加密任意大小的明文。HPKE 在 RFC 9180 中定义。它结合了 3 种不同的算法:一个密钥封装机制(KEM)、一个密钥派生函数(KDF)和一个认证加密与关联数据(AEAD)算法,以生成密文。
PKCS#12 KeyStore 对 RFC 9879 的支持:使用基于密码的消息认证码 1 (PBMAC1)
JDK PKCS12 KeyStore 实现现在支持更现代的 PBMAC1 算法用于完整性保护。要使用 PBMAC1 算法,请在 java.security 配置文件中将 keystore.pkcs12.macAlgorithm 属性设置为 PBMAC1 算法,例如,"PBEWithHmacSHA256"。现有的 PKCS12 密钥库文件将继续使用其创建时使用的完整性算法,但新的密钥库文件将使用 PBMAC1 算法。
JEP 524:加密对象的 PEM 编码(第二版预览)
用于编码和解码加密对象到/从 PEM 格式的 secondpreview API 在 JEP 524 中交付并定义。PEM 是一种广泛使用的格式,用于传输和存储 DER 编码的加密数据,如证书、CRL、私钥等。这是几年前 JCE 调查中最常请求的功能之一。
有两个主要的 API,一个 PEMEncoder 类用于将加密对象编码为 PEM,一个 PEMDecoder 类用于将 PEM 数据解码为加密对象。还有一个名为 DEREncodable 的标记接口,现有的 X509Certificate 和 X509CRL 类已进行后向兼容以实现该接口,从而更容易将这些对象编码/解码到/从 PEM。
PEMEncoder 还可以配置为加密,这使得一步即可加密和编码私钥。类似地, PEMDecoder 可以配置为解密,以允许一步即可解码和解密私钥。对于更高级的使用,现有的 EncryptedPrivateKeyInfo 类通过添加几个新方法进行了增强,使其更容易加密和解密私钥。
新增安全属性 DisableAlgorithms 用于 JCE 层
新增了一个名为 jdk.crypto.disabledAlgorithms 的安全属性,可用于在 JCE/JCA API 级别禁用加密算法。该属性接受标准算法名称规范中指定的算法名称列表。此安全属性可以被同名的系统属性覆盖。
添加了 PBES2Algorithms 作为新的实现要求
以下来自 RFC 8018:PKCS #5:基于密码的密码学规范版本 2.1 的 PBES2 算法已被作为新要求添加:
AlgorithmParameters:
PBEWithHmacSHA256AndAES_128
PBEWithHmacSHA256AndAES_256
Cipher:
PBEWithHmacSHA256AndAES_128
PBEWithHmacSHA256AndAES_256
Mac:
PBEWithHmacSHA256
SecretKeyFactory:
PBEWithHmacSHA256AndAES_128
PBEWithHmacSHA256AndAES_256
PBKDF2WithHmacSHA256
PKI
新的根 CA 证书
四个 Sectigo 根 CA 证书,两个用于 TLS,两个用于代码签名:
Sectigo 公共服务器认证根 E46 具有如下限定名称:
CN=Sectigo Public Server Authentication Root E46, O=Sectigo Limited, C=GB
Sectigo 公共服务器认证根 R46 具有如下限定名称:
CN=Sectigo Public Server Authentication Root R46, O=Sectigo Limited, C=GB
Sectigo 公共代码签名根 E46,具有以下限定名称:
CN=Sectigo Public Code Signing Root E46, O=Sectigo Limited, C=GB
Sectigo 公共代码签名根 R46,具有以下限定名称:
CN=Sectigo Public Code Signing Root R46, O=Sectigo Limited, C=GB
已移除根 CA 证书
四个 AffirmTrust 根证书已从 cacerts 密钥库中移除。这些根 CA 由 Entrust(其所有者)停用,将不再受支持。这四个根证书是:
使用以下限定名称的 AffirmTrust 商业版本:
CN=AffirmTrust Commercial, O=AffirmTrust, C=US
使用以下限定名称的 AffirmTrust 网络:
CN=AffirmTrust Networking, O=AffirmTrust, C=US
确认 Trust Premium 具有以下限定名称:
CN=AffirmTrust Premium, O=AffirmTrust, C=US
确认 Trust Premium ECC 具有以下限定名称:
CN=AffirmTrust Premium ECC, O=AffirmTrust, C=US
TLS
SunX509 KeyManagerFactory 中的检查改进 KeyManagerFactory
用于为 TLS 连接提供证书和密钥材料的默认 SunX509 KeyManagerFactory 已经得到改进。它现在对证书实施了额外的检查,以确保所选的证书符合当前的算法约束设置。这使得它的检查与 PKIX KeyManagerFactory 保持一致。
XML 签名
禁用了 XPath 过滤转换
使用 XPath 过滤转换的 XML 签名已被默认禁用。虽然 XPath 转换功能强大,但引入复杂性的风险更高,在 XML 签名最佳实践文档中不推荐使用。如有必要,并自行承担风险,可以通过从 jdk.xml.dsig.secureValidationPolicy 安全属性中移除它来重新启用该转换。
新属性用于指定 SecureRandom
新增了一个名为 jdk.xmldsig.SecureRandom 的 XML 签名属性,它允许你指定一个特定的 SecureRandom 实例来代替 JDK 实现所使用的默认 SecureRandom。
工具
支持 ML-DSA 的签名 JAR
在 JDK 21 中,我们添加了对 ML-DSA 的支持,这是一种由 NIST 在 FIPS 204 中指定并在 JEP 497 中为 Java 平台定义的抗量子数字签名算法。
java -XshowSettings:security:tls 现在显示 TLS 命名组和签名方案
java -XshowSettings:security:tls 诊断命令现在除了显示启用的协议和密码套件外,还会显示 TLS 握手所启用的 TLS 命名组(或密钥交换算法)和签名方案。
bash
$ java -XshowSettings:security:tls
Security TLS configuration (SunJSSE provider):
Enabled Protocols:
TLSv1.3
TLSv1.2
Enabled Cipher Suites:
TLS_AES_256_GCM_SHA384
TLS_AES_128_GCM_SHA256
TLS_CHACHA20_POLY1305_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256
TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_DHE_RSA_WITH_AES_256_CBC_SHA
TLS_DHE_DSS_WITH_AES_256_CBC_SHA
TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_DHE_DSS_WITH_AES_128_CBC_SHA
TLS_EMPTY_RENEGOTIATION_INFO_SCSV
Enabled Named Groups:
X25519MLKEM768
x25519
secp256r1
secp384r1
secp521r1
x448
ffdhe2048
ffdhe3072
ffdhe4096
ffdhe6144
ffdhe8192
Enabled Signature Schemes:
ecdsa_secp256r1_sha256
ecdsa_secp384r1_sha384
ecdsa_secp521r1_sha512
ed25519
ed448
rsa_pss_rsae_sha256
rsa_pss_rsae_sha384
rsa_pss_rsae_sha512
rsa_pss_pss_sha256
rsa_pss_pss_sha384
rsa_pss_pss_sha512
rsa_pkcs1_sha256
rsa_pkcs1_sha384
rsa_pkcs1_sha512
dsa_sha256
ecdsa_sha224
rsa_sha224
dsa_sha224
ecdsa_sha1
rsa_pkcs1_sha1
dsa_sha1
使用 JKS 或 JCEKS 密钥库时改进的 keytool 警告
当使用 JKS 或 JCEKS 密钥库时, keytool 打印的警告已被改进,以提醒用户这些密钥库最终将被移除,并建议将密钥库迁移到 PKCS12。