OpenSSL für manuelles Key-Wrapping konfigurieren

Bevor Sie einen Schlüssel in Cloud KMS importieren können, muss er mit dem CKM_RSA_AES_KEY_WRAP-Schema PKCS#11 verpackt werden, das sowohl RSA-OAEP (standardmäßig in OpenSSL 1.1 enthalten) als auch AES-Key-Wrap mit Padding (nicht enthalten) umfasst. Dieser Mechanismus ist in OpenSSL nicht enthalten.

Wir empfehlen, das Befehlszeilentool gcloud zu verwenden, um während des Imports jeden Schlüssel automatisch zu verpacken. Wenn Sie Ihre Schlüssel aufgrund von Compliance- oder behördlichen Anforderungen manuell verpacken müssen, müssen Sie OpenSSL erst neu kompilieren, um eine Unterstützung für AES Key Wrap mit Padding hinzuzufügen. Nach dem erneuten Kompilieren von OpenSSL können Sie den Schlüssel manuell verpacken.

Hinweis

Überschreiben Sie die integrierten OpenSSL-Binärdateien Ihres Systems nicht mit den gepatchten Binärdateien, die mithilfe der in diesem Thema beschriebenen Verfahren erstellt wurden. Installieren Sie beispielsweise die gepatchte OpenSSL nicht direkt in /usr. Wenn Sie dieses Verfahren genau befolgen, ist die gepatchte OpenSSL in $HOME/build integriert und wird in $HOME/local/bin installiert.

Wenn ${HOME}/local/bin bereits vorhanden ist, sichern Sie den Inhalt oder verschieben Sie diese Dateien an eine andere Stelle, bevor Sie die Schritte in diesem Thema ausführen.

OpenSSL v1.1.0 patchen und installieren

Wenn Sie OpenSSL verwenden, um Ihre Schlüssel manuell zu verpacken, bevor Sie sie in Cloud KMS importieren, ist OpenSSL v1.1.0 mit dem folgenden Patch erforderlich. Sie müssen OpenSSL kompilieren und an einem anderen Speicherort als der OpenSSL-Standardinstallation Ihres Systems installieren.

  1. Laden Sie den Quellcode für OpenSSL 1.1.0l von https://www.openssl.org/source herunter. Dies ist die neueste Version der Codezeile 1.1.0. Verwenden Sie in diesem Verfahren keine neuere Version von OpenSSL, z. B. v1.1.1. Der Patch wird nicht angewendet.

  2. Extrahieren Sie das Archiv mit dem folgenden Befehl in ${HOME}/build/openssl/. Dieser Befehl überschreibt das Standardverzeichnis, das die Version von OpenSSL enthält und sich häufig ändert. Ersetzen Sie /path/to/downloaded-openssl.tar.gz durch den Pfad zum heruntergeladenen .tar.gz-Archiv.

    # Create the directory for the eventual OpenSSL binaries
    mkdir -p ${HOME}/local/ssl
    
    # Create the build directory
    mkdir -p ${HOME}/build/openssl
    
    # Extract the archive to ${HOME}/build/openssl
    tar xzvf /path/to/downloaded-openssl.tar.gz \
      -C ${HOME}/build/openssl/ \
      --strip-components 1
    
  3. Wenden Sie mit den folgenden Befehlen einen benutzerdefinierten Patch auf die extrahierte OpenSSL-Quelle an. Der Patch aktiviert das Flag EVP_CIPHER_CTX_FLAG_WRAP_ALLOW.

    cd ${HOME}/build
    cat <<-EOF | patch -d . -p0
    --- orig/openssl/apps/enc.c 2020-01-17 14:39:54.991708785 -0500
    +++ openssl/apps/enc.c  2020-01-17 14:41:33.215704269 -0500
    @@ -533,6 +533,7 @@
              */
    
             BIO_get_cipher_ctx(benc, &ctx);
    +   EVP_CIPHER_CTX_set_flags(ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW);
    
             if (!EVP_CipherInit_ex(ctx, cipher, NULL, NULL, NULL, enc)) {
                 BIO_printf(bio_err, "Error setting cipher %s\n",
    EOF
    

  4. Führen Sie die folgenden Befehle aus, um die OpenSSL-Binärdateien und -Bibliotheken aus der gepatchten Quelle zu erstellen, den Build auf Gültigkeit zu testen und die Binärdateien und Bibliotheken in das Verzeichnis ${HOME}/local zu installieren.

    CPUS=$(getconf _NPROCESSORS_ONLN)
    cd ${HOME}/build/openssl
    ./config --prefix=${HOME}/local --openssldir=${HOME}/local/ssl
    make -j${CPUS}
    make test
    make install
    

    Sie sollten die Flags --prefix oder --openssldir nicht weglassen oder ändern, damit Sie die OpenSSL-Installation des Systems nicht überschreiben.

  5. Führen Sie den folgenden Befehl aus, um zu überprüfen, ob die neue OpenSSL-Binärdatei erfolgreich installiert wurde:

    test -x ${HOME}/local/bin/openssl || echo FAIL
    

    Wenn die Binärdateien korrekt installiert sind, sollte keine Ausgabe angezeigt werden. Wenn FAIL angezeigt wird, überprüfen Sie die Ausgabe der Befehle make, make test und make install, die Sie zuvor ausgeführt haben.

  6. Die gepatchten OpenSSL-Binärdateien werden dynamisch mit den OpenSSL-Bibliotheken in ${HOME}/local/ssl/lib/ verknüpft, aber der ld-Befehl indexiert diese Bibliotheken nicht standardmäßig. Führen Sie die folgenden Befehle aus, um ein Verpackungs-Skript zu erstellen, das die gepatchten Bibliotheken zu ${LD_LIBRARY_PATH} hinzufügt, bevor die CLI für das gepatchte OpenSSL aufgerufen wird.

    cat > ${HOME}/local/bin/openssl.sh <<-EOF
    #!/bin/bash
    env LD_LIBRARY_PATH=${HOME}/local/lib/ ${HOME}/local/bin/openssl "\$@"
    EOF
    chmod u+x ${HOME}/local/bin/openssl.sh
    

  7. Überprüfen Sie, ob die Version von OpenSSL, die das Skript startet, die von Ihnen gerade erstellte und installierte Version ist. Verwenden Sie dazu den folgenden Befehl:

    ${HOME}/local/bin/openssl.sh version
    

Sie können jetzt das ${HOME}/local/bin/openssl.sh-Verpackungs-Skript aufrufen, um Schlüssel für den Import manuell zu verpacken.