Client SDK 5 を使用して Java Keytool および Jarsigner と統合する - AWS CloudHSM

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Client SDK 5 を使用して Java Keytool および Jarsigner と統合する

AWS CloudHSM key store は、HSM のキーに関連付けられた証明書を、 keytoolや などのサードパーティーツールを使用して使用する専用 JCE キーストアですjarsigner。証明書はパブリックで非機密データであるため、 AWS CloudHSM HSM に証明書を保存しません。 AWS CloudHSM キーストアは証明書をローカルファイルに格納し、証明書を HSM の対応するキーにマッピングします。

AWS CloudHSM キーストアを使用して新しいキーを生成すると、ローカルキーストアファイルにはエントリが生成されず、キーは HSM に作成されます。同様に、 AWS CloudHSM キーストアを使用してキーを検索すると、検索が HSM に渡されます。証明書を AWS CloudHSM キーストアに保存すると、プロバイダーは対応するエイリアスを持つキーペアが HSM に存在することを確認し、提供された証明書を対応するキーペアに関連付けます。

前提条件

AWS CloudHSM キーストアを使用するには、まず AWS CloudHSM JCE SDK を初期化して設定する必要があります。

手順 1: JCE をインストールする

AWS CloudHSM クライアントの前提条件を含む JCE をインストールするには、Java ライブラリ をインストールするステップに従います。

手順 2: 環境変数に HSM ログイン認証情報を追加する

HSM ログイン認証情報を格納する環境変数を設定します。

Linux
$ export HSM_USER=<HSM user name>
$ export HSM_PASSWORD=<HSM password>
Windows
PS C:\> $Env:HSM_USER=<HSM user name>
PS C:\> $Env:HSM_PASSWORD=<HSM password>
注記

AWS CloudHSM JCE にはさまざまなログインオプションがあります。サードパーティーアプリケーションで AWS CloudHSM キーストアを使用するには、環境変数で暗黙的なログインを使用する必要があります。アプリケーションコードによる明示的なログインを使用する場合は、 AWS CloudHSM キーストアを使用して独自のアプリケーションを構築する必要があります。詳細については、「 AWS CloudHSM キーストアの使用」の記事を参照してください。

手順 3: JCE プロバイダーを登録する

JCE プロバイダーを Java CloudProvider 設定に登録するには、次の手順に従います。

  1. Java インストールで java.security 設定ファイルを開き、編集します。

  2. java.security 設定ファイルで、com.amazonaws.cloudhsm.jce.provider.CloudHsmProvider を最後のプロバイダーとして追加します。例えば、java.security ファイルに 9 つのプロバイダーがある場合は、セクションの最後のプロバイダーとして次のプロバイダーを追加します。

    security.provider.10=com.amazonaws.cloudhsm.jce.provider.CloudHsmProvider

注記

AWS CloudHSM プロバイダーをより高い優先度として追加すると、ソフトウェアに安全にオフロードされる可能性のあるオペレーションに AWS CloudHSM プロバイダーが優先されるため、システムのパフォーマンスに悪影響を及ぼす可能性があります。ベストプラクティスとして、 AWS CloudHSM またはソフトウェアベースのプロバイダーのいずれであっても、オペレーションに使用するプロバイダーを常に指定します。

注記

AWS CloudHSM キーストアで keytool を使用してキーを生成するときに -providerName-providerclass-providerpath コマンドラインオプションを指定すると、エラーが発生する可能性があります。

AWS CloudHSM keytool でのキーストアの使用

keytool は、一般的なキーおよび証明書タスク向けの一般的なコマンドラインユーティリティです。keytool に関する完全なチュートリアルは、 AWS CloudHSM ドキュメントの範囲外です。この記事では、 をキーストアを介した信頼のルート AWS CloudHSM として使用する場合に、さまざまな AWS CloudHSM keytool 関数で使用する特定のパラメータについて説明します。

keytool をキー AWS CloudHSM ストアで使用する場合は、任意の keytool コマンドに次の引数を指定します。

Linux
-storetype CLOUDHSM -J-classpath< '-J/opt/cloudhsm/java/*'>
Windows
-storetype CLOUDHSM -J-classpath<'-J"C:\Program Files\Amazon\CloudHSM\java\*"'>

キーストアを使用して新しい AWS CloudHSM キーストアファイルを作成する場合は、「」を参照してくださいの使用 AWS CloudHSM KeyStore。既存のキーストアを使用するには、keytool の –keystore 引数を使用して、その名前 (パスを含む) を指定します。keytool コマンドで存在しないキーストアファイルを指定すると、 AWS CloudHSM キーストアは新しいキーストアファイルを作成します。

keytool で新しいキーを作成する

keytool を使用して、 AWS CloudHSMの JCE SDK でサポートされている RSA、AES、DESede タイプのキーを生成できます。

重要

keytool で生成されたキーはソフトウェアで生成され、抽出可能な永続キー AWS CloudHSM として にインポートされます。

エクスポートできないキーを keytool の外部で生成したうえで、対応する証明書をキーストアにインポートすることを強くお勧めします。keytool と Jarsigner を介して抽出可能な RSA キーまたは EC キーを使用する場合、プロバイダーは からキーをエクスポート AWS CloudHSM し、署名オペレーションにローカルでキーを使用します。

AWS CloudHSM クラスターに複数のクライアントインスタンスが接続されている場合は、1 つのクライアントインスタンスのキーストアに証明書をインポートしても、他のクライアントインスタンスで証明書が自動的に使用可能にならないことに注意してください。各クライアントインスタンスでキーおよび関連する証明書を登録するには、「keytool を使用して CSR を生成する」の説明に従って Java アプリケーションを実行する必要があります。または、1 つのクライアントで必要な変更を行い、結果のキーストアファイルを他のすべてのクライアントインスタンスにコピーすることもできます。

例 1: 対称型 AES-256 キーを生成し、作業ディレクトリの「my_keystore.store」という名前のキーストアファイルに保存します。<secret label> を独自のラベルに置き換えます。

Linux
$ keytool -genseckey -alias <secret label> -keyalg aes \ -keysize 256 -keystore my_keystore.store \ -storetype CloudHSM -J-classpath '-J/opt/cloudhsm/java/*' \
Windows
PS C:\> keytool -genseckey -alias <secret label> -keyalg aes ` -keysize 256 -keystore my_keystore.store ` -storetype CloudHSM -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

例 2: RSA 2048 キーペアを生成し、作業ディレクトリの「my_keystore.store」という名前のキーストアファイルに保存します。<RSA key pair label> を独自のラベルに置き換えます。

Linux
$ keytool -genkeypair -alias <RSA key pair label> \ -keyalg rsa -keysize 2048 \ -sigalg sha512withrsa \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -genkeypair -alias <RSA key pair label> ` -keyalg rsa -keysize 2048 ` -sigalg sha512withrsa ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

サポートされている署名アルゴリズムのリストは、Java ライブラリにあります。

keytool を使用してキーを削除する

AWS CloudHSM キーストアはキーの削除をサポートしていません。Destroyable インターフェイスの destroy メソッドを使用してキーを削除できます。

((Destroyable) key).destroy();

keytool を使用して CSR を生成する

OpenSSL Dynamic Engine を使用すると、証明書署名要求 (CSR) を柔軟に生成できます。次のコマンドは、keytool を使用して、エイリアス my-key-pair を持つキーペアの CSR を生成します。

Linux
$ keytool -certreq -alias <key pair label> \ -file my_csr.csr \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -certreq -alias <key pair label> ` -file my_csr.csr ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'
注記

keytool のキーペアを使用するには、指定されたキーストアファイルにそのキーペアのエントリが必要です。keytool の外部で生成されたキーペアを使用する場合は、キーおよび証明書のメタデータをキーストアにインポートする必要があります。キーストアデータをインポートする手順については、「keytool を使用して中間証明書とルート証明書を AWS CloudHSM キーストアにインポートする 」を参照してください。

keytool を使用して中間証明書とルート証明書を AWS CloudHSM キーストアにインポートする

CA 証明書をインポートするには、新しくインポートした証明書で完全な証明書チェーンの検証を有効にする必要があります。次のコマンドでは、例を示しています。

Linux
$ keytool -import -trustcacerts -alias rootCAcert \ -file rootCAcert.cert -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -import -trustcacerts -alias rootCAcert ` -file rootCAcert.cert -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

複数のクライアントインスタンスを AWS CloudHSM クラスターに接続する場合、1 つのクライアントインスタンスのキーストアに証明書をインポートしても、他のクライアントインスタンスで証明書が自動的に使用できるようになります。各クライアントインスタンスで証明書をインポートする必要があります。

keytool を使用して AWS CloudHSM キーストアから証明書を削除する

次のコマンドは、Java keytool のキーストアから証明書を削除する方法の例を示しています。

Linux
$ keytool -delete -alias mydomain \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -delete -alias mydomain ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

複数のクライアントインスタンスを AWS CloudHSM クラスターに接続する場合、1 つのクライアントインスタンスのキーストアで証明書を削除しても、他のクライアントインスタンスから証明書は自動的に削除されません。各クライアントインスタンスで証明書を削除する必要があります。

keytool を使用して作業用証明書を AWS CloudHSM キーストアにインポートする

証明書署名要求 (CSR) が署名されると、それを AWS CloudHSM キーストアにインポートし、適切なキーペアに関連付けることができます。次のコマンドでは、例を示しています。

Linux
$ keytool -importcert -noprompt -alias <key pair label> \ -file my_certificate.crt \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -importcert -noprompt -alias <key pair label> ` -file my_certificate.crt ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

エイリアスは、キーストア内の関連付けられた証明書を持つキーペアである必要があります。キーが keytool の外部で生成される場合や、別のクライアントインスタンスで生成される場合は、まずキーおよび証明書のメタデータをキーストアにインポートする必要があります。

証明書チェーンは検証可能である必要があります。証明書を検証できない場合は、チェーンを検証できるように、署名 (証明機関) 証明書をキーストアにインポートする必要があります。

keytool を使用した証明書のエクスポート

次の例では、バイナリ X.509 形式の証明書を生成します。人間が読める証明書をエクスポートするには、-exportcert コマンドに -rfc を追加します。

Linux
$ keytool -exportcert -alias <key pair label> \ -file my_exported_certificate.crt \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -exportcert -alias <key pair label> ` -file my_exported_certificate.crt ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

Jarsigner での AWS CloudHSM キーストアの使用

Jarsigner は、HSM に安全に保存されているキーを使用して JAR ファイルに署名するための一般的なコマンドラインユーティリティです。Jarsigner に関する完全なチュートリアルは、 AWS CloudHSM ドキュメントの範囲外です。このセクションでは、 AWS CloudHSM キーストアを通じて信頼のルート AWS CloudHSM として を使用して署名に署名および検証するために使用する Jarsigner パラメータについて説明します。

キーと証明書のセットアップ

Jarsigner を使用して JAR ファイルに署名する前に、次の手順を設定または完了していることを確認してください。

  1. AWS CloudHSM キーストアの前提条件」のガイダンスに従います。

  2. 現在のサーバーまたはクライアントインスタンスのキーストアに保存する必要がある署名 AWS CloudHSM キー、関連する証明書、証明書チェーンを設定します。でキーを作成し AWS CloudHSM 、関連するメタデータを AWS CloudHSM キーストアにインポートします。keytool を使用してキーおよび証明書を設定する場合は、「keytool で新しいキーを作成する」を参照してください。複数のクライアントインスタンスを使用して JAR に署名する場合は、キーを作成し、証明書チェーンをインポートします。次に、結果のキーストアファイルを各クライアントインスタンスにコピーします。新しいキーを頻繁に生成する場合は、各クライアントインスタンスに証明書を個別にインポートする方が簡単です。

  3. 証明書チェーン全体が検証可能である必要があります。証明書チェーンを検証できるようにするには、CA 証明書と中間証明書を AWS CloudHSM キーストアに追加する必要がある場合があります。Java コードを使用して証明書チェーンを検証する方法については、「AWS CloudHSM とJarsignerを使用してJARファイルに署名する」のコードスニペットを参照してください。必要に応じて、keytool を使用して証明書をインポートできます。keytool を使用する手順については、「keytool を使用して中間証明書とルート証明書を AWS CloudHSM キーストアにインポートする 」を参照してください。

AWS CloudHSM とJarsignerを使用してJARファイルに署名する

JAR ファイルに署名するには、次のコマンドを使用します。

Linux;

OpenJDK 8 の場合

jarsigner -keystore my_keystore.store \ -signedjar signthisclass_signed.jar \ -sigalg sha512withrsa \ -storetype CloudHSM \ -J-classpath '-J/opt/cloudhsm/java/*:/usr/lib/jvm/java-1.8.0/lib/tools.jar' \ -J-Djava.library.path=/opt/cloudhsm/lib \ signthisclass.jar <key pair label>

OpenJDK 11、OpenJDK 17、および OpenJDK 21 の場合

jarsigner -keystore my_keystore.store \ -signedjar signthisclass_signed.jar \ -sigalg sha512withrsa \ -storetype CloudHSM \ -J-classpath '-J/opt/cloudhsm/java/*' \ -J-Djava.library.path=/opt/cloudhsm/lib \ signthisclass.jar <key pair label>
Windows

OpenJDK8 向け

jarsigner -keystore my_keystore.store ` -signedjar signthisclass_signed.jar ` -sigalg sha512withrsa ` -storetype CloudHSM ` -J-classpath '-JC:\Program Files\Amazon\CloudHSM\java\*;C:\Program Files\Java\jdk1.8.0_331\lib\tools.jar' ` "-J-Djava.library.path='C:\Program Files\Amazon\CloudHSM\lib\'" ` signthisclass.jar <key pair label>

OpenJDK 11、OpenJDK 17、および OpenJDK 21 の場合

jarsigner -keystore my_keystore.store ` -signedjar signthisclass_signed.jar ` -sigalg sha512withrsa ` -storetype CloudHSM ` -J-classpath '-JC:\Program Files\Amazon\CloudHSM\java\*'` "-J-Djava.library.path='C:\Program Files\Amazon\CloudHSM\lib\'" ` signthisclass.jar <key pair label>

署名付き JAR を確認するには、次のコマンドを使用します。

Linux

OpenJDK8 向け

jarsigner -verify \ -keystore my_keystore.store \ -sigalg sha512withrsa \ -storetype CloudHSM \ -J-classpath '-J/opt/cloudhsm/java/*:/usr/lib/jvm/java-1.8.0/lib/tools.jar' \ -J-Djava.library.path=/opt/cloudhsm/lib \ signthisclass_signed.jar <key pair label>

OpenJDK 11、OpenJDK 17、および OpenJDK 21 の場合

jarsigner -verify \ -keystore my_keystore.store \ -sigalg sha512withrsa \ -storetype CloudHSM \ -J-classpath '-J/opt/cloudhsm/java/*' \ -J-Djava.library.path=/opt/cloudhsm/lib \ signthisclass_signed.jar <key pair label>
Windows

OpenJDK 8 の場合

jarsigner -verify ` -keystore my_keystore.store ` -sigalg sha512withrsa ` -storetype CloudHSM ` -J-classpath '-JC:\Program Files\Amazon\CloudHSM\java\*;C:\Program Files\Java\jdk1.8.0_331\lib\tools.jar' ` "-J-Djava.library.path='C:\Program Files\Amazon\CloudHSM\lib\'" ` signthisclass_signed.jar <key pair label>

OpenJDK 11、OpenJDK 17、および OpenJDK 21 の場合

jarsigner -verify ` -keystore my_keystore.store ` -sigalg sha512withrsa ` -storetype CloudHSM ` -J-classpath '-JC:\Program Files\Amazon\CloudHSM\java\*` "-J-Djava.library.path='C:\Program Files\Amazon\CloudHSM\lib\'" ` signthisclass_signed.jar <key pair label>

既知の問題

  1. Keytool と Jarsigner では EC キーはサポートされていません。