In diesem Thema erfahren Sie, wie Sie einen Schlüssel manuell verpacken, bevor Sie den Schlüssel in Cloud KMS importieren. Sie müssen der Anleitung in diesem Thema nur folgen, wenn Sie die Google Cloud CLI nicht verwenden möchten, um den Schlüssel vor dem Import automatisch zu verpacken. Eine Übersicht der Unterschiede finden Sie unter Funktionsweise des Schlüsselimports.
Die in diesem Thema beschriebenen Schritte lassen sich in 5 bis 10 Minuten ausführen. Dabei sind die Schritte unter Vorbereitung nicht berücksichtigt.
Hinweise
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. Es wird empfohlen, die Google Cloud Console zu verwenden.
Console
Rufen Sie in der Google Cloud Console die Seite Schlüsselverwaltung 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-CLI
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 \ --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=KEY_RING \ --format="value(publicKey.pem)" \ IMPORT_JOB > ${HOME}/wrapping-key.pem
API
Rufen Sie die Methode
ImportJob.get
auf.Rufen Sie den öffentlichen Schlüssel über das Feld
publicKey
der AntwortImportJob.get
ab. Dieser Wert hat den TypWrappingPublicKey
. Das Feldpem
vom TypWrappingPublicKey
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. Stellen Sie sicher, dass Sie Schreibzugriff auf die Verzeichnisse haben, die Sie unten definieren.
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
.PUB_WRAPPING_KEY="WRAPPING_KEY_PATH"
Legen Sie für die Variable
TARGET_KEY
den vollständigen Pfad zum entpackten Schlüssel (Ziel) fest.TARGET_KEY=TARGET_KEY_PATH
Ersetzen Sie
TARGET_KEY_PATH
durch den Pfad zur Datei.bin
(bei symmetrischen Schlüsseln) oder den Pfad zur Datei.der
(bei asymmetrischen Schlüsseln).Wenn Sie RSA-AES-Wrapping durchführen, legen Sie für die Variable
TEMP_AES_KEY
den vollständigen Pfad zum temporären AES-Schlüssel fest.TEMP_AES_KEY=TEMP_AES_KEY_PATH
Legen Sie für die Variable
WRAPPED_KEY
den vollständigen Pfad fest, unter dem Sie den verpackten Zielschlüssel speichern möchten, der für den Import bereit ist.WRAPPED_KEY=WRAPPED_KEY_PATH
Überprüfen Sie mit den folgenden Befehlen, ob alle Umgebungsvariablen korrekt festgelegt sind:
echo "PUB_WRAPPING_KEY: " ${PUB_WRAPPING_KEY}; \ echo "TARGET_KEY: " ${TARGET_KEY}; \ echo "TEMP_AES_KEY: " ${TEMP_AES_KEY}; \ echo "WRAPPED_KEY: " ${WRAPPED_KEY}
Wenn die Variablen richtig festgelegt sind, können Sie den Schlüssel verpacken. Es gibt zwei Ansätze, wie unten beschrieben: mit nur RSA oder mit RSA-AES.
Schlüssel verpacken
Schlüssel mit RSA verpacken
Bei diesem Ansatz wird der Zielschlüssel in einen RSA-Block verpackt. Die Größe des Zielschlüssels ist daher begrenzt. Sie können diese Methode beispielsweise nicht verwenden, um einen weiteren RSA-Schlüssel zu verpacken. Die unterstützten Importmethoden sind rsa-oaep-3072-sha256
und rsa-oaep-4096-sha256
.
Verpacken Sie den Zielschlüssel mit dem öffentlichen Verpackungsschlüssel. Verwenden Sie dazu den Algorithmus
CKM_RSA_PKCS_OAEP
:openssl pkeyutl \ -encrypt \ -pubin \ -inkey ${PUB_WRAPPING_KEY} \ -in ${TARGET_KEY} \ -out ${WRAPPED_KEY} \ -pkeyopt rsa_padding_mode:oaep \ -pkeyopt rsa_oaep_md:sha256 \ -pkeyopt rsa_mgf1_md:sha256
Schlüssel mit RSA-AES verpacken
Bei diesem Ansatz wird der Zielschlüssel mit einem temporären AES-Schlüssel verpackt. Der temporäre AES-Schlüssel wird dann vom RSA-Schlüssel verpackt. Diese beiden verpackten Schlüssel werden verkettet und importiert. Da der Zielschlüssel mit AES statt mit RSA verpackt wird, können mit diesem Ansatz große Schlüssel verpackt werden. Die unterstützten Importmethoden sind rsa-oaep-3072-sha1-aes-256
, rsa-oaep-4096-sha1-aes-256
, rsa-oaep-3072-sha256-aes-256
und rsa-oaep-4096-sha256-aes-256
.
Generieren Sie einen temporären zufälligen AES-Schlüssel mit einer Länge von 32 Byte und speichern Sie ihn an dem durch
${TEMP_AES_KEY}
angegebenen Speicherort:openssl 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. Wenn die Importmethode entwederrsa-oaep-3072-sha1-aes-256
oderrsa-oaep-4096-sha1-aes-256
ist, verwenden Siesha1
fürrsa_oaep_md
undrsa_mgf1_md
. Verwenden Siesha256
fürrsa-oaep-3072-sha256-aes-256
undrsa-oaep-4096-sha256-aes-256
.openssl pkeyutl \ -encrypt \ -pubin \ -inkey ${PUB_WRAPPING_KEY} \ -in ${TEMP_AES_KEY} \ -out ${WRAPPED_KEY} \ -pkeyopt rsa_padding_mode:oaep \ -pkeyopt rsa_oaep_md:{sha1|sha256} \ -pkeyopt rsa_mgf1_md:{sha1|sha256}
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"
Verpacken Sie den Zielschlüssel mit dem temporären AES-Schlüssel mit dem Algorithmus
CKM_AES_KEY_WRAP_PAD
und hängen Sie ihn anWRAPPED_KEY
an."${OPENSSL_V110}" enc \ -id-aes256-wrap-pad \ -iv A65959A6 \ -K $( hexdump -v -e '/1 "%02x"' < "${TEMP_AES_KEY}" ) \ -in "${TARGET_KEY}" >> "${WRAPPED_KEY}"
Das Flag
-iv A65959A6
legt A65959A6 als alternativen Anfangswert fest. Dies ist in der Spezifikation RFC 5649 erforderlich.
Nächste Schritte
- Der unter
WRAPPED_KEY
gespeicherte verpackte Schlüssel kann jetzt importiert werden. Folgen Sie der Anleitung unter Manuell verpackten Schlüssel importieren, um den Schlüssel zu importieren.