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.
Themen
-Übersicht
Unter Linux ist die NGINX
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.
-
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.
-
Installieren Sie auf einer EC2-Linux-Instance, die Zugriff auf Ihren Cluster hat, entweder den NGINX- oder den HAProxy-Webserver:
-
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
-
Installieren und konfigurieren Sie die CloudHSM CLI.
-
Verwenden Sie den folgenden Befehl, um die CloudHSM-CLI zu starten.
$/opt/cloudhsm/bin/cloudhsm-cli interactive -
Führen Sie den folgenden Befehl aus, um sich beim HSM anzumelden. Ersetzen Sie es
<user name>durch den Benutzernamen Ihres Krypto-Benutzersaws-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_pubtls_rsa_privateaws-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
prime256v1Kurve (die derNID_X9_62_prime256v1Kurve entspricht), einer öffentlichen Schlüsselbezeichnung von und einer privaten Schlüsselbezeichnung vontls_ec_pubgeneriert.tls_ec_privateaws-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_pubund einer privaten Schlüsselbezeichnung von generiert.tls_ed25519_privateaws-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-dsaBefehl, um ein Schlüsselpaar zu generieren. ML-DSA In diesem Beispiel wird ein ML-DSA-44 Schlüsselpaar mit einem öffentlichen Schlüssellabel vontls_mldsa44_pubund einem privaten Schlüssellabel von generierttls_mldsa44_private. Sie könnenML-DSA-65oder auchML-DSA-87fü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
-
Stellen Sie eine Verbindung mit Ihrer Client-Instance her.
-
Installieren Sie den OpenSSL Provider für AWS CloudHSM Client-SDK 5
Generieren eines Zertifikats
-
Besorgen Sie sich eine Kopie Ihrer gefälschten PEM-Datei, die in einem früheren Schritt generiert wurde.
-
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
reqist 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.).
-sha256Ed25519 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> -
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
-
Stellen Sie eine Verbindung mit Ihrer Client-Instance her.
-
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 -
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 -
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 -
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 -
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.
-
Suchen Sie Ihre OpenSSL-Konfigurationsdatei:
$openssl version -dSie sollten eine Ausgabe sehen, die der folgenden ähnelt:
OPENSSLDIR: "/etc/pki/tls"Die Konfigurationsdatei befindet sich
openssl.cnfin diesem Verzeichnis. -
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 >## NOTE: This should point to the system default openssl config file. # Replace /etc/pki/tls with the path to your OpenSSL configuration directory .include<example-cloudhsm-openssl.cnf><< 'EOF'</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 = 1EOF -
Stellen Sie sicher, dass die
CLOUDHSM_PINUmgebungsvariable mit Ihren Crypto User (CU) -Anmeldeinformationen festgelegt ist:$export CLOUDHSM_PIN=<username>:<password> -
Stellen Sie die
OPENSSL_CONFUmgebungsvariable 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 -providersSie 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
-
-
Führen Sie den folgenden Befehl aus, um die Datei
/etc/nginx/nginx.confzu sichern.$cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup -
Aktualisieren Sie die NGINX-Konfiguration.
Anmerkung
Jeder Cluster kann maximal 1000 NGINX-Worker-Prozesse auf allen NGINX-Webservern unterstützen.
Speichern Sie die Datei.
-
Sichern Sie die
systemd-Konfigurationsdatei und legen Sie dann denEnvironmentFile-Pfad fest. -
Überprüfen Sie, ob die Datei
/etc/sysconfig/nginxvorhanden 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 Namennginx, wenn die Datei nicht vorhanden ist.
-
-
Konfigurieren Sie die NGINX-Umgebung.
-
Starten Sie den NGINX-Webserver.
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
-
Erstellen Sie eine Sicherungskopie der vorhandenen kombinierten Zertifikatsdatei, falls sie existiert:
$cp server-combined.pem server-combined.pem.backup -
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 -
Erstellen Sie eine Sicherungskopie der vorhandenen HAProxy-Konfiguration:
$cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.backup -
Erstellen Sie eine neue CloudHSM TLS-Offload-Konfiguration unter:
/etc/haproxy/haproxy.cfgglobal 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 checkAktualisieren Sie den Zertifikatspfad so, dass er Ihrem Dateispeicherort entspricht.
-
Konfigurieren Sie systemd so, dass es eine Umgebungsdatei für HAProxy verwendet. Der Speicherort hängt von Ihrer Linux-Distribution ab.
-
Erstellen Sie die Umgebungsdatei am entsprechenden Speicherort für Ihr System.
Ersetzen Sie
<CU user name>und<password>durch Ihre CU-Anmeldeinformationen. -
Laden Sie die Systemd-Konfiguration neu:
$systemctl daemon-reload -
Starten Sie HAProxy mit der CloudHSM TLS-Offload-Konfiguration:
$systemctl start haproxySie 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
Themen
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
-
Öffnen Sie die Amazon-EC2-Konsole unter https://console.aws.amazon.com/ec2/
. -
Wählen Sie im Navigationsbereich Sicherheitsgruppen aus.
-
Wählen Sie Sicherheitsgruppe erstellen.
-
Führen Sie für Sicherheitsgruppe erstellen die folgenden Schritte aus:
-
Geben Sie in das Feld Sicherheitsgruppenname einen Namen für die Sicherheitsgruppe ein, die Sie erstellen.
-
(Optional) Geben Sie eine Beschreibung der Sicherheitsgruppe ein, die Sie erstellen.
-
Wählen Sie für VPC die VPC aus, die Ihre Amazon-EC2-Instance enthält.
-
Wählen Sie Regel hinzufügen aus.
-
Wählen Sie im Drop-down-Fenster für Typ die Option HTTPS aus.
-
Geben Sie für Quelle einen Quellspeicherort ein.
-
Wählen Sie Sicherheitsgruppe erstellen aus.
-
-
Wählen Sie im Navigationsbereich Instances aus.
-
Aktivieren Sie das Kontrollkästchen neben Ihrer Webserver-Instance.
-
Wählen Sie das Drop-down-Menü Aktionen oben auf der Seite. Wählen Sie Sicherheit und dann Sicherheitsgruppen ändern aus.
-
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.
-
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
Um SSL/TLS Offload mit einem Webbrowser zu überprüfen
-
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.
-
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.
-
-
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
-
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>:443Tipp
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.
-
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).