Eclipse Temurin 17.0.5 发行注记

OpenJDK 17

发行注记

摘要

参阅发行注记了解 Eclipse Temurin 提供的 OpenJDK 17 的最新构建中包含的新功能和功能改进。

前言

Open Java Development Kit (OpenJDK)是 Java Platform, Standard Edition (Java SE)的免费开源实现。Eclipse Temurin 在三个 LTS 版本中提供:OpenJDK 8u、OpenJDK 11u 和 OpenJDK 17u。

适用于 Eclipse Temurin 的软件包可在 Microsoft Windows 上以及多个 Linux x86 操作系统上提供,其中包括 Red Hat Enterprise Linux 和 Ubuntu。

使开源包含更多

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。有关更多详情,请参阅我们的首席技术官 Chris Wright 提供的消息

第 1 章 OpenJDK 的支持策略

红帽在其产品中支持选择 OpenJDK 的主要版本。为了实现一致性,这些版本仍与指定为长期支持(LTS)的 Oracle JDK 版本相类似。

从红帽首次推出 OpenJDK 时,红帽最少支持六年。

OpenJDK 17 在 Microsoft Windows 和 Red Hat Enterprise Linux 上被支持,直到 2027 年 11 月为止。

注意

RHEL 6 2020 年 11 月结束其生命周期。因此,OpenJDK 不支持 RHEL 6 作为支持配置。

第 2 章 Eclipse Temurin 功能

Eclipse Temurin 不包含来自 OpenJDK 上游分发的结构性更改。

有关最新 OpenJDK 17 版本 Eclipse Temurin 中包含的更改和安全修复列表,请参阅 OpenJDK 17.0.5 Released

新功能及功能增强

查看以下发行注记以了解 Eclipse Temurin 17.0.5 中包含的新功能和功能改进:

禁用的 cpu.shares 参数

在 OpenJDK 17.0.5 版本之前,OpenJDK 使用了 cpu.shares 参数的错误解释,该参数属于 Linux 控制组,也称为 cgroups。参数可能会导致 Java 虚拟机(JVM)使用少于可用 CPU 少,这可能会影响容器内运行的 JVM 的 CPU 资源和性能。

OpenJDK 17.0.5 版本将 JVM 配置为在确定线程池的线程数量时不再使用 cpu.shares 参数。如果要恢复此配置,请在 JVM 启动时传递 -XX:+UseContainerCpuShares 参数。

注意

-XX:+UseContainerCpuShares 参数是一个已弃用的功能,可能在以后的 OpenJDK 发行版本中删除。

请参阅 JDK-8281181 (JDK 程序错误修复)。

SHA-1 Signed JARs

在 OpenJDK 17.0.5 发行版本中,使用 SHA-1 算法签名的 JAR 默认受到限制,并被视为未签名。这些限制适用于以下算法:

  • 用于摘要、签名和可选时间戳 JAR 的算法。
  • 代码签名人和 Timestamp 认证机构的证书链中的签名和摘要算法,以及用于验证这些证书是否已撤销的任何证书调用列表(CRL)或在线证书状态协议(OCSP)响应。

另外,限制也适用于签名的 Java Cryptography Extension (JCE)供应商。

为降低之前时间戳的 JAR 的兼容性风险,这个限制不适用于在 2019 年 1 月 01 日之前使用 SHA-1 算法和时间戳签名的任何 JAR。以后的 OpenJDK 发行版本中可能会删除这个例外。

要确定您的 JAR 文件是否受到限制的影响,您可以在 CLI 中发出以下命令:

$ jarsigner -verify -verbose -certs

在上一命令的输出中,搜索 SHA1、SHA -1disabled 的实例。另外,搜索任何表示 JAR 将被视为未签名的警告消息。例如:

Signed by "CN="Signer""
Digest algorithm: SHA-1 (disabled)
Signature algorithm: SHA1withRSA (disabled), 2048-bit key

WARNING: The jar will be treated as unsigned, because it is signed with a weak algorithm that is now disabled by the security property:

jdk.jar.disabledAlgorithms=MD2, MD5, RSA keySize < 1024, DSA keySize < 1024, SHA1 denyAfter 2019-01-01

考虑用更强大的算法替换或重新签名受新限制影响的任何 JAR。

如果您的 JAR 文件受这个限制的影响,您可以删除算法并使用更强大的算法(如 SHA-256 )重新注册文件。如果要删除 OpenJDK 17.0.5 的 SHA-1 签名的 JAR 限制,并且接受安全风险,您可以完成以下操作:

  1. 修改 java.security 配置文件。或者,您可以保留此文件,并使用所需的配置创建另一个文件。
  2. jdk.certpath.disabledAlgorithms 安全属性中删除 SHA1 使用 SignedJAR 和 denyAfter 2019 01 011 条目。
  3. jdk.jar.disabledAlgorithms 安全属性中删除 SHA1 denyAfter 2019-01-01 条目。
注意

java.security 文件中的 jdk.certpath.disabledAlgorithms 的值可能会被 RHEL 8 和 9 上的系统安全策略覆盖。系统安全策略使用的值可以在 /etc/crypto-policies/back-ends/java.config.config 中被设置 security.useSystemPropertiesFile 设置为 false,在 java.security 文件中或将 -Djava.security.disableSystemPropertiesFile=true 传递给 JVM。此发行版本不会修改这些值,因此对 OpenJDK 的早期版本的值保持不变。

有关配置 java.security 文件的示例,请参阅 用于 OpenShift 的 JBoss EAP (红帽客户门户网站)的 java.security 属性

请参阅 JDK-8269039 (JDK 程序错误修复)。

SunMSCAPI 供应商支持新的 Microsoft Windows 密钥存储类型

SunMSCAPI 供应商支持以下 Microsoft Windows 密钥存储类型,该类型必须将本地命名空间附加到 Windows-

  • Windows-<local_computer_name>
  • Windows-<root_local_computer_name>
  • Windows-<current_username>
  • Windows-<root_username>

通过指定任何这些类型的类型,您可以提供对 Microsoft Windows 密钥存储的本地计算机位置的访问权限。因此,为密钥存储访问存储在本地系统上的证书。

请参阅 JDK-6782021 (JDK Bug System)。

控制 HTTPURLConnectionkeep-alive 行为的系统属性

OpenJDK 17.0.5 发行版本包括以下可用于控制 HTTPURLConnection 的保留 行为的新系统属性:

  • http.keepAlive.time.server,控制与服务器的连接。
  • http.keepAlive.time.proxy,它控制与代理的连接。

在 OpenJDK 17.0.5 发布后,未指定的 keep-ive 时间的服务器或代理可能会导致闲置连接在由硬编码默认值定义的期间保持打开状态。

对于 OpenJDK 17.0.5,您可以使用系统属性更改 keep-alive 时间的默认值。 keep-alive 属性通过更改服务器或代理的 HTTP keepalive 时间来控制此行为,以便 OpenJDK 的 HTTP 协议处理器在指定秒数后关闭闲置连接。

在 OpenJDK 17.0.5 发布后,以下用例会导致 HTTPURLConnection 的特定 keep-alive 行为:

  • 如果服务器指定 Connection:keep-alive 标头,并且服务器的响应包含 keep -alive:timeout=N,那么客户端上的 OpenJDK keep-alive 缓存使用 N 秒的超时,其中 N 是整数值。
  • 如果服务器指定了 Connection:keep-alive 标头,但服务器的响应不包含 keep -alive:timeout=N 的条目,那么客户端上的 OpenJDK keep-alive 缓存使用 60 秒的代理和 5 秒的超时。
  • 如果服务器没有指定 Connection:keep-alive 标头,则客户端的 OpenJDK keep-alive 缓存为所有连接使用 5 秒的超时时间。

OpenJDK 17.0.5 发行版本维护之前描述的行为,但现在您可以在第二和第三个列出的用例中指定超时,方法是使用 http.keepAlive.time.serverhttp.keepAlive.time.proxy 属性,而不是依赖默认设置。

注意

如果您设置了 keep-alive 属性和服务器为 keep- Alive 响应标头指定一个 keep- alive 时间,HTTP 协议处理器使用服务器指定的时间。对于代理,这种情况是相同的。

请参阅 JDK-8278067 (JDK 程序错误修复)。

修订 2022-11-12 20:43:14 +1000