クライアント SDK 3 向けの AWS CloudHSM KeyStore Java クラス
AWS CloudHSM と KeyStore のクラスは、keytool と jarsigner のようなアプリケーションを通して、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 オブジェクトは、通常、jarsigner
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指定されたエイリアスによって識別されるエントリの作成日を返します。作成日が使用できない場合、この関数は証明書が有効になった日付を返します。
-
GetKeyGetKey が HSM に渡され、指定されたラベルに対応するキーオブジェクトを返します。
getKeyが HSM を直接照会すると、KeyStore によって生成されたかどうかに関係なく、HSM 上の任意のキーに使用できます。Key key = ks.getKey(keyLabel, null); -
IsCertificateEntry指定されたエイリアスを持つエントリが証明書エントリを表すかどうかをチェックします。
-
IsKeyEntry指定されたエイリアスを持つエントリがキーエントリを表すかどうかをチェックします。このアクションは、PKCS12 ファイルと HSM の両方でエイリアスを検索します。
-
SetCertificateEntry指定された証明書を指定されたエイリアスに割り当てます。指定されたエイリアスがキーまたは証明書の識別にすでに使用されている場合は、
KeyStoreExceptionがスローされます。JCE コードを使用してキーオブジェクトを取得し、KeyStoreSetKeyEntryメソッドを使用して証明書をキーに関連付けることができます。 -
SetKeyEntryキーのあるbyte[]この API は現在、クライアント SDK 3 ではサポートされていません。
-
SetKeyEntryオブジェクトのあるKey指定されたキーを指定されたエイリアスに割り当て、HSM 内に保存します。
KeyオブジェクトがCaviumKeyのタイプでない場合、キーは抽出可能なセッションキーとして HSM にインポートされます。KeyオブジェクトがPrivateKeyのタイプの場合、対応する証明書チェーンが添付されている必要があります。エイリアスが既に存在する場合、
SetKeyEntry呼び出しはKeyStoreExceptionをスローし、キーが上書きされるのを防ぎます。キーを上書きする必要がある場合は、そのために KMU または JCE を使用します。 -
EngineSizeキーストア内のエントリの数を返します。
-
Storeキーストアを指定された出力ストリームに PKCS12 ファイルとして保存し、指定されたパスワードで保護します。さらに、ロードされたすべてのキー (
setKey呼び出しを使用して設定される) が保持されます。