Antes de poder importar uma chave para o Cloud KMS, tem de a encapsular
com o esquema PKCS#11
CKM_RSA_AES_KEY_WRAP, que inclui RSA-OAEP (incluído
no OpenSSL 1.1 por predefinição) e o encapsulamento de chaves AES
com preenchimento (que não está incluído). Esse mecanismo não está incluído no OpenSSL.
Recomendamos que use a CLI do Google Cloud para encapsular cada chave automaticamente durante a importação. Se tiver de encapsular as chaves manualmente devido a requisitos de conformidade ou regulamentares, tem de recompilar primeiro o OpenSSL para adicionar suporte para o encapsulamento de chaves AES com preenchimento. Depois de recompilar o OpenSSL, pode encapsular a chave manualmente.
Antes de começar
Não substitua os binários OpenSSL incorporados do seu sistema pelos binários corrigidos produzidos seguindo os procedimentos neste tópico. Por exemplo, não instale o OpenSSL corrigido diretamente em /usr. Se seguir este procedimento exatamente, o OpenSSL corrigido é incorporado em $HOME/build e instalado em $HOME/local/bin.
Se a pasta ${HOME}/local/bin já existir, faça uma cópia de segurança do respetivo conteúdo ou mova esses ficheiros para outro local antes de seguir os passos neste tópico.
Aplique patches e instale o OpenSSL v1.1.0
Se optar por usar o OpenSSL para encapsular manualmente as suas chaves antes de as importar para o Cloud KMS, é necessária a versão 1.1.0 do OpenSSL com o seguinte patch aplicado. Tem de compilar o OpenSSL e instalá-lo numa localização separada da instalação predefinida do OpenSSL do seu sistema.
Transfira a origem da versão 1.1.0l do OpenSSL a partir de https://www.openssl.org/source. Esta é a versão mais recente na linha de código 1.1.0. Não use uma versão mais recente do OpenSSL, como a v1.1.1, neste procedimento. A correção não vai ser aplicada.
Extraia o arquivo para
${HOME}/build/openssl/através do seguinte comando. Este comando substitui o diretório predefinido, que inclui a versão do OpenSSL e é alterado com frequência. Substitua /path/to/downloaded-openssl.tar.gz pelo caminho para o arquivo.tar.gztransferido.# 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 1Aplique uma correção personalizada à origem do OpenSSL extraída através dos seguintes comandos.A correção ativa a 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", EOFExecute os seguintes comandos para criar os binários e as bibliotecas do OpenSSL a partir da origem corrigida, testar a validade da compilação e instalar os binários e as bibliotecas no diretório
${HOME}/local.CPUS=$(getconf _NPROCESSORS_ONLN) cd ${HOME}/build/openssl ./config --prefix=${HOME}/local --openssldir=${HOME}/local/ssl make -j${CPUS} make test make installNão omita nem modifique as flags
--prefixou--openssldirpara garantir que não substitui a instalação do OpenSSL do sistema.Execute o seguinte comando para verificar se o novo ficheiro binário OpenSSL foi instalado com êxito:
test -x ${HOME}/local/bin/openssl || echo FAILNão deve ver qualquer resultado se os ficheiros binários estiverem instalados corretamente. Se vir
FAIL, verifique a saída dos comandosmake,make testemake installque executou anteriormente.Os binários do OpenSSL corrigidos estão dinamicamente associados às bibliotecas do OpenSSL em
${HOME}/local/ssl/lib/, mas o comandoldnão indexa estas bibliotecas por predefinição. Execute os seguintes comandos para criar um script de wrapper que adiciona as bibliotecas corrigidas ao${LD_LIBRARY_PATH}antes de invocar a CLI para o OpenSSL corrigido.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.shVerifique se a versão do OpenSSL iniciada pelo script é a versão que acabou de criar e instalar através do seguinte comando:
${HOME}/local/bin/openssl.sh version
Agora, pode invocar o script de contentor ${HOME}/local/bin/openssl.sh para criar manualmente um contentor de chaves para importação.