Ich verwende OpenSSL, um meinen Schlüssel in AWS KMS zu importieren, erhalte aber die Fehlermeldung „InvalidCipherText“. Wie kann ich das beheben?

Lesedauer: 5 Minute
0

Ich habe einen AWS KMS-Schlüssel in AWS Key Management Service (AWS KMS) erstellt. Ich habe den Ursprung des KMS-Schlüsselmaterials als extern angegeben, RSAES_OAEP_SHA_256 als Algorithmus für den Wrapping-Schlüssel ausgewählt und dann OpenSSL verwendet, um mein Schlüsselmaterial mit dem Wrapping-Schlüssel zu verschlüsseln. Wenn ich jedoch mein verschlüsseltes Schlüsselmaterial importiere, schlägt die Anfrage fehl und ich erhalte eine Fehlermeldung bezüglich „InvalidCipherText“. Wie kann ich diesen Importfehler vermeiden?

Kurzbeschreibung

Standardmäßig verwendet OpenSSL die SHA-1-Hash-Funktion.

Um Importfehler zu vermeiden, wenn Sie den RSAES\ _OAEP\ _SHA\ _256-Algorithmus (SHA-256-Hashfunktion) verwenden, verschlüsseln Sie Ihr Schlüsselmaterial mit OpenSSL mit dem Befehl openssl pkeyutl und geben Sie die Parameter -pkeyopt rsa\ _padding\ _mode:oaep und -pkeyopt rsa\ _oaep\ _md:sha256 an.

Das vollständige Verfahren zum Importieren von Schlüsselmaterial in AWS KMS mithilfe von OpenSSL und RSAES\ _OAEP\ _SHA\ _256 sieht wie folgt aus:

1.    Erstellen Sie einen KMS-Schlüssel, indem Sie Extern als Materialursprung des Schlüssels verwenden.

2.    Laden Sie den (öffentlichen) Wrapping-Schlüssel und das Import-Token herunter.

3.    Generieren Sie einen symmetrischen 256-Bit-Schlüssel.

4.    Stellen Sie sicher, dass Ihre OpenSSL-Version openssl pkeyutl unterstützt.

5.    Verschlüsseln Sie Ihr Schlüsselmaterial mit dem Wrapping-Schlüssel.

6.    Importieren Sie Ihr verschlüsseltes Schlüsselmaterial.

Hinweis: Wenn Sie den Verschlüsselungsalgorithmus RSAES\ _OAEP\ _SHA\ _1 für Ihren Wrapping-Schlüssel verwenden, finden Sie weitere Informationen unter So importieren Sie Schlüsselmaterial.

Lösung

Erstellen Sie einen KMS-Schlüssel mit Extern für den Materialursprung des Schlüssels

Führen Sie die folgenden Befehle der AWS-Befehlszeilenschnittstelle (AWS CLI) aus, um ein KMS für externes Schlüsselmaterial zu erstellen.

Hinweis:

export REGION=us-east-1
export KEY_ALIAS=kms_key_with_externalmaterial
export KEY_ID=`aws kms create-key --region $REGION --origin EXTERNAL --description $KEY_ALIAS --query KeyMetadata.KeyId --output text`
aws kms --region $REGION create-alias --alias-name alias/$KEY_ALIAS --target-key-id $KEY_ID

Ihr neu erstellter KMS-Schlüsselstatus lautet Import steht noch aus, bis Sie das Schlüsselmaterial importiert haben. Führen Sie den folgenden Befehl aus, um den Status des Schlüssels einzusehen.

aws kms --region $REGION describe-key --key-id $KEY_ID

Laden Sie den (öffentlichen) Wrapping-Schlüssel und das Import-Token herunter

Führen Sie die folgenden AWS-CLI-Befehle aus, um die Werte PublicKey (Wrapping-Schlüssel) und ImportToken abzurufen, beide Werte mit base64 zu dekodieren und diese Werte dann in separaten Dateien zu speichern. Beachten Sie, dass der RSAES\ _OAEP\ _SHA\ _256 Wrapping-Algorithmus im Befehl get-parameters-for-import angegeben ist.

export KEY_PARAMETERS=`aws kms --region $REGION get-parameters-for-import --key-id $KEY_ID --wrapping-algorithm RSAES_OAEP_SHA_256 --wrapping-key-spec RSA_2048`
echo $KEY_PARAMETERS | awk '{print $7}' | tr -d '",' | base64 --decode > PublicKey.bin
echo $KEY_PARAMETERS | awk '{print $5}' | tr -d '",' | base64 --decode > ImportToken.bin

Diese Befehle speichern den Wrapping-Schlüssel in PublicKey.bin und das Import-Token in ImportToken.bin.

Generieren Sie einen symmetrischen 256-Bit-Schlüssel

Das Schlüsselmaterial muss ein symmetrischer 256-Bit-Schlüssel (32 Byte) sein. Führen Sie einen der folgenden Befehle aus, um den Schlüssel zu generieren:

OpenSSL

openssl rand -out PlaintextKeyMaterial.bin 32

-oder-

dd

dd if=/dev/urandom of=PlaintextKeyMaterial.bin bs=32 count=1

Stellen Sie sicher, dass Ihre OpenSSL-Version openssl pkeyutl unterstützt

Verwenden Sie den Befehl openssl pkeyutl, um Ihr Schlüsselmaterial mit RSAES\ _OAEP\ _SHA\ _256 als Wrapping-Algorithmus zu verschlüsseln.

Wichtig: Dieser Befehl ist nur in OpenSSL 1.0.2 und späteren Versionen verfügbar.

Wenn Sie einen RHEL-basierten Linux-Computer verwenden, z. B. eine Amazon Elastic Compute Cloud (Amazon EC2)-Instance, die mit einem Amazon Linux-AMI gestartet wurde, gehen Sie wie folgt vor.

1.    Führen Sie den folgenden Befehl aus, um Ihre OpenSSL-Version zu überprüfen.

openssl version

2.    Führen Sie den folgenden Befehl aus, um OpenSSL zu aktualisieren.

sudo yum –y update openssl

Wenn Sie macOS verwenden, gehen Sie wie folgt vor.

1.    Führen Sie die folgenden Homebrew-Befehle aus.

brew update
brew upgrade openssl
brew info openssl

2.    Der letzte Befehl zeigt Ihnen, dass OpenSSL in /usr/local/opt/openssl/bin/ installiert ist. Bestätigen Sie die OpenSSL-Version, indem Sie diesen Befehl ausführen.

/usr/local/opt/openssl/bin/openssl version

3.    Um immer die neueste OpenSSL-Version zu verwenden, editieren Sie ~/.bash\ _profile und fügen Sie die folgende Zeile am Ende der Datei hinzu:

export PATH="/usr/local/opt/openssl/bin:$PATH"

4.    Führen Sie nach dem Hinzufügen der Zeile den folgenden Befehl aus.

source ~/.bash_profile

5.    Führen Sie den folgenden Befehl aus, um die Änderung in Ihrer macOS-Umgebung zu überprüfen.

echo $PATH
openssl version

Verschlüsseln Sie Ihr Schlüsselmaterial mit dem Wrapping-Schlüssel

Führen Sie den folgenden Befehl aus, um Ihr Schlüsselmaterial mit der neuesten Version von OpenSSL und dem zuvor heruntergeladenen Wrapping-Schlüssel zu verschlüsseln.

Hinweis: Der Wrapping-Schlüssel ist in PublicKey.bin gespeichert.

openssl pkeyutl -in PlaintextKeyMaterial.bin -out EncryptedKeyMaterial.bin -inkey PublicKey.bin -keyform DER \
            -pubin -encrypt -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256

Der Befehl generiert EncryptedKeyMaterial.bin. Sie importieren diesen Wert als verschlüsseltes Schlüsselmaterial in den KMS.

Importieren Sie Ihr verschlüsseltes Schlüsselmaterial

Führen Sie den folgenden AWS-CLI-Befehl aus, um das verschlüsselte Schlüsselmaterial in den KMS-Schlüssel zu importieren.

aws kms --region $REGION import-key-material --key-id $KEY_ID --encrypted-key-material fileb://EncryptedKeyMaterial.bin --import-token fileb://ImportToken.bin --expiration-model KEY_MATERIAL_DOES_NOT_EXPIRE

Nach Abschluss des Imports ändert sich der Status des Schlüssels in Aktiviert. Führen Sie den folgenden Befehl aus, um den Status des Schlüssels zu überprüfen.

aws kms --region $REGION describe-key --key-id $KEY_ID

Ähnliche Informationen

Über importiertes Schlüsselmaterial