Configurazione di OpenSSL per il blocco manuale delle chiavi

Prima di poter importare una chiave in Cloud KMS, è necessario eseguirne il wrapping utilizzando lo schema PKCS#11 CKM_RSA_AES_KEY_WRAP, che include sia RSA-OAEP (che è incluso in OpenSSL 1.1 per impostazione predefinita) sia il wrapping di chiavi AES con Padding (che non lo è). Questo meccanismo non è incluso in OpenSSL.

Ti consigliamo di utilizzare Google Cloud CLI per eseguire il wrapping automatico di ogni chiave durante l'importazione. Se devi eseguire il wrapping delle chiavi manualmente in base a requisiti di conformità o normativi, devi prima ricompilare OpenSSL per aggiungere il supporto per il wrapping di chiavi AES con spaziatura interna. Dopo aver ricompilato OpenSSL, puoi eseguire il wrapping della chiave manualmente.

Prima di iniziare

Non sovrascrivere i programmi binari OpenSSL integrati del sistema con i programmi binari con patch prodotti seguendo le procedure descritte in questo argomento. Ad esempio, non installare OpenSSL con patch direttamente in /usr. Se segui esattamente questa procedura, OpenSSL con patch è integrato in $HOME/build e installato in $HOME/local/bin.

Se ${HOME}/local/bin esiste già, esegui il backup dei contenuti o sposta i file altrove prima di seguire la procedura descritta in questo argomento.

Applica la patch e installa OpenSSL v1.1.0

Se scegli di utilizzare OpenSSL per eseguire manualmente il wrapping delle chiavi prima di importarle in Cloud KMS, è necessario OpenSSL v1.1.0, con la seguente patch applicata. Dovrai compilare OpenSSL e installarlo in un percorso separato dall'installazione OpenSSL predefinita del tuo sistema.

  1. Scarica l'origine per la release OpenSSL 1.1.0l da https://www.openssl.org/source. Questa è l'ultima release nella riga di codice 1.1.0. Non utilizzare in questa procedura una versione più recente di OpenSSL, come v1.1.1. La patch non verrà applicata.

  2. Estrai l'archivio in ${HOME}/build/openssl/ utilizzando il seguente comando. Questo comando esegue l'override della directory predefinita, che include la versione di OpenSSL e cambia spesso. Sostituisci /path/to/downloaded-openssl.tar.gz con il percorso dell'archivio .tar.gz scaricato.

    # 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. Applica una patch personalizzata all'origine OpenSSL estratta, utilizzando i seguenti comandi.La patch attiva il 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
    @@ -482,6 +482,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. Esegui i comandi seguenti per creare i file binari e le librerie OpenSSL dall'origine a cui è stata applicata la patch, testare la validità della build e installare programmi binari e librerie nella directory ${HOME}/local.

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

    Non omettere o modificare i flag --prefix o --openssldir per evitare di sovrascrivere l'installazione OpenSSL del sistema.

  5. Esegui questo comando per verificare che il nuovo programma binario di OpenSSL sia stato installato correttamente:

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

    Se i programmi binari sono installati correttamente, non dovresti vedere alcun output. Se vedi FAIL, controlla l'output dei comandi make, make test e make install che hai eseguito in precedenza.

  6. I programmi binari di OpenSSL con patch sono collegati dinamicamente alle librerie OpenSSL in ${HOME}/local/ssl/lib/, ma il comando ld non indicizza queste librerie per impostazione predefinita. Esegui i comandi seguenti per creare uno script wrapper che aggiunga le librerie con patch a ${LD_LIBRARY_PATH} prima di richiamare l'interfaccia a riga di comando per OpenSSL con patch.

    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. Verifica che la versione di OpenSSL avviata dallo script sia quella che hai appena creato e installato utilizzando il seguente comando:

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

Ora puoi richiamare lo script del wrapper ${HOME}/local/bin/openssl.sh per eseguire il wrapping manuale delle chiavi per l'importazione.