翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
JCE プロバイダーによる複数のクラスターへの接続
この構成では、1 つのクライアントインスタンスが複数のクラスターと通信できます。1 つのインスタンスが 1 つのクラスターとしか通信しない場合と比較して、これは一部のユースケースではコスト削減機能となる可能性があります。CloudHsmProvider
クラス は、Java セキュリティのプロバイダークラス の の
次の例では、このクラスをインスタンス化して Java セキュリティプロバイダのリストに追加します。
if (Security.getProvider(CloudHsmProvider.PROVIDER_NAME) == null) { Security.addProvider(new CloudHsmProvider()); }
CloudHsmProvider
の設定
CloudHsmProvider
は 2 つの方法で設定できます。
ファイルによる設定 (デフォルト設定)
コードを使用して設定
ファイルによる設定 (デフォルト設定)
デフォルトのコンストラクタを使用して CloudHsmProvider
をインスタンス化すると、デフォルトでは、Linux の /opt/cloudhsm/etc/cloudhsm-jce.cfg
パスで構成ファイルが検索されます。この設定ファイルは、configure-jce
を使用して設定できます。
デフォルトコンストラクターを使用して作成されたオブジェクトは、デフォルトの CloudHSM プロバイダー名 CloudHSM
を使用します。プロバイダー名は JCE とやり取りして、さまざまなオペレーションにどのプロバイダーを使用するかを判断するのに役立ちます。Cipher オペレーションに CloudHSM プロバイダー名を使用する例は次のとおりです。
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "CloudHSM");
コードを使用して設定
Client SDK バージョン 5.8.0 以降では、Java コードを使用して CloudHsmProvider
を設定することもできます。そのための方法は、CloudHsmProviderConfig
クラスのオブジェクトを使用することです。CloudHsmProviderConfigBuilder
を使用してこのオブジェクトを構築することができます。
CloudHsmProvider
には、次の例のように、CloudHsmProviderConfig
オブジェクトを取得する別のコンストラクターがあります。
CloudHsmProviderConfig config = CloudHsmProviderConfig.builder() .withCluster( CloudHsmCluster.builder() .withHsmCAFilePath(hsmCAFilePath) .withClusterUniqueIdentifier("CloudHsmCluster1") .withServer(CloudHsmServer.builder().withHostIP(hostName).build()) .build()) .build(); CloudHsmProvider provider = new CloudHsmProvider(config);
この例では、JCE プロバイダー名は CloudHsmCluster1
で、アプリケーションが JCE とやり取りするときに使用できる名前です。
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "CloudHsmCluster1");
あるいは、アプリケーションは上記で作成したプロバイダーオブジェクトを使用して、そのプロバイダーをオペレーションに使用することを JCE に知らせることもできます。
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", provider);
withClusterUniqueIdentifier
メソッドで一意の識別子が指定されていない場合は、ランダムに生成されたプロバイダー名が自動的に作成されます。このランダムに生成された識別子を取得するには、アプリケーションは provider.getName()
を呼び出して識別子を取得できます。
複数のクラスターへの接続
前述のように、それぞれ CloudHsmProvider
が CloudHSM クラスターへの接続を表します。同じアプリケーションから別のクラスターと通信したい場合は、別のクラスターの設定を使用して CloudHsmProvider
のオブジェクトをもう1つ作成し、次の例に示すように、プロバイダーオブジェクトまたはプロバイダー名を使用してこの他のクラスターとやり取りできます。
CloudHsmProviderConfig config = CloudHsmProviderConfig.builder() .withCluster( CloudHsmCluster.builder() .withHsmCAFilePath(hsmCAFilePath) .withClusterUniqueIdentifier("CloudHsmCluster1") .withServer(CloudHsmServer.builder().withHostIP(hostName).build()) .build()) .build(); CloudHsmProvider provider1 = new CloudHsmProvider(config); if (Security.getProvider(provider1.getName()) == null) { Security.addProvider(provider1); } CloudHsmProviderConfig config2 = CloudHsmProviderConfig.builder() .withCluster( CloudHsmCluster.builder() .withHsmCAFilePath(hsmCAFilePath2) .withClusterUniqueIdentifier("CloudHsmCluster2") .withServer(CloudHsmServer.builder().withHostIP(hostName2).build()) .build()) .build(); CloudHsmProvider provider2 = new CloudHsmProvider(config2); if (Security.getProvider(provider2.getName()) == null) { Security.addProvider(provider2); }
上記の両方のプロバイダー (両方のクラスター) を設定したら、プロバイダーオブジェクトまたはプロバイダー名を使用してプロバイダーを操作できます。
との通信方法を示すこの例を拡張するとcluster1
、AES/GCM/NoPadding オペレーションに次のサンプルを使用できます。
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", provider1);
同じアプリケーションで、プロバイダー名を使用して 2 番目のクラスターで「AES」キー生成を行う場合は、次のサンプルを使用することもできます。
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", provider2.getName());