

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

# クライアント SDK 3 のAWS CloudHSM KeyStore Java クラス
<a name="alternative-keystore"></a>

クラスは、**keytool** AWS CloudHSM `KeyStore`や **jarsigner** などのアプリケーションを通じて AWS CloudHSM キーへのアクセスを許可する専用 PKCS12 キーストアを提供します。このキーストアでは、証明書をキーデータとともに保存し、 AWS CloudHSMに保存されているキーデータに関連付けることができます。

**注記**  
証明書は公開情報であり、暗号化キーのストレージ容量を最大化するため、 AWS CloudHSM は HSMs への証明書の保存をサポートしていません。

クラスは、Java AWS CloudHSM `KeyStore`Cryptography Extension (JCE) の`KeyStore`サービスプロバイダーインターフェイス (SPI) を実装します。`KeyStore` の使用の詳細については、「[Class KeyStore](https://docs.oracle.com/javase/8/docs/api/java/security/KeyStore.html)」を参照してください。

## AWS CloudHSM クライアント SDK 3 に適したキーストアを選択する
<a name="choosing_keystore"></a>

 AWS CloudHSM Java 暗号化拡張 (JCE) プロバイダーには、すべてのトランザクションを HSM に渡すデフォルトのパススルー読み取り専用キーストアが付属しています。このデフォルトのキーストアは、特殊な目的の AWS CloudHSM KeyStore とは異なります。ほとんどの場合、デフォルトを使用することにより、ランタイムのパフォーマンスとスループットが向上します。 AWS CloudHSM KeyStoreは、キーオペレーションを HSM にオフロードするだけでなく、証明書と証明書ベースのオペレーションのサポートが必要なアプリケーションにのみ使用してください。

どちらのキーストアも操作に Cavium JCE プロバイダを使用しますが、これらは独立したエンティティであり、相互に情報を交換しません。

Java アプリケーションのデフォルトのキーストアを次のようにロードします。

```
KeyStore ks = KeyStore.getInstance("Cavium");
```

次のように、特殊目的の CloudHSM KeyStore をロードします。

```
KeyStore ks = KeyStore.getInstance("CloudHSM")
```

## クライアント SDK 3 の AWS CloudHSM KeyStore を初期化する
<a name="initialize_cloudhsm_keystore"></a>

JCE プロバイダーにログインするのと同じ方法で、 AWS CloudHSM KeyStore にログインします。環境変数またはシステムプロパティファイルを使用できます。CloudHSM KeyStore を使用する前にログインする必要があります。JCE プロバイダーを使用して HSM にログインする例については、[Login to an HSM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/LoginRunner.java) を参照してください。

必要に応じて、パスワードを指定して、キーストアデータを保持するローカル PKCS12 ファイルを暗号化できます。 AWS CloudHSM Keystore を作成するときは、パスワードを設定し、ロード、設定、取得の方法を使用するときに指定します。

新しい CloudHSM KeyStore オブジェクトを次のようにインスタンス化します。

```
ks.load(null, null);
```

`store` メソッドを使用して、キーストアデータをファイルに書き込みます。その後は、次のように、ソースファイルとパスワードを使用し、`load` メソッドを使用して既存のキーストアをロードできます。

```
ks.load(inputStream, password);
```

## AWS CloudHSM クライアント SDK 3 に AWS CloudHSM KeyStoreを使用する
<a name="using_cloudhsm_keystore"></a>

CloudHSM KeyStore オブジェクトは、通常、[jarsigner](https://docs.oracle.com/javase/8/docs/technotes/tools/windows/jarsigner.html) や [keytool](https://docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html) などのサードパーティー製アプリケーションを通じて使用されます。コードを使用してオブジェクトに直接アクセスすることもできます。

AWS CloudHSM KeyStore は JCE [Class KeyStore](https://docs.oracle.com/javase/8/docs/api/java/security/KeyStore.html) 仕様に準拠しており、次の関数を提供します。
+ `load`

  指定された入力ストリームからキーストアをロードします。キーストアの保存時にパスワードが設定されている場合、ロードを成功させるには、この同じパスワードを指定する必要があります。新しい空のキーストアを初期化するには、両方のパラメータを null に設定します。

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  ks.load(inputStream, password);
  ```
+ `aliases`

  指定されたキーストアインスタンス内に含まれるすべてのエントリのエイリアス名の列挙を返します。結果には、PKCS12 ファイルにローカルに保存されたオブジェクトと、HSM 上に存在するオブジェクトが含まれます。

  **サンプルコード:**

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  for(Enumeration<String> entry = ks.aliases(); entry.hasMoreElements();) 
  	{    
  		String label = entry.nextElement();    
  		System.out.println(label);
  	}
  ```
+ `ContainsAlias`

  キーストアが、指定されたエイリアスを持つ少なくとも 1 つのオブジェクトにアクセスできる場合は true を返します。キーストアは、PKCS12 ファイルにローカルに保存されているオブジェクトと、HSM 上に存在するオブジェクトをチェックします。
+ `DeleteEntry`

  ローカル PKCS12 ファイルから証明書エントリを削除します。HSM に保存されているキーデータの削除は、 AWS CloudHSM KeyStore ではサポートされていません。CloudHSM の [key\_mgmt\_util](https://docs.aws.amazon.com/cloudhsm/latest/userguide/key_mgmt_util.html) ツールを使用してキーを削除できます。
+ `GetCertificate`

  使用可能な場合、エイリアスに関連付けられた証明書を返します。エイリアスが存在しないか、証明書ではないオブジェクトを参照している場合、関数は NULL を返します。

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  Certificate cert = ks.getCertificate(alias)
  ```
+ `GetCertificateAlias`

  指定された証明書とデータが一致する最初のキーストアエントリの名前 (エイリアス) を返します。

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  String alias = ks.getCertificateAlias(cert)
  ```
+ `GetCertificateChain`

  指定されたエイリアスに関連付けられた証明書チェーンを返します。エイリアスが存在しないか、証明書ではないオブジェクトを参照している場合、関数は NULL を返します。
+ `GetCreationDate`

  指定されたエイリアスによって識別されるエントリの作成日を返します。作成日が使用できない場合、この関数は証明書が有効になった日付を返します。
+ `GetKey`

  GetKey が HSM に渡され、指定されたラベルに対応するキーオブジェクトを返します。`getKey` が HSM を直接照会すると、KeyStore によって生成されたかどうかに関係なく、HSM 上の任意のキーに使用できます。

  ```
  Key key = ks.getKey(keyLabel, null);
  ```
+ `IsCertificateEntry`

  指定されたエイリアスを持つエントリが証明書エントリを表すかどうかをチェックします。
+ `IsKeyEntry`

  指定されたエイリアスを持つエントリがキーエントリを表すかどうかをチェックします。このアクションは、PKCS12 ファイルと HSM の両方でエイリアスを検索します。
+ `SetCertificateEntry`

  指定された証明書を指定されたエイリアスに割り当てます。指定されたエイリアスがキーまたは証明書の識別にすでに使用されている場合は、`KeyStoreException` がスローされます。JCE コードを使用してキーオブジェクトを取得し、KeyStore `SetKeyEntry` メソッドを使用して証明書をキーに関連付けることができます。
+ `byte[]` キーのある `SetKeyEntry`

  **この API は現在、クライアント SDK 3 ではサポートされていません。**
+ `Key` オブジェクトのある `SetKeyEntry`

  指定されたキーを指定されたエイリアスに割り当て、HSM 内に保存します。`Key` オブジェクトが `CaviumKey` のタイプでない場合、キーは抽出可能なセッションキーとして HSM にインポートされます。

  `Key` オブジェクトが `PrivateKey` のタイプの場合、対応する証明書チェーンが添付されている必要があります。

  エイリアスが既に存在する場合、`SetKeyEntry` 呼び出しは `KeyStoreException` をスローし、キーが上書きされるのを防ぎます。キーを上書きする必要がある場合は、そのために KMU または JCE を使用します。
+ `EngineSize`

  キーストア内のエントリの数を返します。
+ `Store`

  キーストアを指定された出力ストリームに PKCS12 ファイルとして保存し、指定されたパスワードで保護します。さらに、ロードされたすべてのキー (`setKey` 呼び出しを使用して設定される) が保持されます。