Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
Wie verwende ich OpenSSL und das CloudHSM Command Line Tool, um meine Schlüssel sicher an CloudHSM zu übertragen?
Ich möchte das CloudHSM Command Line Tool (CloudHSM CLI) verwenden, um den Unterbefehl „key unwrap“ auszuführen, um lokale Schlüssel in AWS CloudHSM zu importieren.
Kurzbeschreibung
Verschlüssle zunächst den Nutzdatenschlüssel mit einem kurzlebigen Advanced Encryption Standard (AES)-Schlüssel. Verschlüssle dann den kurzlebigen AES-Schlüssel mit deinem öffentlichen Schlüssel aus einem Schlüsselpaar. Füge schließlich den verschlüsselten Nutzdatenschlüssel und den verschlüsselten kurzlebigen Schlüssel zu einer einzigen Datei zusammen. Die Datei wird in einem verschlüsselten Format an das CloudHSM gesendet, und der private Schlüssel entschlüsselt die Datei aus dem Schlüsselpaar. Der AES_KEY_WRAP-Mechanismus entschlüsselt den kurzlebigen AES-Schlüssel und verwendet den Schlüssel, um deinen Nutzdatenschlüssel zu entschlüsseln.
Hinweis: Führe die folgenden Schritte auf einer Amazon Elastic Compute Cloud (Amazon EC2)-Instance aus, auf der Linux ausgeführt wird. Es hat sich bewährt, ein Amazon Linux 2023 Amazon Machine Image (AMI) zu verwenden, das die erforderliche OpenSSL-Version und Dienstprogramme enthält.
Erstelle die folgenden Schlüssel:
- Nutzdaten-AES-, RSA- oder EC-Schlüssel, den du importierst und mit dem CloudHSM verwendest.
- Temporärer AES-Schlüssel, den AES_KEY_WRAP zum Verschlüsseln der Nutzlast benötigt. Es hat sich bewährt, AES zu verwenden, da hier keine Größenbeschränkungen dafür gelten, was verschlüsselt werden kann.
- RSA-Schlüsselpaar, das verwendet wird, um diese Schlüssel sicher im CloudHSM zu ver- und entpacken.
Um das Verpacken im Umschlag verwenden zu können, benötigst du OpenSSL Version 3.x.
Führe den folgenden Befehl aus, um die OpenSSL-Version zu ermitteln, die du hast:
openssl version
Beispielausgabe:
OpenSSL 3.0.8 7 Feb 2023 (Library: OpenSSL 3.0.8 7 Feb 2023)
Lösung
Hinweis: Ersetze in den folgenden Befehlen die folgenden Werte durch deine Werte:
- YOUR_CRYPTO_USER_NAME durch deinen Krypto-Benutzernamen
- YOUR_CRYPTO_USER_PASSWORD durch dein Passwort
- YOUR_WRAPPING_KEY_LABEL durch die Schlüsselbezeichnung, die du zum Verpacken deines öffentlichen RSA-Schlüssels zugewiesen hast
- YOUR_UNWRAPPING_KEY_LABEL durch die Schlüsselbezeichnung, die du zum Entpacken deines privaten RSA-Schlüssels zugewiesen hast
- YOUR_IMPORTED_KEY_LABEL durch die Schlüsselbezeichnung, die du dem importierten Nutzdatenschlüssel zugewiesen hast
Die Schlüsselbezeichnungen für das Ver- und Entpacken müssen eindeutig sein, da Schlüsselbezeichnungen eine Filterbedingung für die Befehle key generate-file und key unwrap sind. Du kannst auch eine andere Filterbedingung verwenden, um Schlüssel eindeutig zu identifizieren. Weitere Informationen zu Schlüsselfiltern findest du unter Filterschlüssel, die CloudHSM CLI verwenden.
Krypto-Benutzeranmeldeinformationen für CloudHSM CLI festlegen
Führe die folgenden Befehle aus:
export CLOUDHSM_ROLE="crypto-user" export CLOUDHSM_PIN="YOUR_CRYPTO_USER_NAME:YOUR_CRYPTO_USER_PASSWORD"
AES-Nutzdaten importieren
Befolge folgende Schritte, um die lokalen Schlüssel zu erstellen, zu verschlüsseln und zu importieren:
-
Führe die folgenden Befehle aus, um die AES-, kurzlebigen AES- und RSA-Schlüssel für Nutzdaten zu erstellen:
openssl rand -out payload_aes 32 openssl rand -out ephemeral_aes 32 /opt/cloudhsm/bin/cloudhsm-cli key generate-asymmetric-pair rsa --public-label YOUR_WRAPPING_KEY_LABEL --private-label YOUR_UNWRAPPING_KEY_LABEL --modulus-size-bits 4096 --public-exponent 65537 --private-attributes unwrap=true /opt/cloudhsm/bin/cloudhsm-cli key generate-file --encoding pem --path public.pem --filter attr.label=YOUR_WRAPPING_KEY_LABELHinweis: Erstelle die Schlüssel in ihrem eigenen Verzeichnis, um Dateien nachverfolgen zu können.
-
Führe den folgenden Befehl aus, um die Hex-Rohwerte des kurzlebigen AES-Schlüssels in eine Variable einzufügen:
EPHEMERAL_AES_HEX=$(hexdump -v -e '/1 "%02X"' < ephemeral_aes)Hinweis: Stelle sicher, dass du das Hilfsprogramm hexdump installiert hast. Wenn du hexdump nicht installierst, gibt der vorhergehende Befehl einen Fehler zurück. Anweisungen zur Installation des hexdump-Hilfsprogramms findest du in der Dokumentation zu deinem Betriebssystem (OS).
-
Um den kurzlebigen AES-Schlüssel zum Verpacken der Nutzdaten zu verwenden, führe den OpenSSL-Befehl enc aus:
openssl enc -id-aes256-wrap-pad -K $EPHEMERAL_AES_HEX -iv A65959A6 -in payload_aes -out payload_wrappedHinweis: Das Verschlüsselungsverfahren -id-aes256-wrap-pad ist der RFC 3394-konforme Verpackmechanismus, der zusammen mit CKM_RSA_AES_KEY_WRAP existiert. Die RFC 3394-Erweiterung, RFC 5649, legt die -iv-Werte fest. Weitere Informationen findest du unter AES key wrap with padding algorithm (AES-Schlüssel-Verpacken mit Padding-Algorithmus) und AES key wrap algorithm (AES-Schlüsselverpack-Algorithmus) auf der IETF-Website.
-
Verwende den öffentlichen Schlüssel aus dem RSA-Schlüsselpaar, um den AES-Schlüssel zu verschlüsseln:
openssl pkeyutl -encrypt -in ephemeral_aes -out ephemeral_wrapped -pubin -inkey public.pem -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha1 -pkeyopt rsa_mgf1_md:sha1 -
Füge auf dem lokalen Computer den verschlüsselten Nutzdatenschlüssel und den kurzlebigen AES-Schlüssel zu einer einzigen Datei mit dem Namen rsa_aes_wrapped zusammen:
cat ephemeral_wrapped payload_wrapped > rsa_aes_wrapped -
Führe den folgenden Befehl aus, um den privaten RSA-Schlüssel zusammen mit key unwrap rsa-aes zu verwenden, um den verbundenen Nutzdatenschlüssel in das CloudHSM zu entpacken:
/opt/cloudhsm/bin/cloudhsm-cli key unwrap rsa-aes --data-path rsa_aes_wrapped --key-type-class aes --label YOUR_IMPORTED_KEY_LABEL --hash-function sha1 --mgf mgf1-sha1 --filter attr.label=YOUR_UNWRAPPING_KEY_LABEL --attributes decrypt=true encrypt=trueHinweis: Du musst --key-type-class aes verwenden, um AES-Schlüssel zu entpacken. Verwende je nach Schlüsselverwendung --attributes, um Schlüsselattribute zuzuweisen. Weitere Informationen zu Optionen und Schlüsselattributen findest du unter Schlüsselattribute für die CloudHSM-CLI und in den Beispielen für die Verwendung des Befehls „key unwrap rsa-aes“.
Du erhältst einen Import des Nutzdaten-AES-Schlüssels, der der folgenden Ausgabe ähnelt:
{ "error_code": 0, "data": { "key": { "key-reference": "0x000000000068031a", "key-info": { "key-owners": [ { "username": "YOUR_CRYPTO_USER_NAME", "key-coverage": "full" } ], "shared-users": [], "cluster-coverage": "full" }, "attributes": { "key-type": "aes", "label": "YOUR_IMPORTED_KEY_LABEL", "id": "0x", "check-value": "0xb31c2a", "class": "secret-key", "encrypt": true, "decrypt": true, "token": true, "always-sensitive": false, "derive": false, "destroyable": true, "extractable": true, "local": false, "modifiable": true, "never-extractable": false, "private": true, "sensitive": true, "sign": true, "trusted": false, "unwrap": false, "verify": true, "wrap": false, "wrap-with-trusted": false, "key-length-bytes": 32 } } } }
RSA-Nutzdaten importieren
Führe die folgenden Schritte aus:
-
Wenn du einen privaten RSA-Schlüssel in das CloudHSM entpacken möchtest, führe diese Befehle aus, um den Nutzdatenschlüssel in einen privaten RSA-Schlüssel zu ändern:
openssl genrsa -out payload_rsa.pem 2048 openssl rand -out ephemeral_aes 32 -
Verwende einen Klartext-Editor, um das Format der RSA-Schlüssel zu überprüfen:
PKCS1 format: -----BEGIN RSA PRIVATE KEY----- - PKCS8 format: -----BEGIN PRIVATE KEY-----Hinweis: Die RSA-Schlüssel sind im PKCS #1-Format. Die CloudHSM CLI geht jedoch davon aus, dass der private Schlüssel im PKCS #8 DER-Format vorliegt.
-
Führe den folgenden Befehl aus, um den Schlüssel payload_rsa.pem in das PKCS #8-Format und DER-kodiert zu konvertieren:
openssl pkcs8 -topk8 -inform PEM -outform DER -in payload_rsa.pem -out payload_rsa_pkcs8.der -nocrypt -
Führe die Schritte 2 bis 5 aus dem Abschnitt AES-Nutzdaten importieren aus. Ersetze payload_aes durch payload_rsa_pkcs8.der.
-
Führe den folgenden Befehl aus, um den privaten Nutzdaten-RSA-Schlüssel in das CloudHSM zu entpacken:
/opt/cloudhsm/bin/cloudhsm-cli key unwrap rsa-aes --data-path rsa_aes_wrapped --key-type-class rsa-private --label YOUR_IMPORTED_KEY_LABEL --hash-function sha1 --mgf mgf1-sha1 --filter attr.label=YOUR_UNWRAPPING_KEY_LABEL --attributes decrypt=true sign=trueHinweis: Du musst --key-type-class rsa-private verwenden, um RSA-Schlüssel zu entpacken. Verwende je nach Schlüsselverwendung --attributes, um Schlüsselattribute zuzuweisen.
Die EC-Nutzdaten importieren
Gehe wie folgt vor, um die Nutzdaten zu importieren:
-
Wenn du einen privaten EC-Schlüssel in das CloudHSM entpacken möchtest, führe diese Befehle aus, um den Nutzdaten-Schlüssel in einen privaten EC-Schlüssel zu ändern:
openssl ecparam -name secp256k1 -genkey -noout -out payload_ec.pemopenssl rand -out ephemeral_aes 32 -
Verwende einen Klartext-Editor, um das Format der EC-Schlüssel zu überprüfen:
PKCS1 format: -----BEGIN EC PRIVATE KEY----- - PKCS8 format: -----BEGIN PRIVATE KEY-----Hinweis: Die EC-Schlüssel sind im PKCS #1-Format. Die CloudHSM CLI geht jedoch davon aus, dass der private Schlüssel im PKCS #8 DER-Format vorliegt.
-
Führe den folgenden Befehl aus, um den Schlüssel payload_ec.pem in das PKCS #8-Format und DER-kodiert zu konvertieren:
openssl pkcs8 -topk8 -inform PEM -outform DER -in payload_ec.pem -out payload_ec_pkcs8.der -nocrypt -
Führe die Schritte 2 bis 5 aus dem Abschnitt AES-Nutzdaten importieren aus. Ersetze payload_aes durch payload_ec_pkcs8.der.
-
Führe den folgenden Befehl aus, um den privaten Nutzdaten-EC-Schlüssel in das CloudHSM zu entpacken:
/opt/cloudhsm/bin/cloudhsm-cli key unwrap rsa-aes --data-path rsa_aes_wrapped --key-type-class ec-private --label YOUR_IMPORTED_KEY_LABEL --hash-function sha1 --mgf mgf1-sha1 --filter attr.label=YOUR_UNWRAPPING_KEY_LABEL --attributes decrypt=true sign=trueHinweis: Du musst --key-type-class ec-private verwenden, um EC-Schlüssel zu entpacken. Verwende je nach Schlüsselverwendung --attributes, um Schlüsselattribute zuzuweisen.
Ähnliche Informationen
Unterstützte Mechanismen für die PKCS #11-Bibliothek für AWS CloudHSM-Client SDK 5
- Tags
- AWS CloudHSM
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor 2 Jahren
AWS OFFICIALAktualisiert vor 2 Jahren