JDK 26之安全增强

加密

混合公钥加密(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。

相关推荐
左左右右左右摇晃2 小时前
Java并发——多线程
java·开发语言·jvm
AMoon丶2 小时前
Golang--内存管理
开发语言·后端·算法·缓存·golang·os
阿里嘎多学长2 小时前
2026-03-22 GitHub 热点项目精选
开发语言·程序员·github·代码托管
23.2 小时前
【Java】字符串底层与常量池演变全解析
java·开发语言·jvm
美式请加冰2 小时前
异常的介绍和使用
开发语言·c++
极客先躯2 小时前
高级java每日一道面试题-2025年9月09日-数据处理篇[LangChain4j]-金融行业使用 LLM 有哪些合规要求?
java·金融·高级面试题·权限与访问控制·数据脱敏与隐私计算·模型可解释性工具·审计日志与监控
喵喵爱自由2 小时前
Docker容器共享宿主机-安全网络
网络·安全·docker
jing-ya2 小时前
day 59 图论part10
java·开发语言·数据结构·算法·图论
短剑重铸之日2 小时前
《ShardingSphere解读》16 改写引擎:如何理解装饰器模式下的 SQL 改写实现机制?
java·数据库·后端·sql·shardingsphere·分库分表·装饰器模式