第 2 章 Eclipse Temurin 功能
Eclipse Temurin 不包含来自 OpenJDK 上游发行版的结构性更改。
新功能及功能增强
Eclipse Temurin 21.0.5 包括以下新功能和增强:
2024 年 11 月 11 日和由 Entrust root CA 发布的 TLS 服务器证书的不信任
根据 Google 和 Mozilla 最近宣布的类似计划,OpenJDK 21.0.5 信任于 2024 年 11 月 11 日和被 Entrust root 证书颁发机构(CA)发布的 TLS 证书。这个行为的变化包括任何品牌为 AffirmTrust 的证书,这些证书由 Entrust 管理。
OpenJDK 将继续信任 2024 年 11 月 11 日或之前发布的证书,直到这些证书过期。
如果服务器的证书链由受影响的证书决定,则任何尝试协商 TLS 会话现在都会失败,但表明信任锚不被信任。例如:
TLS server certificate issued after 2024-11-11 and anchored by a distrusted legacy Entrust root CA: CN=Entrust.net CertificationAuthority (2048), OU=(c) 1999 Entrust.net Limited,OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.),O=Entrust.net
您可以使用以下 keytool
命令检查此更改是否影响 JDK 密钥存储中的证书:
keytool -v -list -alias <your_server_alias> -keystore <your_keystore_filename>
如果此更改会影响链中的任何证书,请更新此证书或联系负责管理证书的机构。
如果要继续使用 Entrust root 证书选择的 TLS 服务器证书,您可以通过修改 java.security
. properties
系统属性或从 jdk.security.caDistrustPolicies
安全属性中删除 ENTRUST_TLS
。
继续使用不信任的 TLS 服务器证书的风险自有风险。
这些限制适用于 OpenJDK 的以下 Entrust root 证书:
- 证书 1
- Alias name: entrustevca [jdk]
- 区分名称: CN=Entrust Root Certification Authority, OU=(c) 2006 Entrust, Inc., OU=www.entrust.net/CPS 由参考, O=Entrust, Inc., C=US
- SHA256: 73:C1:76:43:4F:1B:C6:D5:AD:F4:5B:0E:76:E7:27:28:7C:8D:E5:76:16:C1:E6:E6:14:1A:2B:2C:BC:7D:8E:4C
- 证书 2
- Alias name: entrustrootcaec1 [jdk]
- 区分名称: CN=Entrust Root Certification Authority - EC1, OU=(c) 2012 Entrust, Inc. - 仅授权使用,OU=See www.entrust.net/legal-terms, O=Entrust, Inc., C=US
- SHA256: 02:ED:0E:B2:8C:14:DA:45:16:5C:56:67:91:70:0D:64:51:D7:FB:56:F0:B2:AB:1D:3B:8E:B0:70:E5:6E:DF:F5
- 证书 3
- Alias name: entrustrootcag2 [jdk]
- 区分名称: CN=Entrust Root Certification Authority - G2, OU=(c) 2009 Entrust, Inc. - 仅授权使用,OU=See www.entrust.net/legal-terms, O=Entrust, Inc., C=US
- SHA256: 43:DF:57:74:B0:3E:7F:EF:5F:E4:0D:93:1A:7B:ED:F1:BB:2E:6B:42:73:8C:4E:6D:38:41:10:3D:3A:A7:F3:39
- 证书 4
- Alias name: entrustrootcag4 [jdk]
- 区分名称: CN=Entrust Root Certification Authority - G4, OU=(c) 2015 Entrust, Inc. - 仅授权使用,OU=See www.entrust.net/legal-termsO=Entrust, Inc., C=US
- SHA256: DB:35:17:D1:F6:73:2A:2D:5A:B9:7C:53:3E:C7:07:79:EE:32:70:A6:2F:B4:AC:42:38:37:24:60:E6:F0:1E:88
- 证书 5
- Alias name: entrust2048ca [jdk]
- 区分名称: CN=Entrust.net Certification Authority (2048), OU=(c) 1999 Entrust.net Limited, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), O=Entrust.net
- SHA256: 6D:C4:71:72:E0:1C:BC:B0:BF:62:58:0D:89:5F:E2:B8:AC:9A:D4:F8:73:80:1E:0C:10:B9:C8:37:D2:1E:B1:77
- 证书 6
- Alias name: affirmtrustcommercialca [jdk]
- distinguished name: CN=AffirmTrust Commercial, O=AffirmTrust, C=US
- SHA256: 03:76:AB:1D:54:C5:F9:80:3C:E4:B2:E2:01:A0:EE:7E:EF:7B:57:B6:36:E8:A9:3C:9B:8D:48:60:C9:6F:5F:A7
- 证书 7
- Alias name: affirmtrustnetworkingca [jdk]
- distinguished name: CN=AffirmTrust Networking, O=AffirmTrust, C=US
- SHA256: 0A:81:EC:5A:92:97:77:F1:45:90:4A:F3:8D:5D:50:9F:66:B5:E2:C5:8F:CD:B5:31:05:8B:0E:17:F3:F0B4:1B
- 证书 8
- Alias name: affirmtrustpremiumca [jdk]
- distinguished name: CN=AffirmTrust Premium, O=AffirmTrust, C=US
- SHA256: 70:A7:3F:7F:37:6B:60:07:42:48:90:45:34:B1:14:82:D5:BF:0E:69:8E:CC:49:8D:F5:25:77:EB:F2:E9:3B:9A
- 证书 9
- Alias name: affirmtrustpremiumeccca [jdk]
- distinguished name: CN=AffirmTrust Premium ECCO=AffirmTrust, C=US
- SHA256: BD:71:FD:F6:DA:97:E4:CF:62:D1:64:7A:DD:25:81:B0:7D:79:AD:F8:39:7E:B4:EC:BA:9C:5E:84:88:82:14:23
请参阅 JDK-8337664 (JDK Bug System) 和 JDK-8341059 (JDK Bug System)。
KEM.getInstance ()
方法检查第三方安全供应商是否已签名
JDK 的加密框架通过确定供应商的代码库和验证供应商的签名来验证第三方安全供应商实施。
在早期版本中,JDK 不会验证密钥封装机制(KEM)实现。
OpenJDK 21.0.5 以与其他 JDK 服务类型(如 Cipher 和 Mac 供应商)一致的方式验证 KEM 实现。
请参阅 JDK-8322971 (JDK Bug System)。
减少详细区域设置输出 in -XshowSettings
launcher 选项
在早期版本中,-XshowSettings
launcher 选项打印了可用区域设置的长列表,这会模糊处理其他设置。
在 OpenJDK 21.0.5 中,-XshowSettings
launcher 选项默认不再打印可用区域的列表。如果要查看与可用区域设置相关的所有设置,您可以使用 -XshowSettings:locale
选项。
请参阅 JDK-8310201 (JDK Bug System)。
java .
security.debug
系统属性的额外时间戳和 线程
选项
.
security.debug
OpenJDK 21.0.5 在 java.security.debug
属性中添加以下选项,它可以应用到任何指定的组件:
-
+timestamp
选项打印带有每个 debug 语句的时间戳。 -
+thread
选项打印每个 debug 语句的线程和调用者信息。
例如,-Djava.security.debug=all+timestamp+thread
为带有时间戳和线程信息的所有组件启用调试信息。或者,-Djava.security.debug=properties+timestamp
仅为安全属性启用调试信息,并包括一个时间戳。您可以使用 -Djava.security.debug=help
显示支持的组件和选项的完整列表。
请参阅 JDK-8051959 (JDK Bug System)。
添加 ssl.com 根证书
在 OpenJDK 21.0.5 中,cacerts
truststore 包括两个 SSL.com TLS 根证书:
- 证书 1
- 名称:SSL.com
- 别名名称:ssltlsrootecc2022
- 区分名称: CN=SSL.com TLS ECC Root CA 2022, O=SSL Corporation, C=US
- 证书 2
- 名称:SSL.com
- 别名名称:ssltlsrootrsa2022
- distinguished name: CN=SSL.com TLS RSA Root CA 2022, O=SSL Corporation, C=US
请参阅 JDK-8341057 (JDK Bug System)。
HTTP 客户端增强
OpenJDK 21.0.5 限制 HTTP 客户端在 JDK 中针对所有支持的 HTTP 协议版本接受的最大标头字段大小。标头字段大小计算为未压缩标头名称的总和、未压缩标头值的大小,以及每个字段部分行的开销为 32 字节。如果对等点发送超过这个限制的字段部分,则会引发 java.net.ProtocolException
。
OpenJDK 21.0.5 引入了 jdk.http.maxHeaderSize
系统属性,您可以使用它来更改最大标头字段大小(以字节为单位)。或者,您可以通过将 jdk.http.maxHeaderSize
属性设置为 0 或负值来禁用最大标头字段大小。jdk.http.maxHeaderSize
属性默认设置为 393,216 字节(即 384KB)。
JDK bug system reference ID: JDK-8328286
ClassLoadingMXBean
和 MemoryMXBean
API 具有与 setVerbose ()
方法一致的 isVerbose ()
方法
ClassLoadingMXBean
API 的 setVerbose (布尔值)
方法显示以下行为:
-
如果启用
为true
,则setVerbose
方法在Info
级别设置标准输出(stdout)的class+load*
日志记录。 -
如果启用
为false
,则setVerbose
方法在 stdout 中禁用class+load*
日志记录。
在早期版本中,class LoadingMXBean
API 的 isVerbose ()
方法检查是否在任何类型的日志输出上启用了 class+load
日志记录,而不只是 stdout。在这种情况下,如果您使用
java -Xlog
选项启用对文件的日志,则 isVerbose ()
方法返回 true
,即使调用 setVerbose (false)
,这会导致计数器行为。MemoryMXBean
API 的 isVerbose ()
方法也显示类似的计数器行为。
从 OpenJDK 21.0.5 开始,classLoadingMXBean.isVerbose ()
和 MemoryMXBean.isVerbose ()
方法显示以下行为:
-
只有当
Info
级别(或更高)在标准输出中启用了class+load*
日志记录时,ClassLoadingMXBean::isVerbose ()
才会返回true
。 -
只有在 stdout 上的
Info
级别(或更高)启用垃圾收集器日志时,MemoryMXBean::isVerbose ()
才会返回true
。
请参阅 JDK-8338139 (JDK Bug System)。
更新于 2024-10-31