- JDK 23対応 GraalVM (最新)
- JDK 24対応 GraalVM (早期アクセス)
- JDK 21対応 GraalVM
- JDK 17対応 GraalVM
- アーカイブ
- 開発ビルド
ネイティブイメージにおける証明書の管理
ネイティブイメージは、デフォルトのトラストストアを定義するために使用される証明書ファイルを指定する方法を複数提供します。以下のセクションでは、利用可能なビルド時および実行時オプションについて説明します。注:`native-image` のデフォルトの動作は、ビルド時ホスト環境からデフォルトのトラストストアを取得して使用することです。
ビルド時オプション #
イメージのビルドプロセス中に、`native-image`ビルダーはホスト環境のデフォルトのトラストストアを取得し、ネイティブ実行可能ファイルに埋め込みます。このトラストストアは、デフォルトではJDK内で提供されるルート証明書ファイルから作成されますが、ビルド時のシステムプロパティ `javax.net.ssl.trustStore` を設定することで、別の証明書ファイルを使用するように変更できます(方法はプロパティを参照してください)。
ビルド時の証明書ファイルの内容はネイティブ実行可能ファイルに埋め込まれるため、ファイル自体がターゲット環境に存在する必要はありません。
実行時オプション #
証明書ファイルは、`javax.net.ssl.trustStore\*` システムプロパティを設定することで、実行時に動的に変更することもできます。
イメージの実行中に以下のシステムプロパティのいずれかが設定されている場合、`native-image` は `javax.net.ssl.trustStore` も設定し、アクセス可能な証明書ファイルを指すようにする必要があります。
javax.net.ssl.trustStore
javax.net.ssl.trustStoreType
javax.net.ssl.trustStoreProvider
javax.net.ssl.trustStorePassword
これらのプロパティのいずれかが設定されていて、`javax.net.ssl.trustStore` がアクセス可能なファイルを指していない場合、`UnsupportedFeatureError` がスローされます。
この動作はOpenJDKとは異なることに注意してください。 `javax.net.ssl.trustStore` システムプロパティが設定されていないか無効な場合、OpenJDKはJDKに付属の証明書ファイルの使用にフォールバックします。ただし、そのようなファイルはイメージ実行可能ファイルと一緒に存在しないため、フォールバックとして使用できません。
実行中に、`javax.net.ssl.trustStore\*` プロパティを動的に変更し、デフォルトのトラストストアをそれに応じて更新することも可能です。
最後に、上記の `javax.net.ssl.trustStore\*` システムプロパティがすべて設定されていない場合は、デフォルトのトラストストアは、前のセクションで説明したように、ビルド時にキャプチャされたものになります。
信頼できない証明書 #
イメージのビルドプロセス中に、信頼できない証明書のリストが `<java.home>/lib/security/blacklisted.certs` ファイルからロードされます。このファイルは、ビルド時と実行時の両方で証明書を検証する際に使用されます。つまり、実行時に `javax.net.ssl.trustStore\*` システムプロパティを設定することで新しい証明書ファイルが指定された場合でも、新しい証明書はイメージビルド時にロードされた `<java.home>/lib/security/blacklisted.certs` に対してチェックされます。