Verbindung zu mehreren Clustern mit dem JCE-Anbieter herstellen - AWS CloudHSM

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verbindung zu mehreren Clustern mit dem JCE-Anbieter herstellen

Diese Konfiguration ermöglicht es einer einzelnen Client-Instance, mit mehreren Clustern zu kommunizieren Wenn Sie eine einzelne Instance haben, die nur mit einem einzigen Cluster kommuniziert, kann diese Konfiguration in einigen Anwendungsfällen zu Kosteneinsparungen führen. Die CloudHsmProvider Klasse AWS CloudHSM ist die Implementierung der Provider-Klasse von Java Security. Jede Instanz dieser Klasse stellt eine Verbindung zu Ihrem gesamten AWS CloudHSM Cluster dar. Sie instanziieren diese Klasse und fügen sie der Liste der Java-Security-Anbieter hinzu, sodass Sie mit ihr über Standard-JCE-Klassen interagieren können.

Das folgende Beispiel instanziiert diese Klasse und fügt sie der Liste der Java-Security-Anbieter hinzu:

if (Security.getProvider(CloudHsmProvider.PROVIDER_NAME) == null) { Security.addProvider(new CloudHsmProvider()); }

CloudHsmProvider-Konfiguration

CloudHsmProvider kann auf zwei Arten konfiguriert werden:

  1. Mit Datei konfigurieren (Standardkonfiguration)

  2. Mit Code konfigurieren

Mit Datei konfigurieren (Standardkonfiguration)

Wenn Sie CloudHsmProvider mit dem Standardkonstruktor instanziieren, sucht er unter Linux standardmäßig nach einer Konfigurationsdatei im /opt/cloudhsm/etc/cloudhsm-jce.cfg-Pfad. Diese Konfigurationsdatei kann mit der Datei configure-jce konfiguriert werden.

Ein mit dem Standardkonstruktor erstelltes Objekt verwendet den standardmäßigen CloudHSM-Anbieternamen CloudHSM. Der Anbietername ist nützlich, um mit JCE zu interagieren und ihm mitzuteilen, welcher Anbieter für verschiedene Operationen verwendet werden soll. Ein Beispiel für die Verwendung des CloudHSM-Anbieternamens für den Chiffriervorgang lautet wie folgt:

Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "CloudHSM");

Mit Code konfigurieren

Ab Version 5.8.0 des Client-SDK können Sie den CloudHsmProvider auch mithilfe von Java-Code konfigurieren. Dazu verwenden Sie ein Objekt der CloudHsmProviderConfig-Klasse. Sie können CloudHsmProviderConfigBuilder verwenden, um dieses Objekt zu erstellen.

CloudHsmProvider hat einen anderen Konstruktor, der das CloudHsmProviderConfig-Objekt aufnimmt, wie das folgende Beispiel zeigt.

CloudHsmProviderConfig config = CloudHsmProviderConfig.builder() .withCluster( CloudHsmCluster.builder() .withHsmCAFilePath(hsmCAFilePath) .withClusterUniqueIdentifier("CloudHsmCluster1") .withServer(CloudHsmServer.builder().withHostIP(hostName).build()) .build()) .build(); CloudHsmProvider provider = new CloudHsmProvider(config);

In diesem Beispiel lautet der Name des JCE-Anbieters CloudHsmCluster1. Dies ist der Name, den die Anwendung dann für die Interaktion mit JCE verwenden kann:

Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "CloudHsmCluster1");

Alternativ können Anwendungen auch das oben erstellte Anbieter-Objekt verwenden, um JCE mitzuteilen, dass es diesen Anbieter für die Operation verwenden soll:

Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", provider);

Wenn mit der withClusterUniqueIdentifier-Methode kein eindeutiger Bezeichner angegeben wird, wird ein zufällig generierter Anbietername für Sie erstellt. Um diesen zufällig generierten Bezeichner zu erhalten, können Anwendungen provider.getName() aufrufen, um den Bezeichner abzurufen.

Verbindung zu mehreren Clustern herstellen

Wie oben angegeben, steht jeder CloudHsmProvider für eine Verbindung zu Ihrem CloudHSM-Cluster. Wenn Sie mit einem anderen Cluster aus derselben Anwendung kommunizieren möchten, können Sie ein anderes Objekt von CloudHsmProvider mit Konfigurationen für Ihren anderen Cluster erstellen und mit diesem anderen Cluster entweder über das Anbieterobjekt oder über den Anbieternamen interagieren, wie im folgenden Beispiel gezeigt.

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); }

Nachdem Sie beide Anbieter (beide Cluster) oben konfiguriert haben, können Sie entweder über das Anbieterobjekt oder über den Anbieternamen mit ihnen interagieren.

Ausgehend von diesem Beispiel, das zeigt, wie man mit jemandem sprichtcluster1, könnten Sie das folgende Beispiel für eine AES/GCM/-Operation NoPadding verwenden:

Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", provider1);

Und in derselben Anwendung zur Generierung von „AES“-Schlüsseln auf dem zweiten Cluster mit dem Anbieternamen könnten Sie auch das folgende Beispiel verwenden:

Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", provider2.getName());