In diesem Thema erfahren Sie, wie Sie einen Schlüssel manuell verpacken, bevor Sie den Schlüssel in Cloud KMS importieren. Folgen Sie der Anleitung zu diesem Thema nur dann, wenn Sie den Schlüssel nicht vor dem Importieren automatisch mit dem gcloud
-Befehlszeilentool verpacken möchten. Eine Übersicht
über die Unterschiede finden Sie unter So importieren Sie Schlüssel.
Die in diesem Thema beschriebenen Schritte lassen sich in 5 bis 10 Minuten ausführen. Dabei sind die Schritte unter Vorbereitung nicht berücksichtigt.
Hinweis
Bevor Sie einen Schlüssel verpacken können, müssen Sie die folgenden Voraussetzungen erfüllen.
- Erstellen Sie einen Zielschlüsselring und -schlüssel sowie einen Importjob.
- Überprüfen Sie, ob Ihr Schlüssel für den Import in Cloud KMS lokal verfügbar und richtig formatiert ist.
- OpenSSL aktualisieren und neu kompilieren
Verpackungsschlüssel abrufen
In diesem Abschnitt wird erläutert, wie Sie den Verpackungsschlüssel aus dem Importjob abrufen, den Sie unter Hinweise erstellt haben. Wir empfehlen, die Google Cloud Console zu verwenden.
Console
Rufen Sie in der Cloud Console die Seite Cryptographic Keys (Kryptografische Schlüssel) auf.
Klicken Sie auf den Namen des Schlüsselbunds, der den Importjob enthält.
Klicken Sie oben auf der Seite auf den Tab Importjobs.
Klicken Sie auf Mehr more_vert und anschließend im Pop-up-Menü auf Verpackungsschlüssel herunterladen.
gcloud
Führen Sie den Befehl gcloud kms import-jobs describe
aus, um zu überprüfen, ob der Importjob aktiv ist:
gcloud kms import-jobs describe import-job \ --location location \ --keyring key-ring-name \ --format="value(state)"
state: ACTIVE
Führen Sie den folgenden Befehl aus, um den öffentlichen Schlüssel aus dem Importjob in ${HOME}/wrapping-key.pem
zu speichern.
gcloud kms import-jobs describe \ --location=location \ --keyring=keyring \ --format="value(publicKey.pem)" \ import-job-name > ${HOME}/wrapping-key.pem
API
Rufen Sie die Methode [
ImportJob.get
][11] auf.Rufen Sie den öffentlichen Schlüssel über das Feld [
publicKey
][13] der AntwortImportJob.get
ab. Dieser Wert hat den Typ [WrappingPublicKey
][14]. Das Feld [pem
][21] vom Typ [WrappingPublicKey
][22] ist der öffentliche Schlüssel, der im PEM-Format (Privacy Enhanced Mail) codiert ist.
Weitere Informationen zum PEM-codierten Format finden Sie unter RFC 7468, insbesondere in den Abschnitten Allgemeine Überlegungen und Textcodierung von Informationen zum öffentlichen Schlüssel.
Umgebungsvariablen einrichten
Die OpenSSL-Befehle erfordern mehrere Dateipfade als Eingabewerte. Definieren Sie Umgebungsvariablen für die Dateipfade, um die Ausführung der Befehle zu erleichtern.
Legen Sie die Variable
OpenSSL_V110
auf den Pfad Ihresopenssl.sh
-Skripts fest. Wenn Sie die Anleitung zum Patchen und Neukompilieren von OpenSSL genau befolgt haben, können Sie diesen Befehl verwenden, ohne den Wert der Variablen zu ändern.OPENSSL_V110="${HOME}/local/bin/openssl.sh"
Legen Sie für die Variable
PUB_WRAPPING_KEY
den vollständigen Pfad zum Verpackungsschlüssel fest, den Sie aus dem Importjob heruntergeladen haben. Der Verpackungsschlüssel endet auf.pem
.Mit den folgenden Befehlen wird die Variable
PUB_WRAPPING_KEY
auf${HOME}/wrapping-key.pem
gesetzt.PUB_WRAPPING_KEY="${HOME}/wrapping-key.pem"
Legen Sie für die Variable
TARGET_KEY
den vollständigen Pfad zum entpackten Schlüssel fest.- Legen Sie für symmetrische Schlüssel
TARGET_KEY
auf den Pfad zur Datei.bin
fest. - Legen Sie für asymmetrische Schlüssel
TARGET_KEY
auf den Pfad zur Datei.der
fest.
TARGET_KEY=/path/to/key
- Legen Sie für symmetrische Schlüssel
Legen Sie die Variable
BASE_DIR
auf ein Verzeichnis fest, in das temporäre Dateien geschrieben werden können, und erstellen Sie gegebenenfalls das Verzeichnis. Auf dieses Verzeichnis sollte nur Ihr aktueller Nutzer zugreifen können. Verwenden Sie kein abschließendes/
-Zeichen am Ende des Verzeichnisnamens.BASE_DIR="${HOME}/wrap_tmp" mkdir -m 700 -p ${BASE_DIR}
Definieren Sie Umgebungsvariablen für die drei Zwischendateien.
TEMP_AES_KEY="${BASE_DIR}/temp_aes_key.bin" TEMP_AES_KEY_WRAPPED="${BASE_DIR}/temp_aes_key_wrapped.bin" TARGET_KEY_WRAPPED="${BASE_DIR}/target_key_wrapped.bin"
Setzen Sie die Variable
RSA_AES_WRAPPED_KEY
auf den vollständigen Pfad, um den verpackten Zielschlüssel zu schreiben, den Sie letztendlich importieren. Stellen Sie dabei sicher, dass Sie Schreibzugriff auf das Verzeichnis haben.RSA_AES_WRAPPED_KEY=/path/to/wrapped-target-key.bin mkdir -m u+wx -p $(dirname ${RSA_AES_WRAPPED_KEY})
Überprüfen Sie mit den folgenden Befehlen, ob alle Umgebungsvariablen korrekt festgelegt sind:
echo "OPENSSL_V110: " ${OPENSSL_V110}; \ echo "PUB_WRAPPING_KEY: " ${PUB_WRAPPING_KEY}; \ echo "TARGET_KEY: " ${TARGET_KEY}; \ echo "BASE_DIR: " ${BASE_DIR}; \ echo "TEMP_AES_KEY: " ${TEMP_AES_KEY}; \ echo "TEMP_AES_KEY_WRAPPED: " ${TEMP_AES_KEY_WRAPPED}; \ echo "TARGET_KEY_WRAPPED: " ${TARGET_KEY_WRAPPED}; \ echo "RSA_AES_WRAPPED_KEY: " ${RSA_AES_WRAPPED_KEY}
Wenn die Variablen richtig eingestellt sind, können Sie den Schlüssel verpacken.
Schlüssel verpacken
Führen Sie den folgenden Befehl aus, um einen temporären, 32 Byte langen, zufälligen AES-Schlüssel zu generieren und ihn an dem von
${TEMP_AES_KEY}
gezeigten Speicherort zu speichern."${OPENSSL_V110}" rand -out "${TEMP_AES_KEY}" 32
Verpacken Sie den temporären AES-Schlüssel mithilfe des
CKM_RSA_PKCS_OAEP
-Algorithmus mit dem öffentlichen Wrapping-Schlüssel."${OPENSSL_V110}" rsautl \ -encrypt \ -pubin \ -inkey "${PUB_WRAPPING_KEY}" \ -in "${TEMP_AES_KEY}" \ -out "${TEMP_AES_KEY_WRAPPED}" \ -oaep
Verpacken Sie den Zielschlüssel mit dem verpackten temporären AES-Schlüssel mithilfe des Algorithmus
CKM_AES_KEY_WRAP_PAD
. Ersetzen Sie target-key-file durch den Namen der.bin
- oderpub
- Datei für den Schlüssel."${OPENSSL_V110}" enc \ -id-aes256-wrap-pad \ -iv A65959A6 \ -K $( hexdump -v -e '/1 "%02x"' < "${TEMP_AES_KEY}" ) \ -in "${TARGET_KEY}" \ -out "${TARGET_KEY_WRAPPED}"
Das Flag
-iv A65959A6
legt A65959A6 als alternativen Anfangswert fest. Dies ist in der Spezifikation RFC 5649 erforderlich.Sie haben nun zwei Schlüssel verpackt:
${TEMP_AES_KEY_WRAPPED}
ist der temporäre AES-Schlüssel, den Sie auf dem lokalen System erstellt haben. Er ist mit dem öffentlichen Schlüssel aus dem Importjob verpackt.${TARGET_KEY_WRAPPED}
ist der Zielschlüssel, den Sie importieren, zusammen mit dem von Ihnen generierten temporären AES-Schlüssel.
Verketten Sie die beiden verpackten Schlüssel und schreiben Sie die Ausgabe in eine einzelne Datei. Ändern Sie nicht die Reihenfolge der beiden Schlüssel im folgenden Befehl. Der temporäre Schlüssel muss vor dem Zielschlüssel stehen.
cat "${TEMP_AES_KEY_WRAPPED}" "${TARGET_KEY_WRAPPED}" > "${RSA_AES_WRAPPED_KEY}"
Löschen Sie die nicht mehr benötigten Zwischendateien.
rm ${BASE_DIR}/*
Ihr verpackter Schlüssel ist am Ort ${RSA_AES_WRAPPED_KEY}
-Variable vorhanden und Sie können eine Anfrage zum Importieren Ihres Schlüssels stellen.