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。

相关推荐
其实防守也摸鱼7 小时前
Cylab在线靶场——挑战图书馆初学者指南
服务器·前端·数据库·chrome·安全·网络安全·靶场
qq_443132417 小时前
数字资产安全治理平台是什么:定义、核心能力与典型应用场景
安全
邪修king9 小时前
Re:Linux 系统篇(三十五):进程间通信Chapter2:从匿名管道到进程池:Linux 进程间通信实战(深度理解「先描述,再组织」)
java·linux·运维
拆房老料10 小时前
【第四部分:Agentic 智能体设计模式】16. 一个 Prompt 搞不定复杂任务?试试 Prompt Chaining
java·前端·人工智能·设计模式·prompt
张张123y10 小时前
后端第十四课:Agent 记忆系统(让 Agent 记住上下文和用户,跨会话不健忘)
java·大数据·人工智能·python·agent·记忆
m0_7156744314 小时前
可视化易用·低误报率·跨区域部署:知源-AI数据分类分级系统在金融行业的落地实践
网络·安全·网络安全
阿里嘎多学长15 小时前
2026-10-20 GitHub 热点项目精选
开发语言·程序员·github·代码托管
国科安芯15 小时前
四重证据,一条逻辑链:商业航天级微控制器MCU抗辐射验证方法学综述——以国科安芯AS32S601为例
人工智能·单片机·嵌入式硬件·mcu·安全·抗辐射
dk_tjy15 小时前
AI驱动的自动化攻击背景下:企业端点安全体系的技术架构与建设路径
网络·人工智能·安全·自动化·终端安全管理·数据防泄漏
曹牧15 小时前
C#:空合并运算符
java·前端·数据库