Configurazione di OpenSSL per il blocco manuale delle chiavi

Prima di poter importare una chiave in Cloud KMS, è necessario eseguirne il wrapping utilizzando PKCS#11 Schema CKM_RSA_AES_KEY_WRAP, che include entrambi RSA-OAEP (inclusi in OpenSSL 1.1 per impostazione predefinita) e AES Key Wrap con Spaziatura interna (che non lo è). Questo meccanismo non è incluso in OpenSSL.

Ti consigliamo di utilizzare Google Cloud CLI per aggreghi automaticamente ogni chiave durante l'importazione. Se devi eseguire il wrapping delle chiavi manualmente per motivi di conformità o normativi requisiti, devi prima ricompilare OpenSSL per aggiungere il supporto per l'incapsulamento delle chiavi AES con Padding. Dopo aver ricompilato OpenSSL, puoi eseguire il wrapping della chiave manualmente.

Prima di iniziare

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

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

Applica 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, è obbligatorio OpenSSL v1.1.0, con quanto segue patch applicata. Dovrai compilare OpenSSL e installarlo in una posizione distinta dall'installazione predefinita di OpenSSL del sistema.

  1. Scarica il codice sorgente della release OpenSSL 1.1.0l da https://www.openssl.org/source. Questa è l'ultima release della riga del codice 1.1.0. Non utilizzare una versione più recente di OpenSSL, ad esempio la v1.1.1, in questa procedura. La patch avrà esito negativo per applicare le modifiche.

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

    # 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 al codice sorgente di OpenSSL estratto 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 questi comandi per creare programmi binari e librerie OpenSSL da il codice sorgente con patch, testa la build per verificarne la validità e installa i file 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 assicurarti che non sovrascrivi l'installazione OpenSSL del sistema.

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

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

    Se i file binari sono installati correttamente, non dovrebbe essere visualizzato alcun output. Se vedi FAIL, controlla l'output dei comandi make, make test e make install che hai eseguito in precedenza.

  6. I binari OpenSSL sottoposti a 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 riportati di seguito per creare uno script wrapper che aggiunga le librerie con patch al ${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 la versione appena creato e installato, utilizzando il seguente comando:

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

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