ネイティブ・イメージでの証明書管理
ネイティブ・イメージには、デフォルトのTrustStoreの定義に使用される証明書ファイルを指定する複数の方法が用意されています。次の項では、ビルド時および実行時に使用できるオプションについて説明します。ノート: native-image
のデフォルト動作は、ビルド時のホスト環境からデフォルトのTrustStoreを取得して使用することです。
ビルド時のオプション
イメージのビルド・プロセス中に、native-image
ビルダーがホスト環境のデフォルトTrustStoreを取得して、それをネイティブの実行可能ファイルに埋め込みます。このTrustStoreは、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\*
プロパティを動的に変更し、それに応じてデフォルトのTrustStoreを更新することもできます。
また、前述のjavax.net.ssl.trustStore\*
システム・プロパティのすべてが設定されない場合は常に、前の項で説明されているように、ビルド時に取得されたデフォルトのTrustStoreになります。
信頼できない証明書
イメージのビルド・プロセス中に、信頼できない証明書のリストがファイル<java.home>/lib/security/blacklisted.certs
からロードされます。このファイルは、ビルド時と実行時の両方で証明書を検証するときに使用されます。つまり、新しい証明書ファイルがjavax.net.ssl.trustStore\*
システム・プロパティの設定によって実行時に指定されると、その新証明書はイメージのビルド時にロードされた<java.home>/lib/security/blacklisted.certs
に対してチェックされます。