View a markdown version of this page

AWS CloudHSM SSL/TLS Offload unter Linux mit NGINX oder HAProxy mit OpenSSL Provider - 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.

AWS CloudHSM SSL/TLS Offload unter Linux mit NGINX oder HAProxy mit OpenSSL Provider

Dieses Thema enthält schrittweise Anweisungen zum Einrichten der SSL/TLS Serveridentitätsverlagerung AWS CloudHSM auf einem Linux-Webserver unter Verwendung von NGINX oder HAProxy mit dem OpenSSL Provider.

-Übersicht

Unter Linux ist die NGINX - und https://www.haproxy.org/ HAProxy-Webserversoftware in OpenSSL integriert, um HTTPS zu unterstützen. https://www.openssl.org/ Der AWS CloudHSM OpenSSL-Anbieter bietet eine Schnittstelle, die es der Webserver-Software ermöglicht, die HSMs in Ihrem Cluster für das kryptografische Auslagern und Speichern von Schlüsseln zu verwenden. Der OpenSSL Provider ist die Brücke, die den Webserver mit Ihrem Cluster verbindet. AWS CloudHSM

Um dieses Tutorial abzuschließen, konfigurieren Sie NGINX oder HAProxy für die Verwendung des OpenSSL Providers. AWS CloudHSM Das Tutorial zeigt Ihnen, wie Sie Folgendes tun:

  • 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 an.

Schritt 1: Einrichten der Voraussetzungen

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

Voraussetzungen für AWS CloudHSM OpenSSL-Anbieter

Um das Offload der SSL/TLS Webserver-Identität mit AWS CloudHSM OpenSSL Provider für 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 und Client-SDK 5 Configure Tool.

  • 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 (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. Je nach 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 für Client SDK 5.

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

    Amazon Linux 2023
    • NGINX

      $ yum install nginx
    • HAProxy

      $ yum install haproxy
    RHEL 9 (9.2+)
    • NGINX

      $ yum install nginx
    • HAProxy

      $ yum install haproxy
    RHEL 10 (10.0+)
    • NGINX

      $ yum install nginx
    • HAProxy

      $ yum install haproxy
    Ubuntu 26.04 LTS
    • NGINX

      $ apt install nginx
    • HAProxy

      $ apt install haproxy
  3. Verwenden Sie CloudHSM CLI, um einen Crypto-Benutzer zu erstellen. Crypto-Benutzer (Crypto User, CU) Weitere Informationen zur Verwaltung von HSM-Benutzern finden Sie unter HSM-Benutzer mit der CloudHSM-CLI verwalten.

    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 erhalten Sie ein Zertifikat fort.

Hinweise

  • Um Security-Enhanced Linux (SELinux) und Webserver zu verwenden, müssen Sie ausgehende TCP-Verbindungen auf Port 2223 zulassen. Dies ist der 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 aus. Die ersten Schritte bieten eine schrittweise Anleitung zum Erstellen eines aktiven Clusters mit einem HSM und einer Amazon 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 AWS CloudHSM Cluster.

  • 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 oder Herstellung einer Verbindung zu Ihrer Linux-Instance von Windows mit PuTTY in der Amazon EC2-Dokumentation.

Schritt 2: Generieren oder importieren Sie einen privaten Schlüssel und erhalten Sie ein Zertifikat

Um HTTPS zu aktivieren, benötigt Ihre Webserver-Anwendung (NGINX oder HAProxy) einen privaten Schlüssel und ein entsprechendes Zertifikat. SSL/TLS Um SSL/TLS Webserver-Identity-Offload 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 den Schlüssel, um eine Zertifikatsignieranforderung (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 auf dem HSM gespeicherten privaten Schlüssel enthält (es ist nicht der tatsächliche 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

In diesem Abschnitt erfahren Sie, wie Sie mithilfe der CloudHSM-CLI ein Schlüsselpaar generieren. AWS CloudHSM Befehlszeilenschnittstelle (CLI) Sobald Sie ein Schlüsselpaar im HSM generiert haben, können Sie es als gefälschte PEM-Datei exportieren und das entsprechende Zertifikat generieren.

Installieren und konfigurieren Sie die CloudHSM CLI
  1. Installieren und konfigurieren Sie die CloudHSM CLI.

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

    $ /opt/cloudhsm/bin/cloudhsm-cli interactive
  3. 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. Sie können auch ein Ed25519- oder ML-DSA Schlüsselpaar für die Verwendung mit TLS 1.3 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-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 öffentlichen Schlüsselbezeichnung von und der privaten Schlüsselbezeichnung von generiert. tls_rsa_pub tls_rsa_private

    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-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), einer öffentlichen Schlüsselbezeichnung von und einer privaten Schlüsselbezeichnung von tls_ec_pub generiert. tls_ec_private

    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" } } } }
  • Um einen privaten Ed25519-Schlüssel auf einem HSM zu generieren

    Verfügbarkeit von Ed25519

    Ed25519 ist nur auf Nicht-FIPS-Clustern verfügbar. Ed25519 unterstützt nur TLS 1.3.

    Verwenden Sie den key generate-asymmetric-pair ec Befehl, um ein Ed25519-Schlüsselpaar zu generieren. In diesem Beispiel wird ein Ed25519-Schlüsselpaar mit einer öffentlichen Schlüsselbezeichnung von tls_ed25519_pub und einer privaten Schlüsselbezeichnung von generiert. tls_ed25519_private

    aws-cloudhsm > key generate-asymmetric-pair ec \ --curve ed25519 \ --public-label tls_ed25519_pub \ --private-label tls_ed25519_private \ --private-attributes sign=true \ --public-attributes verify=true { "error_code": 0, "data": { "public_key": { "key-reference": "0x0000000000383931", "key-info": { "key-owners": [ { "username": "cu1", "key-coverage": "full" } ], "shared-users": [], "key-quorum-values": { "manage-key-quorum-value": 0, "use-key-quorum-value": 0 }, "cluster-coverage": "full" }, "attributes": { "key-type": "ec", "label": "tls_ed25519_pub", "id": "0x", "check-value": "0x4cb1b1", "class": "public-key", "encrypt": false, "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": true, "wrap": false, "wrap-with-trusted": false, "key-length-bytes": 32, "ec-point": "0x302a300506032b6570032100c31f8a3695f571dda1658bc98e0591ab088c1a657b3199dd50c3956046ebbe75", "curve": "ed25519" } }, "private_key": { "key-reference": "0x0000000000382e60", "key-info": { "key-owners": [ { "username": "cu1", "key-coverage": "full" } ], "shared-users": [], "key-quorum-values": { "manage-key-quorum-value": 0, "use-key-quorum-value": 0 }, "cluster-coverage": "full" }, "attributes": { "key-type": "ec", "label": "tls_ed25519_private", "id": "0x", "check-value": "0x4cb1b1", "class": "private-key", "encrypt": false, "decrypt": false, "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": 48, "ec-point": "0x302a300506032b6570032100c31f8a3695f571dda1658bc98e0591ab088c1a657b3199dd50c3956046ebbe75", "curve": "ed25519" } } } }
  • Um einen ML-DSA privaten Schlüssel auf einem HSM zu generieren

    ML-DSA Verfügbarkeit und Anforderungen

    ML-DSA ist nur auf Nicht-FIPS-Clustern verfügbar und erfordert OpenSSL 3.5 oder höher für die CSR-Erstellung, Zertifikatserstellung und TLS-Offload. ML-DSA unterstützt nur TLS 1.3.

    Für den ML-DSA TLS-Offload auf Amazon Linux 2023- und RHEL-Plattformen müssen Sie möglicherweise die Post-Quantum-Krypto-Subrichtlinie (PQ) aktivieren. Weitere Informationen finden Sie unter Problem: Der ML-DSA TLS-Handshake schlägt unter Amazon Linux 2023 und RHEL ohne gemeinsame Signaturalgorithmen fehl.

    Verwenden Sie den key generate-asymmetric-pair ml-dsa Befehl, um ein Schlüsselpaar zu generieren. ML-DSA In diesem Beispiel wird ein ML-DSA-44 Schlüsselpaar mit einem öffentlichen Schlüssellabel von tls_mldsa44_pub und einem privaten Schlüssellabel von generierttls_mldsa44_private. Sie können ML-DSA-65 oder auch ML-DSA-87 für höhere Sicherheitsstufen verwenden.

    aws-cloudhsm > key generate-asymmetric-pair ml-dsa \ --mldsa-algorithm ML-DSA-44 \ --public-label tls_mldsa44_pub \ --private-label tls_mldsa44_private \ --private-attributes sign=true \ --public-attributes verify=true { "error_code": 0, "data": { "public_key": { "key-reference": "0x0000000000280cd2", "key-info": { "key-owners": [ { "username": "cu1", "key-coverage": "full" } ], "shared-users": [], "cluster-coverage": "full" }, "attributes": { "key-type": "ml-dsa", "label": "tls_mldsa44_pub", "id": "", "check-value": "0xd4e5f6", "class": "public-key", "encrypt": false, "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": true, "wrap": false, "wrap-with-trusted": false, "key-length-bytes": 1312, "mldsa-algorithm": "ML-DSA-44" } }, "private_key": { "key-reference": "0x0000000000280cd3", "key-info": { "key-owners": [ { "username": "cu1", "key-coverage": "full" } ], "shared-users": [], "cluster-coverage": "full" }, "attributes": { "key-type": "ml-dsa", "label": "tls_mldsa44_private", "id": "", "check-value": "0xd4e5f6", "class": "private-key", "encrypt": false, "decrypt": false, "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": 2560, "mldsa-algorithm": "ML-DSA-44" } } } }

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 dem OpenSSL-Anbieter jedoch, den privaten Schlüssel auf dem HSM zu identifizieren. Sie können dann den privaten Schlüssel verwenden, um eine Zertifikatsignieranforderung (CSR) zu erstellen, und die CSR signieren, um das Zertifikat zu erstellen.

Verwenden Sie den key generate-file Befehl, um den privaten Schlüssel im gefälschten PEM-Format zu exportieren und in einer Datei zu speichern. Ersetzen Sie die folgenden Werte durch Ihre eigenen.

  • <private_key_label>— Bezeichnung des privaten Schlüssels, den Sie im vorherigen Schritt generiert haben.

  • <web_server_fake_pem.key>— Name der Datei, in die Ihr gefälschter PEM-Schlüssel geschrieben wird.

Für RSA- und EC-Schlüssel

Verwenden Sie die reference-pem Kodierung:

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" } }
Für Ed25519 und Schlüssel ML-DSA

Verwenden Sie die Kodierungcloudhsm-reference-pem:

aws-cloudhsm > key generate-file --encoding cloudhsm-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_server_fake_pem.key> im vorherigen Befehl angegebenen Pfad befindet. Diese Datei ist die gefälschte private PEM-Schlüsseldatei.

Generieren eines selbstsignierten Zertifikats

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 CA verwenden, senden Sie ihnen die CSR-Datei und verwenden Sie das signierte 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 den AWS CloudHSM OpenSSL-Anbieter verwenden, um ein selbstsigniertes Zertifikat zu erstellen. Self-signed Zertifikate werden von Browsern nicht als vertrauenswürdig eingestuft und sollten nicht in Produktionsumgebungen verwendet werden. Sie können in Testumgebungen verwendet werden.

Warnung

Self-signed 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.

Installieren und konfigurieren Sie den OpenSSL Provider
  1. Stellen Sie eine Verbindung mit Ihrer Client-Instance her.

  2. Installieren Sie den OpenSSL Provider für AWS CloudHSM Client-SDK 5

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

  2. Erstellen einer CSR

    Führen Sie den folgenden Befehl aus, um den AWS CloudHSM OpenSSL Provider zum Erstellen einer Zertifikatsignieranforderung (CSR) zu verwenden. <web_server_fake_pem.key>Ersetzen Sie ihn durch den Namen der Datei, die Ihren gefälschten privaten PEM-Schlüssel enthält. <web_server.csr>Ersetzen Sie ihn 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.

    ML-DSA OpenSSL-Versionsanforderung

    ML-DSA erfordert OpenSSL 3.5 oder höher. Auf Plattformen mit einem älteren OpenSSL-System müssen Sie eine benutzerdefinierte OpenSSL 3.5+-Binärdatei verwenden.

    Für RSA- und EC-Schlüssel ist ein Digest-Algorithmus erforderlich

    Für RSA- und EC-Schlüssel müssen Sie einen Digest-Algorithmus angeben (z. B.). -sha256 Ed25519 und benötigen ML-DSA kein Digest-Flag.

    $ openssl req -provider cloudhsm -provider default -new -sha256 -key <web_server_fake_pem.key> -out <web_server.csr>
  3. Erstellen eines selbstsignierten Zertifikats

    Führen Sie den folgenden Befehl aus, um den AWS CloudHSM OpenSSL Provider 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_server.csr>— Name der Datei, die den CSR enthält.

    • <web_server_fake_pem.key>— Name der Datei, die den gefälschten privaten PEM-Schlüssel enthält.

    • <web_server.crt>— Name der Datei, die Ihr Webserverzertifikat enthalten wird.

    $ openssl x509 -provider cloudhsm -provider default -req -sha256 -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 zuSchritt 3: Konfigurieren des Webservers.

Schritt 3: Konfigurieren des Webservers

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 erstellt haben. Denken Sie daran, Ihre vorhandenen Zertifikate und Schlüssel zu sichern, bevor Sie beginnen. Damit ist die Einrichtung Ihrer Linux-Webserversoftware für das Auslagern der SSL/TLS Serveridentität mit abgeschlossen. AWS CloudHSM

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

Konfigurieren eines NGINX-Webservers

Verwenden Sie diesen Abschnitt, um NGINX mit dem OpenSSL-Anbieter zu konfigurieren.

Um NGINX für OpenSSL Provider zu konfigurieren
  1. Stellen Sie eine Verbindung mit Ihrer Client-Instance her.

  2. 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
  3. Führen Sie den folgenden Befehl aus, um Ihr Webserverzertifikat an die erforderliche Stelle zu kopieren. Ersetzen Sie es <web_server.crt> durch den Namen Ihres Webserverzertifikats.

    $ cp <web_server.crt> /etc/pki/nginx/server.crt
  4. Führen Sie den folgenden Befehl aus, um den gefälschten privaten PEM-Schlüssel an die erforderliche Stelle zu kopieren. <web_server_fake_pem.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
  5. 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
  6. 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.

    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.

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

      Mithilfe einer separaten Konfigurationsdatei können Sie die Nutzung des CloudHSM-Anbieters nur auf bestimmte Anwendungen beschränken, die kryptografische Operationen erfordern. HSM-backed

      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
    3. Stellen Sie sicher, dass die CLOUDHSM_PIN Umgebungsvariable mit Ihren Crypto User (CU) -Anmeldeinformationen festgelegt ist:

      $ export CLOUDHSM_PIN=<username>:<password>
    4. 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 aufgeführt 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
  7. 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
  8. 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. Dies erfordert möglicherweise Linux-Root-Berechtigungen. 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+)

    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+)

    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 26.04 LTS

    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.

  9. 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
    2. Ö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. Erstellen Sie eine Sicherungskopie der nginx.service Datei:

      $ cp /lib/systemd/system/nginx.service /lib/systemd/system/nginx.service.backup
    2. Ö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. Erstellen Sie eine Sicherungskopie der nginx.service Datei:

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

      EnvironmentFile=/etc/sysconfig/nginx
    Ubuntu 26.04 LTS
    1. Erstellen Sie eine Sicherungskopie der nginx.service Datei:

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

      EnvironmentFile=/etc/sysconfig/nginx
  10. Ü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.

  11. 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 Anmeldeinformationen für den Cryptography User (CU) 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 es durch den vollständigen Pfad zu der Konfigurationsdatei, in der Sie erstellt habenUm NGINX für OpenSSL Provider zu konfigurieren.

    Speichern Sie die Datei.

    RHEL 9 (9.2+)

    Ö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 es durch den vollständigen Pfad zu der Konfigurationsdatei, in der Sie erstellt habenUm NGINX für OpenSSL Provider zu konfigurieren.

    Speichern Sie die Datei.

    RHEL 10 (10.0+)

    Ö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 es durch den vollständigen Pfad zu der Konfigurationsdatei, in der Sie erstellt habenUm NGINX für OpenSSL Provider zu konfigurieren.

    Speichern Sie die Datei.

    Ubuntu 26.04 LTS

    Ö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 es durch den vollständigen Pfad zu der Konfigurationsdatei, in der Sie erstellt habenUm NGINX für OpenSSL Provider zu konfigurieren.

    Speichern Sie die Datei.

  12. 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+)

    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+)

    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 26.04 LTS

    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

Konfigurieren Sie den HAProxy-Webserver

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.

Um HAProxy für OpenSSL Provider zu konfigurieren
  1. Erstellen Sie eine Sicherungskopie der vorhandenen kombinierten Zertifikatsdatei, falls sie existiert:

    $ cp server-combined.pem server-combined.pem.backup
  2. Erstellen Sie eine kombinierte Zertifikatsdatei für HAProxy mithilfe Ihres Zertifikats und des gefälschten CloudHSM-PEM-Schlüssels:

    $ cat server.crt server.key > server-combined.pem
  3. Erstellen Sie eine Sicherungskopie der vorhandenen HAProxy-Konfiguration:

    $ cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.backup
  4. 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 Ihrem Dateispeicherort entspricht.

  5. 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 der HAProxy-Servicedatei und ändern Sie sie:

    $ 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
  6. Erstellen Sie die Umgebungsdatei am entsprechenden Speicherort für Ihr System.

    Amazon Linux and RHEL

    Erstellen Sie eine Sicherungskopie der 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 Sicherungskopie der HAProxy-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.

  7. Laden Sie die Systemd-Konfiguration neu:

    $ systemctl daemon-reload
  8. Starten Sie HAProxy mit der CloudHSM TLS-Offload-Konfiguration:

    $ systemctl start haproxy

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

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

Nachdem Sie HAProxy konfiguriert haben, gehen Sie zu. Verifizieren, dass HTTPS das konfigurierte Zertifikat verwendet

Schritt 4: Aktivieren von HTTPS-Datenverkehr und Verifizieren des Zertifikats

Nachdem Sie Ihren Webserver für SSL/TLS Offload mit konfiguriert haben AWS CloudHSM, fügen Sie Ihre Webserver-Instance 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, das Sie für den SSL/TLS Offload mit konfiguriert haben. AWS CloudHSM

Aktivieren von eingehenden HTTPS-Verbindungen

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

  2. Wählen Sie im Navigationsbereich Sicherheitsgruppen aus.

  3. Wählen Sie Sicherheitsgruppe erstellen.

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

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

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

    4. Wählen Sie Regel hinzufügen aus.

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

    6. Geben Sie für Quelle einen Quellspeicherort ein.

    7. Wählen Sie Sicherheitsgruppe erstellen aus.

  5. Wählen Sie im Navigationsbereich Instances aus.

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

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

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

  9. Wählen Sie Speichern.

Verifizieren, dass HTTPS das konfigurierte Zertifikat verwendet

Nachdem Sie den Webserver zu einer Sicherheitsgruppe hinzugefügt haben, können Sie überprüfen, ob SSL/TLS Offload Ihr selbstsigniertes Zertifikat verwendet. Sie können dazu einen Webbrowser oder ein Tool wie OpenSSL s_client nutzen.

Um 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 der Adressleiste mit z. https://. B. https://ec2-52-14-212-67.us-east-2.compute.amazonaws.com/ beginnt.

    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 im Entwicklerleitfaden zu Amazon Route 53 oder in der Dokumentation für Ihren DNS-Service.

  2. 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 an.

    • Wenn Sie Google Chrome verwenden, sehen Sie sich die Informationen auf der „Google Tools für Web Developers“-Website unter Sicherheitsprobleme verstehen an.

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

  3. 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_client 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 im Entwicklerleitfaden zu Amazon Route 53 oder in der Dokumentation für Ihren DNS-Service.

  2. 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).