

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

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

クラスは AWS CloudHSM `KeyStore`、専用 PKCS12 キーストアを提供します。このキーストアでは、証明書をキーデータとともに保存し、 AWS CloudHSMに保存されているキーデータに関連付けることができます。`KeyStore` クラスは、Java AWS CloudHSM Cryptography Extension (JCE) の`KeyStore`サービスプロバイダーインターフェイス (SPI) を実装します。`KeyStore` の使用の詳細については、「[Class KeyStore](https://devdocs.io/openjdk~8/java/security/keystore)」を参照してください。

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

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

 AWS CloudHSM Java Cryptographic Extension (JCE) プロバイダーは、専用 AWS CloudHSM KeyStore を提供しています。クラスは、HSM AWS CloudHSM `KeyStore`へのキーオペレーションのオフロード、証明書のローカルストレージ、および証明書ベースのオペレーションをサポートしています。

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

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

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

JCE プロバイダーにログインするのと同じ方法で、 AWS CloudHSM KeyStore にログインします。環境変数またはシステムプロパティファイルを使用できます。CloudHSM KeyStore を使用する前にログインする必要があります。JCE プロバイダーを使用して HSM にログインする例については、[Login to an HSM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/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);
```

## Use AWS CloudHSM KeyStore または AWS CloudHSM クライアント SDK 5
<a name="using_cloudhsm_keystore_5"></a>

AWS CloudHSM KeyStore は JCE [Class KeyStore](https://devdocs.io/openjdk~8/java/security/keystore) 仕様に準拠しており、以下の関数を提供します。
+ `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 ではサポートされていません。[Destroyable](https://devdocs.io/openjdk~8/javax/security/auth/destroyable#destroy--) インターフェースの `destroy` メソッドを使用してキーを削除できます。

  ```
  ((Destroyable) key).destroy();
  ```
+ `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 5 ではサポートされていません。**
+ `Key` オブジェクトのある `setKeyEntry`

  指定されたキーを指定されたエイリアスに割り当て、HSM 内に保存します。キーが HSM 内にまだ存在しない場合は、抽出可能なセッションキーとして HSM にインポートされます。

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

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

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

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