Configurazione di OpenSSL per il blocco manuale delle chiavi

Prima di poter importare una chiave in Cloud KMS, devi eseguire il wrapping con lo schema PKCS#11 CKM_RSA_AES_KEY_WRAP, che include sia RSA-OAEP (incluso in OpenSSL 1.1 per impostazione predefinita) sia AES Key Wrap con Ppadding (che non lo è). Questo meccanismo non è incluso in OpenSSL.

Ti consigliamo di utilizzare l'interfaccia a riga di comando di Google Cloud per aggregare automaticamente ogni chiave durante l'importazione. Se devi decriptare manualmente le chiavi a causa di requisiti di conformità o normativi, devi prima ricompilare OpenSSL per aggiungere il supporto per l'avvolgimento tra chiavi AES e Ppadding. Dopo aver ricompilato OpenSSL, puoi aggregare la chiave manualmente.

Prima di iniziare

Non sovrascrivere i programmi binari di OpenSSL integrati nel sistema con i programmi binari forniti tramite la procedura descritta in questo argomento. Ad esempio, non installare la patch di OpenSSL direttamente in /usr. Se segui esattamente questa procedura, la patch di OpenSSL viene creata in $HOME/build e installata in $HOME/local/bin.

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

Applicazione di patch e installazione di OpenSSL v1.1.0

Se scegli di utilizzare OpenSSL per eseguire manualmente il wrapping delle chiavi prima di importarle in Cloud KMS, è necessario aprire Openvv.1.0, con la seguente patch. Dovrai compilare OpenSSL e installarlo in una posizione distinta dall'installazione predefinita di OpenSSL del tuo sistema.

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

  2. Estrai l'archivio a ${HOME}/build/openssl/ utilizzando il seguente comando. Questo comando sostituisce la 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
    @@ -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. Esegui i comandi seguenti per creare i programmi binari e le librerie OpenSSL dalla origine patch, verificare la validità della build e installare i programmi binari e le 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 di non sovrascrivere l'installazione di OpenSSL del sistema.

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

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

    Se i programmi binari sono installati correttamente, non dovresti visualizzare 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 aggiunge le librerie con patch a ${LD_LIBRARY_PATH} prima di chiamare l'interfaccia a riga di comando per la patch OpenOpen.

    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 appena creata e installata utilizzando il seguente comando:

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

Ora puoi richiamare lo script wrapper ${HOME}/local/bin/openssl.sh per aggregare manualmente le chiavi per l'importazione.