Configurazione di OpenSSL per il blocco manuale delle chiavi

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

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

Prima di iniziare

Non sovrascrivere i binari OpenSSL integrati del sistema con i 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 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.

Esegui la patch e installa OpenSSL 1.1.0

Se scegli di utilizzare OpenSSL per eseguire il wrapping manuale delle chiavi prima di importarle in Cloud KMS, è necessaria la versione OpenSSL 1.1.0 con la patch riportata di seguito 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 è la release più recente della linea di codice 1.1.0. Non utilizzare una versione più recente di OpenSSL, ad esempio la v1.1.1, in questa procedura. L'applicazione della patch non andrà a buon fine.

  2. Estrai l'archivio in ${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 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 i seguenti comandi per compilare i binari e le librerie OpenSSL dal codice sorgente corretto, verifica la validità della compilazione e installa i 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 seguente comando per verificare che il nuovo file binario OpenSSL sia stato installato correttamente:

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

    Non dovresti vedere alcun output se i file binari sono installati correttamente. 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 quella che hai appena compilato e installato utilizzando il seguente comando:

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

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