第3章 Red Hat build of OpenJDK の機能
最新の Red Hat build of OpenJDK 17 には、新機能が含まれている可能性があります。さらに、最新リリースは、以前の Red Hat build of OpenJDK 17 リリースに由来する機能を強化、非推奨、または削除する可能性があります。
その他の変更点やセキュリティー修正については、OpenJDK 17.0.5 Released を参照してください。
Red Hat build of OpenJDK の機能強化
Red Hat build of OpenJDK 17 では、以前のリリースの Red Hat build of OpenJDK で作成された機能に拡張が行われました。
cpu.shares パラメーターが無効になっている
Red Hat build of OpenJDK 17.0.5 リリースより前は、Red Hat build of OpenJDK は、cgroups とも呼ばれる Linux コントロールグループに属する cpu.shares パラメーターの誤った解釈を使用していました。このパラメーターにより、Java 仮想マシン (JVM) が使用可能な CPU よりも少ない CPU を使用する可能性があり、コンテナー内で動作するときの JVM の CPU リソースとパフォーマンスに影響を与える可能性があります。
Red Hat build of OpenJDK 17.0.5 リリースでは、スレッドプールのスレッド数を決定するときに cpu.shares パラメーターを使用しないように JVM が設定されます。この設定を元に戻したい場合は、JVM の起動時に -XX:+UseContainerCpuShares 引数を渡します。
-XX:+UseContainerCpuShares 引数は非推奨の機能であり、将来の Red Hat build of OpenJDK リリースで削除される可能性があります。
JDK-8281181 (JDK バグシステム) を参照してください。
SHA-1 署名 JAR
Red Hat build of OpenJDK 17.0.5 リリースでは、SHA-1 アルゴリズムで署名された JAR はデフォルトで制限され、署名されていないかのように扱われます。これらの制限は、次のアルゴリズムに適用されます。
- ダイジェスト、署名、およびオプションで JAR のタイムスタンプに使用されるアルゴリズム。
- コード署名者とタイムスタンプ機関の証明書チェーン内の証明書の署名アルゴリズムとダイジェストアルゴリズム、およびそれらの証明書が失効しているかどうかを確認するために使用される証明書失効リスト (CRL) またはオンライン証明書ステータスプロトコル (OCSP) 応答。
さらに、制限は署名済みの Java Cryptography Extension (JCE) プロバイダーにも適用されます。
以前にタイムスタンプが付けられた JAR の互換性リスクを軽減するために、この制限は、SHA-1 アルゴリズムで署名され、January 01, 2019 より前にタイムスタンプが付けられた JAR には適用されません。この例外は、将来の Red Hat build of OpenJDK リリースで削除される可能性があります。
JAR ファイルが制限の影響を受けるかどうかを判断するには、CLI で次のコマンドを発行します。
jarsigner -verify -verbose -certs
$ jarsigner -verify -verbose -certs
前のコマンドの出力から、SHA1、SHA-1、または disabled のインスタンスを検索します。さらに、JAR が署名なしとして扱われることを示す警告メッセージを検索します。以下に例を示します。
新しい制限の影響を受けるすべての JAR をより強力なアルゴリズムに置き換えるか、再署名することを検討してください。
JAR ファイルがこの制限の影響を受ける場合は、アルゴリズムを削除して、SHA-256 などのより強力なアルゴリズムでファイルに再署名できます。Red Hat build of OpenJDK 17.0.5 の SHA-1 署名付き JAR に対する制限を削除する必要があり、セキュリティーリスクを受け入れる場合は、次のアクションを実行できます。
-
java.security設定ファイルを変更します。または、このファイルを保存して、必要な設定で別のファイルを作成することもできます。 -
SHA1 usage SignedJAR & denyAfter 2019 01 011エントリーをjdk.certpath.disabledAlgorithmsセキュリティープロパティーから削除します。 -
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 渡すことで無効にします。これらの値はこのリリースでは変更されていないため、値は Red Hat build of OpenJDK の以前のリリースと同じままです。
java.security ファイルの設定例については、JBoss EAP for OpenShift の java.security プロパティーのオーバーライド (Red Hat カスタマーポータル) を参照してください。
JDK-8269039 (JDK バグシステム) を参照してください。
SunMSCAPI プロバイダーは、新しい Microsoft Windows キーストアタイプをサポートします
SunMSCAPI プロバイダーは、ローカル名前空間を Windows- に追加する必要がある次の Microsoft Windows キーストアタイプをサポートしています。
-
Windows-<local_computer_name> -
Windows-<root_local_computer_name> -
Windows-<current_username> -
Windows-<root_username>
これらのタイプのいずれかを指定することにより、ローカルコンピューターの Microsoft Windows キーストアの場所へのアクセスを提供できます。これにより、ローカルシステムに保存されている証明書へのキーストアアクセスが提供されます。
JDK-6782021 (JDK バグシステム) を参照してください。
HTTPURLConnection の keep-alive 動作を制御するためのシステムプロパティー
Red Hat build of OpenJDK 17.0.5 リリースには、HTTPURLConnection の キープアライブ 動作を制御するために使用できる次の新しいシステムプロパティーが含まれています。
-
サーバーへの接続を制御する
http.keepAlive.time.server。 -
プロキシーへの接続を制御する
http.keepAlive.time.proxy。
Red Hat build of OpenJDK 17.0.5 リリースより前では、keep-alive 時間が指定されていないサーバーまたはプロキシーが原因で、ハードコードされたデフォルト値によって定義された期間、アイドル接続が開いたままになる場合がありました。
Red Hat build of OpenJDK 17.0.5 では、システムプロパティーを使用して keep-alive の時間のデフォルト値を変更できます。keep-alive プロパティーは、サーバーまたはプロキシーのいずれかの HTTP keep-alive 時間を変更することでこの動作を制御します。これにより、Red Hat build of OpenJDK の HTTP プロトコルハンドラーは、指定された秒数が経過した後にアイドル状態の接続を閉じます。
Red Hat build of OpenJDK 17.0.5 リリースより前では、次のユースケースで、HTTPURLConnection の特定の keep-alive 動作が発生していました。
-
サーバーが
Connection:keep-aliveヘッダーを指定し、サーバーの応答にKeep-alive:timeout=Nが含まれている場合、クライアントの Red Hat build of OpenJDKkeep-aliveキャッシュはN秒のタイムアウトを使用します (Nは整数値)。 -
サーバーが
Connection:keep-aliveヘッダーを指定しているが、サーバーの応答にKeep-alive:timeout=Nのエントリーが含まれていない場合、クライアントの Red Hat build of OpenJDKkeep-aliveキャッシュはプロキシーに対して60秒のタイムアウトを使用し、5サーバーの秒。 -
サーバーが
Connection:keep-aliveヘッダーを指定しない場合、クライアントの Red Hat build of OpenJDKkeep-aliveキャッシュは、すべての接続に対して 5 秒のタイムアウトを使用します。
Red Hat build of OpenJDK 17.0.5 リリースでは、前述の動作はそのままですが、2 番目と 3 番目に挙げた使用例におけるタイムアウトは、デフォルトの設定に依存するのではなく、http.keepAlive.time.server および http.keepAlive.time.proxy プロパティーを使用して指定できるようになっています。
keep-alive プロパティーを設定し、サーバーが Keep-Alive 応答ヘッダーの keep-alive 時間を指定した場合、HTTP プロトコルハンドラーはサーバーによって指定された時間を使用します。この状況は、プロキシーと同じです。
JDK-8278067 (JDK バグシステム) を参照してください。