本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 JCE 提供者連線到多個叢集
此組態可讓單一用戶端執行個體與多個叢集進行通訊。與單一執行個體僅能與單一叢集進行通訊相比,該組態可節省某些使用案例的成本。該CloudHsmProvider
類 AWS CloudHSM是 Java 安全提供程序類
下面範例會將此類別實例化,並將其新增至 Java 安全提供者清單:
if (Security.getProvider(CloudHsmProvider.PROVIDER_NAME) == null) { Security.addProvider(new CloudHsmProvider()); }
CloudHsmProvider
組態
可以使用下列兩種方式來對 CloudHsmProvider
進行設定:
使用檔案進行設定 (預設組態)
使用程式碼設定
使用檔案進行設定 (預設組態)
當您使用預設建構函數實例化 CloudHsmProvider
時,根據預設,它會在 Linux 的 /opt/cloudhsm/etc/cloudhsm-jce.cfg
路徑中尋找組態檔案。可使用 configure-jce
設定此組態檔案。
使用預設的建構函數所建立的物件將會使用預設的 CloudHSM 提供者名稱 CloudHSM
。提供者名稱有助於與 JCE 進行互動,以讓它了解各種作業應使用哪個提供者。以下為使用 CloudHSM 提供者名稱進行加密作業的範例:
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "CloudHSM");
使用程式碼設定
從用戶端 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
,然後您可以使用提供者物件或使用提供者名稱與該叢集互動,如下列範例所顯示。
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);
在同一個應用程序中使用提供者名稱在第二個叢集上產生「AES」金鑰,您還可以使用下列範例:
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", provider2.getName());