

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.

# Erweiterte Konfigurationen für AWS CloudHSM JCE für Client SDK 5
<a name="java-lib-configs"></a>

Der AWS CloudHSM JCE-Anbieter umfasst die folgenden erweiterten Konfigurationen, die nicht Teil der allgemeinen Konfigurationen sind, die die meisten Kunden verwenden.
+ [Verbindung zu mehreren Clustern herstellen](java-lib-configs-multi.md)
+ [Schlüsselextraktion mit JCE](java-lib-configs-getencoded.md)
+ [Versuchen Sie erneut, die Konfiguration für JCE zu konfigurieren](java-lib-configs-retry.md)

# Verbindung zu mehreren AWS CloudHSM Clustern mit dem JCE-Anbieter herstellen
<a name="java-lib-configs-multi"></a>

Diese Konfiguration ermöglicht es einer einzelnen Client-Instance, mit mehreren AWS CloudHSM 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](https://docs.oracle.com/javase/8/docs/api/java/security/Provider.html). 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` kann auf zwei Arten konfiguriert werden:

1. Mit Datei konfigurieren (Standardkonfiguration)

1. Mit Code konfigurieren

In den folgenden Themen werden diese Konfigurationen und das Herstellen einer Verbindung zu mehreren Clustern beschrieben.

**Topics**
+ [Konfigurieren Sie die AWS CloudHSM `CloudHsmProvider` Klasse mit einer Datei (Standardkonfiguration)](java-lib-configs-default.md)
+ [Konfigurieren Sie die AWS CloudHSM `CloudHsmProvider` Klasse mithilfe von Code](java-lib-configs-using-code.md)
+ [Connect zu mehreren AWS CloudHSM Clustern her](java-lib-connecting-to-multiclusters.md)

# Konfigurieren Sie die AWS CloudHSM `CloudHsmProvider` Klasse mit einer Datei (Standardkonfiguration)
<a name="java-lib-configs-default"></a>

Die AWS CloudHSM `CloudHsmProvider` Klasse wird standardmäßig mit einer Datei konfiguriert.

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");
```

# Konfigurieren Sie die AWS CloudHSM `CloudHsmProvider` Klasse mithilfe von Code
<a name="java-lib-configs-using-code"></a>

Ab Version 5.8.0 des Client SDK können Sie die AWS CloudHSM `CloudHsmProvider` Klasse 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.

**Example**  

```
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 verwenden kann, um mit JCE zu interagieren:

**Example**  

```
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.

# Connect zu mehreren AWS CloudHSM Clustern her
<a name="java-lib-connecting-to-multiclusters"></a>

Jedes `CloudHsmProvider` steht für eine Verbindung zu Ihrem AWS 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.

**Example**  

```
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 spricht`cluster1`, könnten Sie das folgende Beispiel für eine AES/GCM/NoPadding Operation 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());
```

# Schlüsselextraktion mit JCE für AWS CloudHSM
<a name="java-lib-configs-getencoded"></a>

Die Java Cryptography Extension (JCE) verwendet eine Architektur, mit der verschiedene Kryptografie-Implementierungen integriert werden können. AWS CloudHSM liefert einen solchen JCE-Anbieter aus, der kryptografische Operationen an das HSM auslagert. Damit die meisten anderen JCE-Anbieter mit Schlüsseln arbeiten können, die in AWS CloudHSM gespeichert sind, müssen sie die Schlüsselbytes von Ihnen HSMs im Klartext in den Speicher Ihres Computers extrahieren, damit sie sie verwenden können. HSMs Erlauben normalerweise nur das Extrahieren von Schlüsseln als verpackte Objekte, nicht als Klartext. Um Anwendungsfälle der anbieterübergreifenden Integration zu unterstützen, ist jedoch eine optionale Konfigurationsoption möglich, mit der die Extraktion der Schlüsselbytes im Klartext AWS CloudHSM ermöglicht wird.

**Wichtig**  
JCE lagert Operationen immer dann aus, AWS CloudHSM wenn der AWS CloudHSM CloudHSM-Anbieter angegeben oder ein AWS CloudHSM Schlüsselobjekt verwendet wird. Sie müssen Schlüssel nicht im Klartext extrahieren, wenn Sie erwarten, dass Ihre Operation innerhalb des HSM stattfindet. Die Schlüsselextraktion im Klartext ist nur erforderlich, wenn Ihre Anwendung aufgrund von Einschränkungen durch eine Drittanbieterbibliothek oder einen JCE-Anbieter keine sicheren Mechanismen wie das sogenannte Wrapping und Unwrapping eines Schlüssels verwenden kann. 

Der AWS CloudHSM JCE-Anbieter ermöglicht standardmäßig das Extrahieren von **öffentlichen Schlüsseln**, sodass er mit externen JCE-Anbietern funktioniert. Die folgenden Methoden sind immer zulässig:


| Klasse | Methode | Format (getEncoded) | 
| --- | --- | --- | 
| EcPublicKey | getEncoded() | X.509 | 
|  | getW() | – | 
| RSAPublicSchlüssel | getEncoded() | X.509 | 
|  | getPublicExponent() | – | 
| CloudHsmRsaPrivateCrtKey | getPublicExponent() | – | 

Der AWS CloudHSM JCE-Anbieter erlaubt standardmäßig keine Extraktion von Schlüsselbytes im Klartext für **private** oder **geheime** Schlüssel. Wenn Ihr Anwendungsfall dies erfordert, können Sie die Extraktion von Schlüsselbytes im Klartext für **private** oder **geheime** Schlüssel unter den folgenden Bedingungen aktivieren:

1. Das `EXTRACTABLE`-Attribut für private und geheime Schlüssel ist auf **true** gesetzt.
   + Standardmäßig ist das `EXTRACTABLE`-Attribut für private und geheime Schlüssel auf **true** gesetzt. `EXTRACTABLE`-Schlüssel sind Schlüssel, die aus dem HSM exportiert werden dürfen. Weitere Informationen finden Sie unter Unterstützte Java-Attribute für [Client-SDK 5](java-lib-attributes_5.md).

1. Das `WRAP_WITH_TRUSTED`-Attribut für private und geheime Schlüssel ist auf **falsch** gesetzt.
   + `getEncoded`, `getPrivateExponent` und `getS` können nicht mit privaten Schlüsseln verwendet werden, die nicht in Klartext exportiert werden können. `WRAP_WITH_TRUSTED` erlaubt nicht, dass Ihre privaten Schlüssel in Klartext aus dem HSM exportiert werden. Weitere Informationen finden Sie unter [Verwenden vertrauenswürdiger Schlüssel zur Steuerung des Entpackens von Schlüsseln](manage-keys-using-trusted-keys.md).

# Erlaubt dem JCE-Anbieter, geheime private Schlüssel aus zu extrahieren AWS CloudHSM
<a name="get-encoded-take-out-private-keys"></a>

Gehen Sie wie folgt vor, damit der AWS CloudHSM JCE-Anbieter Ihre privaten Schlüssel extrahieren kann.

**Wichtig**  
Diese Konfigurationsänderung ermöglicht das Extrahieren aller `EXTRACTABLE`-Schlüsselbytes aus Ihrem HSM-Cluster im Klartext. Aus Sicherheitsgründen sollten Sie erwägen, Schlüssel mithilfe von [Methoden zum Wrapping von Schlüsseln](java-lib-supported_5.md) sicher aus dem HSM zu extrahieren. Dadurch wird ein unbeabsichtigtes Extrahieren Ihrer Schlüsselbytes aus dem HSM verhindert. 

1. Verwenden Sie die folgenden Befehle, um das Extrahieren Ihrer **privaten** oder **geheimen** Schlüssel in JCE zu ermöglichen:

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/configure-jce --enable-clear-key-extraction-in-software
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-jce.exe" --enable-clear-key-extraction-in-software
   ```

------

1. Sobald Sie die Extraktion Ihres eindeutigen Schlüssels aktivieren, sind die folgenden Methoden zur Extraktion privater Schlüssel in den Speicher aktiviert.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/cloudhsm/latest/userguide/get-encoded-take-out-private-keys.html)

Wenn Sie das Standardverhalten wiederherstellen und JCE nicht erlauben möchten, Schlüssel im Klartext zu exportieren, führen Sie den folgenden Befehl aus:

------
#### [ Linux ]

```
$ /opt/cloudhsm/bin/configure-jce --disable-clear-key-extraction-in-software
```

------
#### [ Windows ]

```
PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-jce.exe" --disable-clear-key-extraction-in-software
```

------

# Befehle für JCE wiederholen für AWS CloudHSM
<a name="java-lib-configs-retry"></a>

AWS CloudHSM Das Client-SDK 5.8.0 und höher verfügen über eine integrierte automatische Wiederholungsstrategie, mit der HSM-gedrosselte Operationen von der Clientseite aus wiederholt werden. Wenn ein HSM Operationen drosselt, weil es mit der Ausführung früherer Operationen zu beschäftigt ist und keine weiteren Anfragen annehmen kann, versucht der Client, gedrosselte Operationen bis zu dreimal zu wiederholen, während er SDKs sich exponentiell zurückzieht. Diese automatische Wiederholungsstrategie kann auf einen von zwei Modi eingestellt werden: **aus** und **Standard**.
+ **aus**: Das Client-SDK führt bei gedrosselten Vorgängen durch das HSM keine Wiederholungsstrategie durch.
+ **Standard**: Dies ist der Standardmodus für das Client-SDK 5.8.0 und höher. In diesem Modus wiederholt der Client automatisch gedrosselte Operationen, indem er SDKs sich exponentiell zurückzieht.

Weitere Informationen finden Sie unter [HSM-Drosselung](troubleshoot-hsm-throttling.md).

## Stellen Sie den Modus für Wiederholungsbefehle auf Aus
<a name="w2aac25c21c25c25c15b9"></a>

------
#### [ Linux ]

**So setzen Sie Wiederholungsbefehle auf **off** für Client-SDK 5 unter Linux**
+ Sie können den folgenden Befehl verwenden, um die Konfiguration der Wiederholungen auf den **off**-Modus zu setzen:

  ```
  $ sudo /opt/cloudhsm/bin/configure-jce --default-retry-mode off
  ```

------
#### [ Windows ]

**So setzen Sie Wiederholungsbefehle auf **off** für Client-SDK 5 unter Windows**
+ Sie können den folgenden Befehl verwenden, um die Konfiguration der Wiederholungen auf den **off**-Modus zu setzen:

  ```
  PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-jce.exe" --default-retry-mode off
  ```

------