クライアント SDK 3 向けの AWS CloudHSM KeyStore Java クラス - AWS CloudHSM

クライアント SDK 3 向けの AWS CloudHSM KeyStore Java クラス

AWS CloudHSM と KeyStore のクラスは、keytooljarsigner のようなアプリケーションを通して、AWS CloudHSM のキーへのアクセスを許可する特別な目的の PKCS12 キーストアを提供します。このキーストアでは、証明書をキーデータとともに保存し、AWS CloudHSM に保存されているキーデータに関連付けることができます。

注記

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

AWS CloudHSM KeyStore クラスは、Java 暗号化拡張 (JCE) の KeyStore サービスプロバイダインタフェース (SPI) を実装します。KeyStore の使用の詳細については、「Class KeyStore」を参照してください。

AWS CloudHSM クライアント SDK 3 に適したキーストアを選択する

AWS CloudHSM の Cryptographic Extension (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 を初期化する

JCE プロバイダーにログインするのと同じ方法で、AWS CloudHSM KeyStore にログインします。環境変数またはシステムプロパティファイルを使用できます。CloudHSM KeyStore を使用する前にログインする必要があります。JCE プロバイダーを使用して HSM にログインする例については、Login to an HSM を参照してください。

必要に応じて、パスワードを指定して、キーストアデータを保持するローカル PKCS12 ファイルを暗号化できます。AWS CloudHSM キーストアを作成する際に、パスワードを設定し、ロード、設定、および取得メソッドを使用するときにそれを提供します。

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

ks.load(null, null);

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

ks.load(inputStream, password);

AWS CloudHSM クライアントSDK 3 で AWS CloudHSM KeyStore を使用する

CloudHSM KeyStore オブジェクトは、通常、jarsignerkeytool などのサードパーティー製アプリケーションを通じて使用されます。コードを使用してオブジェクトに直接アクセスすることもできます。

AWS CloudHSM キーストアは、JCE Class 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 ではサポートされていません。CloudHSM の key_mgmt_util ツールを使用してキーを削除できます。

  • 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 メソッドを使用して証明書をキーに関連付けることができます。

  • SetKeyEntry キーのある byte[]

    この API は現在、クライアント SDK 3 ではサポートされていません。

  • SetKeyEntry オブジェクトのある Key

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

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

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

  • EngineSize

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

  • Store

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