Eclipse Temurin 11.0.17 发行注记

Red Hat build of OpenJDK 11

Red Hat Customer Content Services

摘要

查看发行注记以了解由 Eclipse Temurin 提供的 OpenJDK 11 最新构建中包含的新功能和功能增强。

前言

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。

提供有关红帽构建的 OpenJDK 文档的反馈

要报告错误或改进文档,请登录到 Red Hat JIRA 帐户并提交问题。如果您没有 Red Hat Jira 帐户,则会提示您创建一个帐户。

流程

  1. 单击以下链接 以创建 ticket
  2. Summary 中输入问题的简短描述。
  3. Description 中提供问题或功能增强的详细描述。包括一个指向文档中问题的 URL。
  4. Submit 创建问题,并将问题路由到适当的文档团队。

使开源包含更多

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

第 1 章 Eclipse Temurin 的支持策略

红帽在其产品中支持所选的 Eclipse Temurin 主版本。为实现一致性,这些版本与 Oracle JDK 的长期支持(LTS)指定的版本相同。

从该版本首次引入后,Eclip Temurin 的主版本将最少提供六年的支持。如需更多信息,请参阅 Eclipse Temurin 生命周期和支持政策

注意

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

第 2 章 Eclipse Temurin 功能

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

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

新功能及功能增强

查看以下发行注记以了解 Eclipse Temurin 11.0.17 发行版本中包含的新功能和功能增强:

禁用 cpu.shares 参数

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

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

注意

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

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

jdk.httpserver.maxConnections system property

OpenJDK 11.0.17 添加了一个新的系统属性 jdk.httpserver.maxConnections,它修复了一个安全问题,没有为 HttpServer 服务指定连接,这可能会导致接受的连接和建立的连接无限期保持打开。

您可以使用 jdk.httpserver.maxConnections 系统属性更改 HttpServer 服务,其行为如下:

  • 设置 0 或负值(如 -1 )来为该服务指定连接限制。
  • 设置一个正值,如 1,使服务能够根据当前已建立的连接数检查任何接受的连接。如果达到该服务的建立连接,服务会立即关闭接受的连接。

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

使用 JFR 监控对象的反序列化

现在,您可以使用 JDK Flight Recorder (JFR)监控对象的反序列化。默认情况下,OpenJDK 11.0.17 为 JFR 禁用 jdk.deserialization 事件设置。您可以通过更新 JFR 配置中的 event-name 元素来启用此功能。例如:

<?xml version="1.0" encoding="UTF-8"?>
<configuration version="2.0" description="test">
 <event name="jdk.Deserialization">
 <setting name="enabled">true</setting>
 <setting name="stackTrace">false</setting>
 </event>
</configuration>

启用 JFR 并配置 JFR 以监控反序列化事件后,JFR 会在受监控的应用程序尝试反序列化对象时创建一个事件。然后,JFR 的序列化过滤器机制可以确定是否接受或拒绝被监控应用程序中的反序列化对象。

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

SHA-1 Signed JARs

在 OpenJDK 11.0.17 发行版本中,默认使用 SHA-1 算法签名的 JAR,并像未签名一样对待。这些限制适用于以下算法:

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

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

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

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

$ jarsigner -verify -verbose -certs

在上一命令的输出中,搜索 SHA1 实例、SHA-1禁用。此外,搜索指示 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 11.0.17 的 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 中看到,并通过在 java.security 文件中将 security.useSystemPropertiesFile 设置为 false 来禁用,或者将 -Djava.security.disableSystemPropertiesFile=true 设置为 JVM。这些值不会在此发行版本中修改,因此在之前的 OpenJDK 版本中这些值保持不变。

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

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

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

OpenJDK 11.0.17 发行版本包括以下新系统属性,可用于控制 HTTPURLConnectionkeep-alive 行为:

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

在 OpenJDK 11.0.17 发行版本之前,带有未指定 keep-alive 时间的服务器或代理可能会导致闲置连接在硬编码的默认值定义的期间保持打开。

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

在 OpenJDK 11.0.17 发布前,以下用例会导致 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 11.0.17 发行版本维护前面描述的行为,但您现在可以使用 http.keepAlive.time. server 和 http.keepAlive.time.proxy 属性在第二个和第三个列出的用例中指定超时,而不必依赖默认设置。

注意

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

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

更新了默认的 PKCS libpmem MAC 算法

OpenJDK 11.0.17 更新 PKCSMemcached 密钥存储的默认消息身份验证代码(MAC)算法,以使用 SHA-256 加密哈希功能而不是 SHA-1 功能。SHA-256 功能为保护数据提供了更强大的方法。

您可以在 keystore.pkcs12.macAlgorithmkeystore.pkcs12.maclterationCount 系统属性中查看此更新。

如果您使用这个更新的 MAC 算法创建密钥存储,且您试图将密钥存储与 OpenJDK 11.0.12 之前的 OpenJDK 版本一起使用,您会收到 java.security.NoSuchAlgorithmException 信息。

要将之前的密钥存储与 OpenJDK 11.0.12 之前的 OpenJDK 版本搭配使用,请将 keystore.pkcs12.legacy 系统属性设置为 true 以恢复 MAC 算法。

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

弃用和删除的功能

查看以下发行注记以了解 OpenJDK 11.0.17 发行版本中已弃用或删除的预先存在的功能:

弃用的 Kerberos 加密类型

OpenJDK 11.0.17 弃用了 3-hmac-sha1rc4-hmac Kerberos 加密类型。默认情况下,OpenJDK 11.0.17 禁用这些加密类型,但您可以通过完成以下操作来启用它们:

  • krb5.conf 配置文件中,将 allow_weak_crypto 选项卡设置为 true。此配置还启用其他加密类型,如 des-cbc-crcdes-cbc-md5
警告

在应用此配置前,请考虑启用所有弱 Kerberos 加密类型的风险,比如在您的 Kerberos 身份验证机制中引入弱加密算法。

您可以通过在以下 krb5.conf 配置文件中明确列出加密类型来禁用弱加密类型的子集:

  • default_tkt_enctypes
  • default_tgs_enctypes
  • permitted_enctypes

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

更新于 2024-05-10

法律通告

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.