

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.

# AWS CloudHSM SSL/TLS-Offload unter Linux mit NGINX oder mit OpenSSL Provider HAProxy
<a name="third-offload-linux-openssl-provider"></a>

Dieses Thema enthält step-by-step Anweisungen zum Einrichten des SSL/TLS Server-Identity-Offloads AWS CloudHSM auf einem Linux-Webserver mit NGINX oder HAProxy mit dem OpenSSL Provider.

**Topics**
+ [-Übersicht](#ssl-offload-linux-openssl-provider-overview)
+ [Schritt 1: Einrichten der Voraussetzungen](#ssl-offload-provider-prerequisites)
+ [Schritt 2: Generieren oder importieren Sie einen privaten Schlüssel und holen Sie sich ein Zertifikat](#ssl-offload-provider-generate-key-and-certificate)
+ [Schritt 3: Konfigurieren des Webservers](#ssl-offload-provider-configure-web-server)
+ [Schritt 4: Aktivieren von HTTPS-Datenverkehr und Verifizieren des Zertifikats](#ssl-offload-enable-traffic-and-verify-certificate-provider)

## -Übersicht
<a name="ssl-offload-linux-openssl-provider-overview"></a>

Unter Linux sind [NGINX](https://nginx.org/en/) und die [HAProxy](https://www.haproxy.org/)Webserver-Software in [OpenSSL integriert, um HTTPS zu unterstützen](https://www.openssl.org/). Der [AWS CloudHSM OpenSSL Provider](openssl-provider-library.md) stellt eine Schnittstelle bereit, die es der Webserver-Software ermöglicht, die HSMs in Ihrem Cluster für kryptografisches Offloading und Schlüsselspeicherung zu verwenden. Der OpenSSL Provider ist die Brücke, die den Webserver mit Ihrem AWS CloudHSM Cluster verbindet.

Um dieses Tutorial abzuschließen, müssen Sie NGINX konfigurieren oder HAProxy den AWS CloudHSM OpenSSL Provider verwenden. Das Tutorial zeigt Ihnen, wie Sie Folgendes tun können:
+ Installieren der Web-Server-Software auf einer Amazon EC2-Instance
+ Konfigurieren Sie die Webserver-Software so, dass sie HTTPS mit einem privaten Schlüssel unterstützt, der in Ihrem AWS CloudHSM -Cluster gespeichert ist.
+ (Optional) Verwenden Sie Amazon EC2, um eine zweite Webserver-Instance zu erstellen, und Elastic Load Balancing, um einen Load Balancer zu erstellen. Mit einem Load Balancer kann die Leistung durch Verteilung der Arbeitslast auf mehrere Server gesteigert werden. Sie kann auch für Redundanz und eine höhere Verfügbarkeit sorgen, falls ein oder mehrere Webserver ausfallen.

Wenn Sie bereit sind, sehen Sie sich [Schritt 1: Einrichten der Voraussetzungen](#ssl-offload-provider-prerequisites) an.

## Schritt 1: Einrichten der Voraussetzungen
<a name="ssl-offload-provider-prerequisites"></a>

Verschiedene Plattformen erfordern unterschiedliche Voraussetzungen. Verwenden Sie den Abschnitt mit den Voraussetzungen unten, der zu Ihrer Plattform passt.

### Voraussetzungen für AWS CloudHSM OpenSSL Provider
<a name="provider-new-versions"></a>

Um das Offload von SSL/TLS Webserver-Serveridentitäten mit AWS CloudHSM OpenSSL Provider for Client SDK 5 einzurichten, benötigen Sie Folgendes:
+ Ein aktiver AWS CloudHSM Cluster mit mindestens zwei Hardware-Sicherheitsmodulen (HSM)
**Anmerkung**  
Sie können einen einzelnen HSM-Cluster verwenden, müssen aber zuerst die Haltbarkeit der Client-Schlüssel deaktivieren. Weitere Informationen finden Sie unter [Einstellungen für die Haltbarkeit von Client-Schlüsseln verwalten](working-client-sync.md#client-sync-sdk8) und [Client-SDK 5 Configure Tool](configure-sdk-5.md).
+ Eine Amazon EC2-Instance, auf der ein Linux-Betriebssystem ausgeführt wird und die folgende Software installiert ist:
  + Ein Webserver (entweder NGINX oder) HAProxy
  + Der AWS CloudHSM OpenSSL-Anbieter für Client SDK 5
+ Ein [Crypto-Benutzer](understanding-users.md#crypto-user-chsm-cli) (CU), der den privaten Schlüssel des Webservers auf dem HSM besitzen und verwalten soll.

**So richten Sie eine Linux-Webserver-Instance auf dem HSM ein und erstellen einen CU**
**Anmerkung**  
Viele der Befehle in diesem Verfahren erfordern erhöhte Rechte. Abhängig von Ihrer Systemkonfiguration müssen Sie möglicherweise Befehle mit `sudo` oder als Root-Benutzer ausführen.

1. Installieren und konfigurieren Sie den AWS CloudHSM OpenSSL Provider für Client SDK 5. Weitere Informationen zur Installation des OpenSSL Providers finden Sie unter [AWS CloudHSM OpenSSL Provider for Client SDK 5.](openssl-provider-install.md)

1. Installieren Sie auf einer EC2-Linux-Instance, die Zugriff auf Ihren Cluster hat, entweder NGINX oder einen Webserver: HAProxy 

------
#### [ Amazon Linux 2023 ]
   + NGINX

     ```
     $ yum install nginx
     ```
   + HAProxy

     ```
     $ yum install haproxy
     ```

------
#### [ RHEL 9 (9.2\$1) ]
   + NGINX

     ```
     $ yum install nginx
     ```
   + HAProxy

     ```
     $ yum install haproxy
     ```

------
#### [ RHEL 10 (10.0\$1) ]
   + NGINX

     ```
     $ yum install nginx
     ```
   + HAProxy

     ```
     $ yum install haproxy
     ```

------
#### [ Ubuntu 24.04 ]
   + NGINX

     ```
     $ apt install nginx
     ```
   + HAProxy

     ```
     $ apt install haproxy
     ```

------

1. Verwenden Sie die CloudHSM-CLI, um einen [Crypto-Benutzer](understanding-users.md#crypto-user-chsm-cli) zu erstellen. Weitere Informationen zur Verwaltung von HSM-Benutzern finden Sie unter [HSM-Benutzer mit der CloudHSM-CLI verwalten](manage-hsm-users-chsm-cli.md).
**Tipp**  
Merken Sie sich den CU-Benutzernamen und das Passwort. Sie benötigen sie später beim Generieren oder Importieren des privaten HTTPS-Schlüssels und -Zertifikats für Ihren Webserver.

Nachdem Sie diese Schritte abgeschlossen haben, fahren Sie mit [Schritt 2: Generieren oder importieren Sie einen privaten Schlüssel und holen Sie sich ein Zertifikat](#ssl-offload-provider-generate-key-and-certificate) fort.

#### Hinweise
<a name="note-ssl5-provider-pre"></a>
+ Um Security-Enhanced Linux (SELinux) und Webserver zu verwenden, müssen Sie ausgehende TCP-Verbindungen auf Port 2223 zulassen, dem Port, den Client SDK 5 für die Kommunikation mit dem HSM verwendet.
+ Um einen Cluster zu erstellen und zu aktivieren und einer EC2-Instance Zugriff auf den Cluster zu gewähren, führen Sie die Schritte unter [Erste Schritte mit AWS CloudHSM](getting-started.md) aus. Die ersten Schritte bieten step-by-step Anweisungen zum Erstellen eines aktiven Clusters mit einem HSM und einer Amazon EC2 EC2-Client-Instance. Sie können diese Client-Instance als Ihren Webserver verwenden. 
+ Um zu vermeiden, dass die Haltbarkeit von Client-Schlüsseln deaktiviert wird, fügen Sie Ihrem Cluster mehr als ein HSM hinzu. Weitere Informationen finden Sie unter [Hinzufügen eines HSM zu einem Cluster AWS CloudHSM](add-hsm.md).
+ Um sich mit Ihrer Client-Instance zu verbinden, können Sie SSH oder PuTTY verwenden. Weitere Informationen finden Sie unter [Herstellung einer Verbindung zu Ihrer Linux-Instance mit SSH](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html) oder [Herstellung einer Verbindung zu Ihrer Linux-Instance von Windows mit PuTTY](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html) in der Amazon EC2-Dokumentation. 

## Schritt 2: Generieren oder importieren Sie einen privaten Schlüssel und holen Sie sich ein Zertifikat
<a name="ssl-offload-provider-generate-key-and-certificate"></a>

Um HTTPS zu aktivieren, benötigt Ihre Webserver-Anwendung (NGINX oder HAProxy) einen privaten Schlüssel und ein entsprechendes SSL/TLS Zertifikat. Um das Auslagern von SSL/TLS Webserver-Serveridentitäten mit verwenden zu können AWS CloudHSM, müssen Sie den privaten Schlüssel in einem HSM in Ihrem Cluster speichern. AWS CloudHSM Sie generieren zunächst einen privaten Schlüssel und verwenden diesen Schlüssel, um eine Certificate Signing Request (CSR) zu erstellen. Anschließend exportieren Sie einen *gefälschten privaten PEM-Schlüssel* aus dem HSM. Dabei handelt es sich um eine private Schlüsseldatei im PEM-Format, die einen Verweis auf den privaten Schlüssel enthält, der auf dem HSM gespeichert ist (es ist nicht der eigentliche private Schlüssel). Ihr Webserver verwendet die gefälschte private PEM-Schlüsseldatei, um den privaten Schlüssel auf dem HSM beim Auslagern der Serveridentität zu identifizieren. SSL/TLS 

### Generieren eines privaten Schlüssels
<a name="ssl-offload-provider-generate-private-key"></a>

In diesem Abschnitt erfahren Sie, wie Sie mithilfe der [CloudHSM-CLI](cloudhsm_cli.md) ein Schlüsselpaar generieren. Sobald Sie ein key pair im HSM generiert haben, können Sie es als gefälschte PEM-Datei exportieren und das entsprechende Zertifikat generieren. <a name="ssl-offload-provider-generate-private-key-prerequisites"></a>

**Installieren und konfigurieren Sie die CloudHSM-CLI**

1. [Installieren und konfigurieren Sie](cloudhsm_cli-getting-started.md) die CloudHSM-CLI.

1. Verwenden Sie den folgenden Befehl, um die CloudHSM-CLI zu starten.

   ```
   $ /opt/cloudhsm/bin/cloudhsm-cli interactive
   ```

1. Führen Sie den folgenden Befehl aus, um sich beim HSM anzumelden. Ersetzen Sie es *<user name>* durch den Benutzernamen Ihres Krypto-Benutzers

   ```
   aws-cloudhsm>login --username <user name> --role crypto-user
   ```

**Generieren eines privaten Schlüssels**

Je nach Anwendungsfall können Sie entweder ein RSA- oder ein EC-Schlüsselpaar generieren. Führen Sie eine der folgenden Aktionen aus:
+ So erstellen Sie einen privaten RSA-Schlüssel in einem HSM

  Verwenden Sie den [`key generate-asymmetric-pair rsa`](cloudhsm_cli-key-generate-asymmetric-pair-rsa.md)-Befehl, um ein RSA-Schlüsselpaar zu erzeugen. In diesem Beispiel wird ein RSA-Schlüsselpaar mit einem Modul von 2048, einem öffentlichen Exponenten von 65537, der Bezeichnung des öffentlichen Schlüssels von und der Bezeichnung des privaten Schlüssels von *tls\$1rsa\$1pub* generiert. *tls\$1rsa\$1private*

  ```
  aws-cloudhsm > key generate-asymmetric-pair rsa \
  --public-exponent 65537 \
  --modulus-size-bits 2048 \
  --public-label tls_rsa_pub \
  --private-label tls_rsa_private \
  --private-attributes sign=true
  {
    "error_code": 0,
    "data": {
      "public_key": {
        "key-reference": "0x0000000000280cc8",
        "key-info": {
          "key-owners": [
            {
              "username": "cu1",
              "key-coverage": "full"
            }
          ],
          "shared-users": [],
          "cluster-coverage": "full"
        },
        "attributes": {
          "key-type": "rsa",
          "label": "tls_rsa_pub",
          "id": "",
          "check-value": "0x01fe6e",
          "class": "public-key",
          "encrypt": true,
          "decrypt": false,
          "token": true,
          "always-sensitive": false,
          "derive": false,
          "destroyable": true,
          "extractable": true,
          "local": true,
          "modifiable": true,
          "never-extractable": false,
          "private": true,
          "sensitive": false,
          "sign": false,
          "trusted": false,
          "unwrap": false,
          "verify": false,
          "wrap": false,
          "wrap-with-trusted": false,
          "key-length-bytes": 512,
          "public-exponent": "0x010001",
          "modulus": "0xb1d27e857a876f4e9fd5de748a763c539b359f937eb4b4260e30d1435485a732c878cdad9c72538e2215351b1d41358c9bf80b599c73a80fdb457aa7b20cd61e486c326e2cfd5e124a7f6a996437437812b542e3caf85928aa866f0298580f7967ee6aa01440297d7308fdd9b76b70d1b67f12634df6e6296d6c116d5744c6d60d14d3bf3cb978fe6b75ac67b7089bafd50d8687213b31abc7dc1bad422780d29c851d5102b56f932551eaf52a9591fd8c43d81ecc133022653225bd129f8491101725e9ea33e1ded83fb57af35f847e532eb30cd7e726f23910d2671c6364092e834697ec3cef72cc23615a1ba7c5e100156ae0acac3160f0ca9725d38318b7",
          "modulus-size-bits": 2048
        }
      },
      "private_key": {
        "key-reference": "0x0000000000280cc7",
        "key-info": {
          "key-owners": [
            {
              "username": "cu1",
              "key-coverage": "full"
            }
          ],
          "shared-users": [],
          "cluster-coverage": "full"
        },
        "attributes": {
          "key-type": "rsa",
          "label": "tls_rsa_private",
          "id": "",
          "check-value": "0x01fe6e",
          "class": "private-key",
          "encrypt": false,
          "decrypt": true,
          "token": true,
          "always-sensitive": true,
          "derive": false,
          "destroyable": true,
          "extractable": true,
          "local": true,
          "modifiable": true,
          "never-extractable": false,
          "private": true,
          "sensitive": true,
          "sign": true,
          "trusted": false,
          "unwrap": false,
          "verify": false,
          "wrap": false,
          "wrap-with-trusted": false,
          "key-length-bytes": 1217,
          "public-exponent": "0x010001",
          "modulus": "0xb1d27e857a876f4e9fd5de748a763c539b359f937eb4b4260e30d1435485a732c878cdad9c72538e2215351b1d41358c9bf80b599c73a80fdb457aa7b20cd61e486c326e2cfd5e124a7f6a996437437812b542e3caf85928aa866f0298580f7967ee6aa01440297d7308fdd9b76b70d1b67f12634df6e6296d6c116d5744c6d60d14d3bf3cb978fe6b75ac67b7089bafd50d8687213b31abc7dc1bad422780d29c851d5102b56f932551eaf52a9591fd8c43d81ecc133022653225bd129f8491101725e9ea33e1ded83fb57af35f847e532eb30cd7e726f23910d2671c6364092e834697ec3cef72cc23615a1ba7c5e100156ae0acac3160f0ca9725d38318b7",
          "modulus-size-bits": 2048
        }
      }
    }
  }
  ```
+ So erstellen Sie einen privaten EC-Schlüssel in einem HSM

  Verwenden Sie den [`key generate-asymmetric-pair ec`](cloudhsm_cli-key-generate-asymmetric-pair-ec.md)-Befehl, um ein EC-Schlüsselpaar zu generieren. In diesem Beispiel wird ein EC-Schlüsselpaar mit der `prime256v1` Kurve (die der `NID_X9_62_prime256v1` Kurve entspricht), einem öffentlichen Schlüssellabel von *tls\$1ec\$1pub* und einem privaten Schlüssellabel von generiert*tls\$1ec\$1private*.

  ```
  aws-cloudhsm > key generate-asymmetric-pair ec \
      --curve prime256v1 \
      --public-label tls_ec_pub \
      --private-label tls_ec_private \
      --private-attributes sign=true
  {
    "error_code": 0,
    "data": {
      "public_key": {
        "key-reference": "0x000000000012000b",
        "key-info": {
          "key-owners": [
            {
              "username": "cu1",
              "key-coverage": "full"
            }
          ],
          "shared-users": [],
          "cluster-coverage": "session"
        },
        "attributes": {
          "key-type": "ec",
          "label": "tls_ec_pub",
          "id": "",
          "check-value": "0xd7c1a7",
          "class": "public-key",
          "encrypt": false,
          "decrypt": false,
          "token": false,
          "always-sensitive": false,
          "derive": false,
          "destroyable": true,
          "extractable": true,
          "local": true,
          "modifiable": true,
          "never-extractable": false,
          "private": true,
          "sensitive": false,
          "sign": false,
          "trusted": false,
          "unwrap": false,
          "verify": false,
          "wrap": false,
          "wrap-with-trusted": false,
          "key-length-bytes": 57,
          "ec-point": "0x047096513df542250a6b228fd9cb67fd0c903abc93488467681974d6f371083fce1d79da8ad1e9ede745fb9f38ac8622a1b3ebe9270556000c",
          "curve": "secp224r1"
        }
      },
  "private_key": {
        "key-reference": "0x000000000012000c",
        "key-info": {
          "key-owners": [
            {
              "username": "cu1",
              "key-coverage": "full"
            }
          ],
          "shared-users": [],
          "cluster-coverage": "session"
        },
        "attributes": {
          "key-type": "ec",
          "label": "tls_ec_private",
          "id": "",
          "check-value": "0xd7c1a7",
          "class": "private-key",
          "encrypt": false,
          "decrypt": false,
          "token": false,
          "always-sensitive": true,
          "derive": false,
          "destroyable": true,
          "extractable": true,
          "local": true,
          "modifiable": true,
          "never-extractable": false,
          "private": true,
          "sensitive": true,
          "sign": true,
          "trusted": false,
          "unwrap": false,
          "verify": false,
          "wrap": false,
          "wrap-with-trusted": false,
          "key-length-bytes": 122,
          "ec-point": "0x047096513df542250a6b228fd9cb67fd0c903abc93488467681974d6f371083fce1d79da8ad1e9ede745fb9f38ac8622a1b3ebe9270556000c",
          "curve": "secp224r1"
        }
      }
    }
  }
  ```

**Exportieren einer gefälschten privaten PEM-Schlüsseldatei**

Sobald Sie einen privaten Schlüssel auf dem HSM haben, müssen Sie eine gefälschte private PEM-Schlüsseldatei exportieren. Diese Datei enthält nicht die eigentlichen Schlüsseldaten, ermöglicht es der OpenSSL Dynamic Engine jedoch, den privaten Schlüssel auf dem HSM zu identifizieren. Sie können dann den privaten Schlüssel verwenden, um eine Zertifikatsignierungsanforderung (CSR) zu erstellen und die CSR zu signieren, um das Zertifikat zu erstellen. 

Verwenden Sie den [`key generate-file`](cloudhsm_cli-key-generate-file.md)Befehl, um den privaten Schlüssel im falschen PEM-Format zu exportieren und in einer Datei zu speichern. Ersetzen Sie die folgenden Werte durch Ihre eigenen. 
+ *<private\$1key\$1label>*— Bezeichnung des privaten Schlüssels, den Sie im vorherigen Schritt generiert haben. 
+ *<web\$1server\$1fake\$1pem.key>*— Name der Datei, in die Ihr gefälschter PEM-Schlüssel geschrieben wird.

```
aws-cloudhsm > key generate-file --encoding reference-pem --path <web_server_fake_pem.key> --filter attr.label=<private_key_label>
{
  "error_code": 0,
  "data": {
    "message": "Successfully generated key file"
  }
}
```

**Beenden Sie die CloudHSM-CLI**

Führen Sie den folgenden Befehl aus, um die CloudHSM-CLI zu beenden.

```
aws-cloudhsm > quit
```

Sie sollten jetzt eine neue Datei auf Ihrem System haben, die sich unter dem *<web\$1server\$1fake\$1pem.key>* im vorherigen Befehl angegebenen Pfad befindet. Diese Datei ist die gefälschte private PEM-Schlüsseldatei.

### Generieren eines selbstsignierten Zertifikats
<a name="ssl-offload-provider-generate-certificate"></a>

Sobald Sie einen gefälschten privaten PEM-Schlüssel generiert haben, können Sie diese Datei verwenden, um eine Zertifikatssignieranforderung (CSR) und ein Zertifikat zu generieren.

In einer Produktionsumgebung verwenden Sie in der Regel eine Zertifikatsstelle (CA) zum Erstellen eines Zertifikats aus einer CSR. Für eine Testumgebung ist keine CA erforderlich. Wenn Sie eine Zertifizierungsstelle verwenden, senden Sie ihnen die CSR-Datei und verwenden Sie ein signiertes SSL/TLS Zertifikat, das sie Ihnen auf Ihrem Webserver für HTTPS zur Verfügung stellen. 

Als Alternative zur Verwendung einer CA können Sie die AWS CloudHSM OpenSSL Dynamic Engine verwenden, um ein selbstsigniertes Zertifikat zu erstellen. Selbstsignierte Zertifikate sind nicht vertrauenswürdig für Browser und sollten in Produktionsumgebungen nicht verwendet werden. Sie können in Testumgebungen verwendet werden. 

**Warnung**  
Selbstsignierte Zertifikate sollten nur in einer Testumgebung verwendet werden. Für eine Produktionsumgebung, verwenden Sie eine sicherere Methode, wie z. B. eine Zertifikatstelle, um ein Zertifikat zu erstellen. <a name="ssl-offload-provider-generate-certificate-prerequisites"></a>

**Installieren und konfigurieren Sie die OpenSSL Dynamic Engine**

1. Stellen Sie eine Verbindung mit Ihrer Client-Instance her.

1. [Installieren Sie die OpenSSL Dynamic Engine für AWS CloudHSM Client SDK 5](openssl5-install.md)<a name="ssl-offload-provider-generate-certificate-steps"></a>

**Generieren eines Zertifikats**

1. Besorgen Sie sich eine Kopie Ihrer gefälschten PEM-Datei, die in einem früheren Schritt generiert wurde.

1. Erstellen einer CSR

   Führen Sie den folgenden Befehl aus, um mit der AWS CloudHSM OpenSSL Dynamic Engine eine Certificate Signing Request (CSR) zu erstellen. *<web\$1server\$1fake\$1pem.key>*Ersetzen Sie ihn durch den Namen der Datei, die Ihren gefälschten privaten PEM-Schlüssel enthält. *<web\$1server.csr>*Ersetzen Sie es durch den Namen der Datei, die Ihre CSR enthält. 

   Der Befehl `req` ist interaktiv. Füllen Sie jedes Feld aus. Die Feldinformationen werden in Ihr SSL/TLS Zertifikat kopiert. 
**Anmerkung**  
Die CSR-Erstellung wird derzeit vom OpenSSL Provider nicht unterstützt. Sie müssen für diesen Schritt die OpenSSL Engine verwenden, aber TLS-Verschlüsselungsoperationen funktionieren mit dem Anbieter.

   ```
   $ openssl req -engine cloudhsm -new -key <web_server_fake_pem.key> -out <web_server.csr>
   ```

1. Erstellen eines selbstsignierten Zertifikats

   Führen Sie den folgenden Befehl aus, um die AWS CloudHSM OpenSSL Dynamic Engine zu verwenden, um Ihre CSR mit Ihrem privaten Schlüssel auf Ihrem HSM zu signieren. Dadurch wird ein selbstsigniertes Zertifikat erstellt. Ersetzen Sie die folgenden Werte in dem Befehl durch Ihre eigenen. 
   + *<web\$1server.csr>*— Name der Datei, die die CSR enthält.
   + *<web\$1server\$1fake\$1pem.key>*— Name der Datei, die den gefälschten privaten PEM-Schlüssel enthält.
   + *<web\$1server.crt>*— Name der Datei, die Ihr Webserver-Zertifikat enthalten wird.

   ```
   $ openssl x509 -engine cloudhsm -req -days 365 -in <web_server.csr> -signkey <web_server_fake_pem.key> -out <web_server.crt>
   ```

Nachdem Sie einen privaten Schlüssel und ein Zertifikat haben, gehen Sie zu[Schritt 3: Konfigurieren des Webservers](#ssl-offload-provider-configure-web-server).

## Schritt 3: Konfigurieren des Webservers
<a name="ssl-offload-provider-configure-web-server"></a>

Aktualisieren Sie die Konfiguration Ihrer Webserver-Software, um das HTTPS-Zertifikat und den zugehörigen gefälschten privaten PEM-Schlüssel zu verwenden, die Sie im [vorherigen Schritt](#ssl-offload-provider-generate-key-and-certificate) erstellt haben. Denken Sie daran, Ihre vorhandenen Zertifikate und Schlüssel zu sichern, bevor Sie beginnen. Damit ist die Einrichtung Ihrer Linux-Webserver-Software für das Auslagern von SSL/TLS Serveridentitäten mit abgeschlossen. AWS CloudHSM

Führen Sie die Schritte aus einem der folgenden Abschnitte aus. 

**Topics**
+ [Konfigurieren eines NGINX-Webservers](#ssl-offload-provider-configure-nginx)
+ [Webserver konfigurieren HAProxy](#ssl-offload-provider-configure-haproxy)

### Konfigurieren eines NGINX-Webservers
<a name="ssl-offload-provider-configure-nginx"></a>

Verwenden Sie diesen Abschnitt, um NGINX mit dem OpenSSL Provider zu konfigurieren.<a name="configure-nginx-provider"></a>

**So konfigurieren Sie NGINX für OpenSSL Provider**

1. Stellen Sie eine Verbindung mit Ihrer Client-Instance her.

1. Führen Sie den folgenden Befehl aus, um die erforderlichen Verzeichnisse für das Webserverzertifikat und den gefälschten privaten PEM-Schlüssel zu erstellen.

   ```
   $ mkdir -p /etc/pki/nginx/private
   ```

1. Führen Sie den folgenden Befehl aus, um Ihr Webserverzertifikat an die erforderliche Stelle zu kopieren. Ersetzen Sie es *<web\$1server.crt>* durch den Namen Ihres Webserver-Zertifikats.

   ```
   $ cp <web_server.crt> /etc/pki/nginx/server.crt
   ```

1. Führen Sie den folgenden Befehl aus, um den gefälschten privaten PEM-Schlüssel an die erforderliche Stelle zu kopieren. *<web\$1server\$1fake\$1pem.key>*Ersetzen Sie es durch den Namen der Datei, die Ihren gefälschten privaten PEM-Schlüssel enthält.

   ```
   $ cp <web_server_fake_pem.key> /etc/pki/nginx/private/server.key
   ```

1. Führen Sie den folgenden Befehl aus, um die Eigentümerschaft für diese Dateien zu ändern, sodass der Benutzer mit dem Namen *nginx* diese lesen kann.

   ```
   $ chown nginx /etc/pki/nginx/server.crt /etc/pki/nginx/private/server.key
   ```

1. Konfigurieren Sie OpenSSL für die Verwendung des AWS CloudHSM Anbieters. Weitere Informationen zur Konfiguration des OpenSSL Providers finden Sie unter [AWS CloudHSM OpenSSL Provider for Client SDK 5.](openssl-provider-install.md)

   1. Suchen Sie Ihre OpenSSL-Konfigurationsdatei:

      ```
      $ openssl version -d
      ```

      Sie sollten eine Ausgabe sehen, die der folgenden ähnelt:

      ```
      OPENSSLDIR: "/etc/pki/tls"
      ```

      Die Konfigurationsdatei befindet sich `openssl.cnf` in diesem Verzeichnis.

   1. 
**Anmerkung**  
Ändern Sie die Standarddatei openssl.cnf Ihres Systems nicht direkt. Dadurch wird verhindert, dass systemweite OpenSSL-Operationen (SSH, TLS-Verbindungen und andere Dienste) unbeabsichtigt über den CloudHSM-Anbieter weitergeleitet werden.  
Durch die Verwendung einer separaten Konfigurationsdatei können Sie die Nutzung des CloudHSM Providers auf bestimmte Anwendungen beschränken, die HSM-gestützte kryptografische Operationen erfordern.

      Erstellen Sie eine neue OpenSSL-Konfigurationsdatei mit dem folgenden Inhalt:

      ```
      $ cat > <example-cloudhsm-openssl.cnf> << 'EOF'
      ## NOTE: This should point to the system default openssl config file.
      # Replace /etc/pki/tls with the path to your OpenSSL configuration directory
      .include </etc/pki/tls>/openssl.cnf
      
      # Override the existing provider_section to include AWS CloudHSM OpenSSL Provider as a 3rd party OpenSSL provider
      [provider_sect]
      default = default_sect
      # Include AWS CloudHSM CloudHSM OpenSSL provider
      cloudhsm = cloudhsm_sect
      
      [default_sect]
      activate = 1
      
      [cloudhsm_sect]
      activate = 1
      EOF
      ```

   1. Stellen Sie sicher, dass die `CLOUDHSM_PIN` Umgebungsvariable mit Ihren Crypto-Benutzeranmeldedaten (CU) gesetzt ist:

      ```
      $ export CLOUDHSM_PIN=<username>:<password>
      ```

   1. Stellen Sie die `OPENSSL_CONF` Umgebungsvariable so ein, dass sie auf Ihre aktualisierte Konfigurationsdatei verweist, und stellen Sie sicher, dass der Anbieter geladen ist:

      ```
      $ OPENSSL_CONF=/path/to/example-cloudhsm-openssl.cnf openssl list -providers
      ```

      Sie sollten sowohl den Standardanbieter als auch den CloudHSM-Anbieter aufgelistet sehen:

      ```
      OPENSSL_CONF=/path/to/example-cloudhsm-openssl.cnf openssl list -providers
      Providers:
        default
          name: OpenSSL Default Provider
          version: 3.2.2
          status: active
        cloudhsm
          name: AWS CloudHSM OpenSSL Provider
          version: 5.17.0
          status: active
      ```

1. Führen Sie den folgenden Befehl aus, um die Datei `/etc/nginx/nginx.conf` zu sichern.

   ```
   $ cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup
   ```

1. Aktualisieren Sie die NGINX-Konfiguration.
**Anmerkung**  
Jeder Cluster kann maximal 1000 NGINX-Worker-Prozesse auf allen NGINX-Webservern unterstützen.

------
#### [ Amazon Linux 2023 ]

   Verwenden Sie einen Texteditor, um die Datei `/etc/nginx/nginx.conf` zu bearbeiten. Dafür sind möglicherweise Linux-Root-Rechte erforderlich. Fügen Sie am Anfang der Datei die folgende Zeilen hinzu: 

   ```
   env CLOUDHSM_PIN;
   env OPENSSL_CONF;
   ```

   Fügen Sie dann dem Abschnitt TLS der Datei Folgendes hinzu:

   ```
   # Settings for a TLS enabled server.
   server {
       listen       443 ssl http2 default_server;
       listen       [::]:443 ssl http2 default_server;
       server_name  _;
       root         /usr/share/nginx/html;
   
       ssl_certificate "/etc/pki/nginx/server.crt";
       ssl_certificate_key "/etc/pki/nginx/private/server.key";
       # It is *strongly* recommended to generate unique DH parameters for DHE ciphers
       # Generate them with: openssl dhparam -out /etc/pki/nginx/dhparams.pem 2048
       # ssl_dhparam "/etc/pki/nginx/dhparams.pem";
       ssl_session_cache shared:SSL:1m;
       ssl_session_timeout  10m;
       ssl_protocols TLSv1.2 TLSv1.3;
       ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256";
       ssl_prefer_server_ciphers off;
   
       # Load configuration files for the default server block.
       include /etc/nginx/default.d/*.conf;
   
       location / {
       }
   
       error_page 404 /404.html;
       location = /40x.html {
       }
   
       error_page 500 502 503 504 /50x.html;
       location = /50x.html {
       }
   }
   ```

------
#### [ RHEL 9 (9.2\$1) ]

   Verwenden Sie einen Texteditor, um die Datei `/etc/nginx/nginx.conf` zu bearbeiten. Dies erfordert möglicherweise Linux-Root-Rechte. Fügen Sie am Anfang der Datei die folgende Zeilen hinzu: 

   ```
   env CLOUDHSM_PIN;
   env OPENSSL_CONF;
   ```

   Fügen Sie dann dem Abschnitt TLS der Datei Folgendes hinzu:

   ```
   # Settings for a TLS enabled server.
   server {
       listen       443 ssl http2 default_server;
       listen       [::]:443 ssl http2 default_server;
       server_name  _;
       root         /usr/share/nginx/html;
   
       ssl_certificate "/etc/pki/nginx/server.crt";
       ssl_certificate_key "/etc/pki/nginx/private/server.key";
       # It is *strongly* recommended to generate unique DH parameters for DHE ciphers
       # Generate them with: openssl dhparam -out /etc/pki/nginx/dhparams.pem 2048
       # ssl_dhparam "/etc/pki/nginx/dhparams.pem";
       ssl_session_cache shared:SSL:1m;
       ssl_session_timeout  10m;
       ssl_protocols TLSv1.2 TLSv1.3;
       ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256";
       ssl_prefer_server_ciphers off;
   
       # Load configuration files for the default server block.
       include /etc/nginx/default.d/*.conf;
   
       location / {
       }
   
       error_page 404 /404.html;
       location = /40x.html {
       }
   
       error_page 500 502 503 504 /50x.html;
       location = /50x.html {
       }
   }
   ```

------
#### [ RHEL 10 (10.0\$1) ]

   Verwenden Sie einen Texteditor, um die Datei `/etc/nginx/nginx.conf` zu bearbeiten. Dies erfordert möglicherweise Linux-Root-Rechte. Fügen Sie am Anfang der Datei die folgende Zeilen hinzu: 

   ```
   env CLOUDHSM_PIN;
   env OPENSSL_CONF;
   ```

   Fügen Sie dann dem Abschnitt TLS der Datei Folgendes hinzu:

   ```
   # Settings for a TLS enabled server.
   server {
       listen       443 ssl http2 default_server;
       listen       [::]:443 ssl http2 default_server;
       server_name  _;
       root         /usr/share/nginx/html;
   
       ssl_certificate "/etc/pki/nginx/server.crt";
       ssl_certificate_key "/etc/pki/nginx/private/server.key";
       # It is *strongly* recommended to generate unique DH parameters for DHE ciphers
       # Generate them with: openssl dhparam -out /etc/pki/nginx/dhparams.pem 2048
       # ssl_dhparam "/etc/pki/nginx/dhparams.pem";
       ssl_session_cache shared:SSL:1m;
       ssl_session_timeout  10m;
       ssl_protocols TLSv1.2 TLSv1.3;
       ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256";
       ssl_prefer_server_ciphers off;
   
       # Load configuration files for the default server block.
       include /etc/nginx/default.d/*.conf;
   
       location / {
       }
   
       error_page 404 /404.html;
       location = /40x.html {
       }
   
       error_page 500 502 503 504 /50x.html;
       location = /50x.html {
       }
   }
   ```

------
#### [ Ubuntu 24.04 ]

   Verwenden Sie einen Texteditor, um die Datei `/etc/nginx/nginx.conf` zu bearbeiten. Dies erfordert möglicherweise Linux-Root-Rechte. Fügen Sie am Anfang der Datei die folgende Zeilen hinzu: 

   ```
   env CLOUDHSM_PIN;
   env OPENSSL_CONF;
   ```

   Fügen Sie dann dem Abschnitt TLS der Datei Folgendes hinzu:

   ```
   # Settings for a TLS enabled server.
   server {
       listen       443 ssl http2 default_server;
       listen       [::]:443 ssl http2 default_server;
       server_name  _;
       root         /var/www/html;
   
       ssl_certificate "/etc/ssl/certs/server.crt";
       ssl_certificate_key "/etc/ssl/private/server.key";
       # It is *strongly* recommended to generate unique DH parameters for DHE ciphers
       # Generate them with: openssl dhparam -out /etc/ssl/certs/dhparams.pem 2048
       # ssl_dhparam "/etc/ssl/certs/dhparams.pem";
       ssl_session_cache shared:SSL:1m;
       ssl_session_timeout  10m;
       ssl_protocols TLSv1.2 TLSv1.3;
       ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256";
       ssl_prefer_server_ciphers off;
   
       # Load configuration files for the default server block.
       include /etc/nginx/default.d/*.conf;
   
       location / {
       }
   
       error_page 404 /404.html;
       location = /40x.html {
       }
   
       error_page 500 502 503 504 /50x.html;
       location = /50x.html {
       }
   }
   ```

------

   Speichern Sie die Datei.

1. Sichern Sie die `systemd`-Konfigurationsdatei und legen Sie dann den `EnvironmentFile`-Pfad fest.

------
#### [ Amazon Linux 2023 ]

   1. Erstellen Sie eine Sicherungskopie der `nginx.service` Datei:

      ```
      $ cp /lib/systemd/system/nginx.service /lib/systemd/system/nginx.service.backup
      ```

   1. Öffnen Sie `/lib/systemd/system/nginx.service` in einem Texteditor. Fügen Sie im Abschnitt [Service] Folgendes hinzu:

      ```
      EnvironmentFile=/etc/sysconfig/nginx
      ```

------
#### [ RHEL 9 (9.2\$1) ]

   1. Erstellen Sie eine Sicherungskopie der `nginx.service` Datei:

      ```
      $ cp /lib/systemd/system/nginx.service /lib/systemd/system/nginx.service.backup
      ```

   1. Öffnen Sie `/lib/systemd/system/nginx.service` in einem Texteditor. Fügen Sie im Abschnitt [Service] Folgendes hinzu:

      ```
      EnvironmentFile=/etc/sysconfig/nginx
      ```

------
#### [ RHEL 10 (10.0\$1) ]

   1. Erstellen Sie eine Sicherungskopie der `nginx.service` Datei:

      ```
      $ cp /lib/systemd/system/nginx.service /lib/systemd/system/nginx.service.backup
      ```

   1. Öffnen Sie `/lib/systemd/system/nginx.service` in einem Texteditor. Fügen Sie im Abschnitt [Service] Folgendes hinzu:

      ```
      EnvironmentFile=/etc/sysconfig/nginx
      ```

------
#### [ Ubuntu 24.04 ]

   1. Erstellen Sie eine Sicherungskopie der `nginx.service` Datei:

      ```
      $ cp /lib/systemd/system/nginx.service /lib/systemd/system/nginx.service.backup
      ```

   1. Öffnen Sie `/lib/systemd/system/nginx.service` in einem Texteditor. Fügen Sie im Abschnitt [Service] Folgendes hinzu:

      ```
      EnvironmentFile=/etc/sysconfig/nginx
      ```

------

1.  Überprüfen Sie, ob die Datei `/etc/sysconfig/nginx` vorhanden ist, und führen Sie dann einen der folgenden Schritte aus: 
   + Wenn die Datei vorhanden ist, sichern Sie die Datei, indem Sie den folgenden Befehl ausführen:

     ```
     $ cp /etc/sysconfig/nginx /etc/sysconfig/nginx.backup
     ```
   +  Öffnen Sie einen Texteditor und erstellen Sie im Ordner `/etc/sysconfig/` eine Datei mit dem Namen `nginx`, wenn die Datei nicht vorhanden ist. 

1. Konfigurieren Sie die NGINX-Umgebung.

------
#### [ Amazon Linux 2023 ]

   Öffnen Sie als Linux-Root-Benutzer die `/etc/sysconfig/nginx` Datei in einem Texteditor. Zum Beispiel 

   ```
   vi /etc/sysconfig/nginx
   ```

   Fügen Sie die Cryptography User (CU) -Anmeldeinformationen und den Pfad zu Ihrer OpenSSL-Konfigurationsdatei hinzu:

   ```
   CLOUDHSM_PIN=<CU user name>:<password>
   OPENSSL_CONF=<path to example-cloudhsm-openssl.cnf>
   ```

   Ersetzen Sie *<CU user name>* und *<password>* durch die CU-Anmeldeinformationen. *<path to example-cloudhsm-openssl.cnf>*Ersetzen Sie durch den vollständigen Pfad zu der Konfigurationsdatei, in der Sie sie erstellt haben[So konfigurieren Sie NGINX für OpenSSL Provider](#configure-nginx-provider).

    Speichern Sie die Datei.

------
#### [ RHEL 9 (9.2\$1) ]

   Öffnen Sie die Datei `/etc/sysconfig/nginx` in einem Text-Editor. Dies erfordert möglicherweise Linux-Root-Rechte. Fügen Sie die Cryptography User (CU) -Anmeldeinformationen und den Pfad zu Ihrer OpenSSL-Konfigurationsdatei hinzu:

   ```
   CLOUDHSM_PIN=<CU user name>:<password>
   OPENSSL_CONF=<path to example-cloudhsm-openssl.cnf>
   ```

   Ersetzen Sie *<CU user name>* und *<password>* durch die CU-Anmeldeinformationen. *<path to example-cloudhsm-openssl.cnf>*Ersetzen Sie durch den vollständigen Pfad zu der Konfigurationsdatei, in der Sie sie erstellt haben[So konfigurieren Sie NGINX für OpenSSL Provider](#configure-nginx-provider).

    Speichern Sie die Datei.

------
#### [ RHEL 10 (10.0\$1) ]

   Öffnen Sie die Datei `/etc/sysconfig/nginx` in einem Text-Editor. Dies erfordert möglicherweise Linux-Root-Rechte. Fügen Sie die Cryptography User (CU) -Anmeldeinformationen und den Pfad zu Ihrer OpenSSL-Konfigurationsdatei hinzu:

   ```
   CLOUDHSM_PIN=<CU user name>:<password>
   OPENSSL_CONF=<path to example-cloudhsm-openssl.cnf>
   ```

   Ersetzen Sie *<CU user name>* und *<password>* durch die CU-Anmeldeinformationen. *<path to example-cloudhsm-openssl.cnf>*Ersetzen Sie durch den vollständigen Pfad zu der Konfigurationsdatei, in der Sie sie erstellt haben[So konfigurieren Sie NGINX für OpenSSL Provider](#configure-nginx-provider).

    Speichern Sie die Datei.

------
#### [ Ubuntu 24.04 ]

   Öffnen Sie die Datei `/etc/sysconfig/nginx` in einem Text-Editor. Dies erfordert möglicherweise Linux-Root-Rechte. Fügen Sie die Cryptography User (CU) -Anmeldeinformationen und den Pfad zu Ihrer OpenSSL-Konfigurationsdatei hinzu:

   ```
   CLOUDHSM_PIN=<CU user name>:<password>
   OPENSSL_CONF=<path to example-cloudhsm-openssl.cnf>
   ```

   Ersetzen Sie *<CU user name>* und *<password>* durch die CU-Anmeldeinformationen. *<path to example-cloudhsm-openssl.cnf>*Ersetzen Sie durch den vollständigen Pfad zu der Konfigurationsdatei, in der Sie sie erstellt haben[So konfigurieren Sie NGINX für OpenSSL Provider](#configure-nginx-provider).

    Speichern Sie die Datei.

------

1. Starten Sie den NGINX-Webserver.

------
#### [ Amazon Linux 2023 ]

   Stoppen Sie alle NGINX-Prozesse

   ```
   $ systemctl stop nginx
   ```

   Laden Sie die `systemd`-Konfiguration neu, um die neuesten Änderungen zu erhalten

   ```
   $ systemctl daemon-reload
   ```

   Starten Sie NGINX

   ```
   $ systemctl start nginx
   ```

------
#### [ RHEL 9 (9.2\$1) ]

   Stoppen Sie alle laufenden NGINX-Prozesse

   ```
   $ systemctl stop nginx
   ```

   Laden Sie die `systemd`-Konfiguration neu, um die neuesten Änderungen zu erhalten

   ```
   $ systemctl daemon-reload
   ```

   Starten Sie den NGINX-Prozess

   ```
   $ systemctl start nginx
   ```

------
#### [ RHEL 10 (10.0\$1) ]

   Stoppen Sie alle laufenden NGINX-Prozesse

   ```
   $ systemctl stop nginx
   ```

   Laden Sie die `systemd`-Konfiguration neu, um die neuesten Änderungen zu erhalten

   ```
   $ systemctl daemon-reload
   ```

   Starten Sie den NGINX-Prozess

   ```
   $ systemctl start nginx
   ```

------
#### [ Ubuntu 24.04 ]

   Stoppen Sie alle laufenden NGINX-Prozesse

   ```
   $ systemctl stop nginx
   ```

   Laden Sie die `systemd`-Konfiguration neu, um die neuesten Änderungen zu erhalten

   ```
   $ systemctl daemon-reload
   ```

   Starten Sie den NGINX-Prozess

   ```
   $ systemctl start nginx
   ```

------

Nachdem Sie NGINX konfiguriert haben, gehen Sie zu. [Verifizieren, dass HTTPS das konfigurierte Zertifikat verwendet](#ssl-offload-verify-https-connection-linux)

### Webserver konfigurieren HAProxy
<a name="ssl-offload-provider-configure-haproxy"></a>

Verwenden Sie diesen Abschnitt, um HAProxy mit dem OpenSSL Provider zu konfigurieren. Die folgenden Beispiele zeigen, wie Sie HAProxy mit Ihren CloudHSM-Zertifikaten und -Schlüsseln einrichten.<a name="configure-haproxy-provider"></a>

**So konfigurieren Sie HAProxy für OpenSSL Provider**

1. Erstellen Sie eine Sicherungskopie der vorhandenen kombinierten Zertifikatsdatei, falls vorhanden:

   ```
   $ cp server-combined.pem server-combined.pem.backup
   ```

1. Erstellen Sie eine kombinierte Zertifikatsdatei für die HAProxy Verwendung Ihres Zertifikats und des gefälschten CloudHSM-PEM-Schlüssels:

   ```
   $ cat server.crt server.key > server-combined.pem
   ```

1. Erstellen Sie eine Sicherungskopie der vorhandenen Konfiguration: HAProxy 

   ```
   $ cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.backup
   ```

1. Erstellen Sie eine neue CloudHSM-TLS-Offload-Konfiguration unter: `/etc/haproxy/haproxy.cfg`

   ```
   global
       daemon
       ssl-provider cloudhsm
       # It is *strongly* recommended to generate unique DH parameters
       # Generate them with: openssl dhparam -out /etc/haproxy/dhparams.pem 2048
       # ssl-dh-param-file /etc/haproxy/dhparams.pem
       ssl-default-bind-ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305
       ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
       ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
   
   defaults
       mode http
       timeout connect 5000ms
       timeout client 50000ms
       timeout server 50000ms
   
   frontend haproxy_frontend
       bind *:443 ssl crt /path/to/server-combined.pem
       default_backend web_servers
   
   backend web_servers
       server web1 127.0.0.1:8080 check
   ```

   Aktualisieren Sie den Zertifikatspfad so, dass er mit Ihrem Dateispeicherort übereinstimmt.

1. Konfigurieren Sie Systemd so, dass es eine Umgebungsdatei für HAProxy verwendet. Der Speicherort hängt von Ihrer Linux-Distribution ab.

------
#### [ Amazon Linux and RHEL ]

   Sichern und ändern Sie die HAProxy Servicedatei:

   ```
   $ cp /lib/systemd/system/haproxy.service /lib/systemd/system/haproxy.service.backup
   ```

   Bearbeiten Sie die folgende Zeile `/lib/systemd/system/haproxy.service` und fügen Sie sie im Abschnitt [Service] hinzu:

   ```
   EnvironmentFile=/etc/sysconfig/haproxy
   ```

------
#### [ Ubuntu ]

   Erstellen Sie eine Sicherungskopie und ändern Sie die HAProxy Servicedatei:

   ```
   $ cp /lib/systemd/system/haproxy.service /lib/systemd/system/haproxy.service.backup
   ```

   Bearbeiten Sie die folgende Zeile `/lib/systemd/system/haproxy.service` und fügen Sie sie im Abschnitt [Service] hinzu:

   ```
   EnvironmentFile=/etc/default/haproxy
   ```

------

1. Erstellen Sie die Umgebungsdatei am entsprechenden Speicherort für Ihr System.

------
#### [ Amazon Linux and RHEL ]

   Sichern Sie die HAProxy Umgebungsdatei, falls sie existiert:

   ```
   $ cp /etc/sysconfig/haproxy /etc/sysconfig/haproxy.backup
   ```

   Erstellen Sie die HAProxy Umgebungsdatei `/etc/sysconfig/haproxy` mit dem folgenden Inhalt:

   ```
   CLOUDHSM_PIN=<CU user name>:<password>
   ```

------
#### [ Ubuntu ]

   Erstellen Sie eine HAProxy Sicherungskopie der Umgebungsdatei, falls sie existiert:

   ```
   $ cp /etc/default/haproxy /etc/default/haproxy.backup
   ```

   Erstellen Sie die HAProxy Umgebungsdatei `/etc/default/haproxy` mit dem folgenden Inhalt:

   ```
   CLOUDHSM_PIN=<CU user name>:<password>
   ```

------

   Ersetzen Sie *<CU user name>* und *<password>* durch Ihre CU-Anmeldeinformationen.

1. Laden Sie die Systemd-Konfiguration neu:

   ```
   $ systemctl daemon-reload
   ```

1. Beginnen Sie HAProxy mit der CloudHSM TLS-Offload-Konfiguration:

   ```
   $ systemctl start haproxy
   ```

   Sie können den Vorgang auch HAProxy direkt mit einer benutzerdefinierten Konfigurationsdatei ausführen:

   ```
   $ haproxy -f /path/to/haproxy-cloudhsm.cfg
   ```

Gehen Sie nach HAProxy der Konfiguration zu[Verifizieren, dass HTTPS das konfigurierte Zertifikat verwendet](#ssl-offload-verify-https-connection-linux).

## Schritt 4: Aktivieren von HTTPS-Datenverkehr und Verifizieren des Zertifikats
<a name="ssl-offload-enable-traffic-and-verify-certificate-provider"></a>

Nachdem Sie Ihren Webserver für SSL/TLS Offload mit konfiguriert haben AWS CloudHSM, fügen Sie Ihre Webserver-Instanz einer Sicherheitsgruppe hinzu, die eingehenden HTTPS-Verkehr zulässt. Dadurch können Clients, wie z. B. Webbrowser, eine HTTPS-Verbindung mit Ihrem Webserver herstellen. Stellen Sie dann eine HTTPS-Verbindung zu Ihrem Webserver her und stellen Sie sicher, dass er das Zertifikat verwendet, mit dem Sie das SSL/TLS Offload konfiguriert haben. AWS CloudHSM

**Topics**
+ [Aktivieren von eingehenden HTTPS-Verbindungen](#ssl-offload-add-security-group-linux)
+ [Verifizieren, dass HTTPS das konfigurierte Zertifikat verwendet](#ssl-offload-verify-https-connection-linux)

### Aktivieren von eingehenden HTTPS-Verbindungen
<a name="ssl-offload-add-security-group-linux"></a>

Zum Herstellen einer Verbindung zu Ihrem Webserver von einem Client (z. B. ein Webbrowser) aus, erstellen Sie eine Sicherheitsgruppe, die eingehende HTTPS-Verbindungen zulässt. Insbesondere sollten eingehende TCP-Verbindungen auf Port 443 erlaubt werden. Weisen Sie diese Sicherheitsgruppe Ihrem Webserver zu. 

**So erstellen Sie eine Sicherheitsgruppe für HTTPS und weisen sie Ihrem Webserver zu**

1. Öffnen Sie die Amazon-EC2-Konsole unter [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. Wählen Sie im Navigationsbereich **Sicherheitsgruppen** aus.

1. Wählen Sie **Sicherheitsgruppe erstellen**.

1. Führen Sie für **Sicherheitsgruppe erstellen** die folgenden Schritte aus:

   1. Geben Sie in das Feld **Sicherheitsgruppenname** einen Namen für die Sicherheitsgruppe ein, die Sie erstellen.

   1. (Optional) Geben Sie eine Beschreibung der Sicherheitsgruppe ein, die Sie erstellen.

   1. Wählen Sie für **VPC** die VPC aus, die Ihre Amazon-EC2-Instance enthält.

   1. Wählen Sie **Regel hinzufügen** aus.

   1. Wählen Sie im Drop-down-Fenster für **Typ** die Option **HTTPS** aus.

   1. Geben Sie für **Quelle** einen Quellspeicherort ein.

   1. Wählen Sie **Sicherheitsgruppe erstellen** aus.

1. Wählen Sie im Navigationsbereich **Instances** aus.

1. Aktivieren Sie das Kontrollkästchen neben Ihrer Webserver-Instance. 

1. Wählen Sie das Drop-down-Menü **Aktionen** oben auf der Seite. Wählen Sie **Sicherheit** und dann **Sicherheitsgruppen ändern** aus.

1. Wählen Sie unter **Zugeordnete Sicherheitsgruppen** das Suchfeld aus und wählen Sie die Sicherheitsgruppe, die Sie für HTTPS erstellt haben, aus. Wählen Sie dann **Sicherheitsgruppen hinzufügen** aus.

1. Wählen Sie **Speichern**. 

### Verifizieren, dass HTTPS das konfigurierte Zertifikat verwendet
<a name="ssl-offload-verify-https-connection-linux"></a>

Nachdem Sie den Webserver zu einer Sicherheitsgruppe hinzugefügt haben, können Sie überprüfen, ob für den SSL/TLS Offload Ihr selbstsigniertes Zertifikat verwendet wird. Sie können dazu einen Webbrowser oder ein Tool wie [OpenSSL s\$1client](https://www.openssl.org/docs/manmaster/man1/s_client.html) nutzen.

**Um den SSL/TLS Offload mit einem Webbrowser zu überprüfen**

1. Verwenden Sie einen Web-Browser, um eine Verbindung zum Webserver unter Verwendung des öffentlichen DNS-Namen oder der IP-Adresse des Servers herzustellen. Stellen Sie sicher, dass die URL in die Adresszeile mit https:// beginnt. Beispiel, **https://ec2-52-14-212-67.us-east-2.compute.amazonaws.com/**.
**Tipp**  
Sie können einen DNS-Dienst wie Amazon Route 53 verwenden, um den Domainnamen Ihrer Website (z. B. https://www.example.com/) an Ihren Webserver weiterzuleiten. Weitere Informationen finden Sie unter [Routing des Datenverkehrs zu einer Amazon-EC2-Instance](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-ec2-instance.html) im *Entwicklerleitfaden zu Amazon Route 53* oder in der Dokumentation für Ihren DNS-Service.

1. Zeigen Sie das Webserverzertifikat mit Ihrem Webbrowser an. Weitere Informationen finden Sie hier:
   + Wenn Sie Mozilla Firefox nutzen, sehen Sie sich die Informationen auf der Mozilla Support-Website unter [Zertifikat anzeigen](https://support.mozilla.org/en-US/kb/secure-website-certificate#w_view-a-certificate) an.
   + Wenn Sie Google Chrome verwenden, sehen Sie sich die Informationen auf der „Google Tools für Web Developers“-Website unter [Sicherheitsprobleme verstehen](https://developers.google.com/web/tools/chrome-devtools/security) an.

   Andere Webbrowser unterstützen möglicherweise ähnliche Funktionen, über die Sie das Webserverzertifikat anzeigen können.

1. Stellen Sie sicher, dass es sich bei dem SSL/TLS Zertifikat um das Zertifikat handelt, für dessen Verwendung Sie Ihren Webserver konfiguriert haben.

**Um den SSL/TLS Offload mit OpenSSL s\$1client zu überprüfen**

1. Führen Sie den folgenden OpenSSL-Befehl aus, um mittels HTTPS eine Verbindung zu Ihrem Webserver herzustellen. *<server name>*Ersetzen Sie es durch den öffentlichen DNS-Namen oder die IP-Adresse Ihres Webservers. 

   ```
   openssl s_client -connect <server name>:443
   ```
**Tipp**  
Sie können einen DNS-Dienst wie Amazon Route 53 verwenden, um den Domainnamen Ihrer Website (z. B. https://www.example.com/) an Ihren Webserver weiterzuleiten. Weitere Informationen finden Sie unter [Routing des Datenverkehrs zu einer Amazon-EC2-Instance](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-ec2-instance.html) im *Entwicklerleitfaden zu Amazon Route 53* oder in der Dokumentation für Ihren DNS-Service.

1. Stellen Sie sicher, dass es sich bei dem SSL/TLS Zertifikat um das Zertifikat handelt, für dessen Verwendung Sie Ihren Webserver konfiguriert haben.

Sie verfügen jetzt über eine mit HTTPS gesicherte Website. Der private Schlüssel für den Webserver wird in einem HSM in Ihrem AWS CloudHSM Cluster gespeichert. 

Informationen zum Hinzufügen eines Load Balancers finden Sie unter [Einen Load Balancer mit Elastic Load Balancing hinzufügen für AWS CloudHSM(optional)](third-offload-add-lb.md).