Antes de importar uma chave para o Cloud KMS, ela precisa ser encapsulada
usando o método
PKCS#11 (link em inglês)
CKM_RSA_AES_KEY_WRAP
, que inclui RSA-OAEP
(que estão incluídos)
em OpenSSL 1.1 por padrão) e encapsulamento de chaves AES
com padding (que não é). Esse mecanismo não está incluído no OpenSSL.
Recomendamos o uso da CLI do Google Cloud para encapsular cada chave automaticamente durante a importação. Se você precisar encapsular as chaves manualmente devido a requisitos regulatórios ou de conformidade, primeiro recompile o OpenSSL para adicionar compatibilidade com encapsulamento de chaves AES com preenchimento. Depois de recompilar o OpenSSL, você pode encapsular a chave manualmente.
Antes de começar
Não substitua os binários OpenSSL integrados do sistema pelos binários com patch produzidos seguindo os procedimentos deste tópico. Por exemplo, não instale o OpenSSL com patch diretamente em /usr
. Se você seguir exatamente esse procedimento, o OpenSSL com patch será criado em $HOME/build
e instalado em $HOME/local/bin
.
Se o ${HOME}/local/bin
já existir, faça backup do conteúdo dele ou mova esses arquivos para outro lugar antes de seguir as etapas deste tópico.
Corrigir e instalar o OpenSSL v1.1.0
Se você optar por usar o OpenSSL para ajustar manualmente suas chaves antes de importá-las para o Cloud KMS, o OpenSSL v1.1.0 será necessário, com a seguinte correção aplicada. Você precisará compilar o OpenSSL e instalá-lo em um local separado da instalação padrão do seu sistema OpenSSL.
Faça o download do código-fonte para a versão do OpenSSL 1.1.0l em 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. O patch não será aplicado.
Extraia o arquivo para
${HOME}/build/openssl/
usando o comando a seguir. Esse comando substitui o diretório padrão, que inclui a versão do OpenSSL e muda com frequência. Substitua /path/to/downloaded-openssl.tar.gz pelo caminho do arquivo.tar.gz
salvo.# 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
Aplique um patch personalizado à origem do OpenSSL extraída usando os comandos a seguir. O patch ativa a sinalização
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
Execute os seguintes comandos para construir binários e bibliotecas OpenSSL a partir da origem com patch, teste a validade da build e instale 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 install
Não omita ou modifique os sinalizadores
--prefix
ou--openssldir
, para garantir que você não substitua a instalação do OpenSSL do sistema.Execute o seguinte comando para verificar se o novo binário do OpenSSL foi instalado com êxito:
test -x ${HOME}/local/bin/openssl || echo FAIL
Você não verá saída se os binários estiverem instalados corretamente. Caso veja
FAIL
, verifique a saída dos comandosmake
,make test
emake install
executados anteriormente.Os binários do OpenSSL corrigidos são vinculados dinamicamente às bibliotecas do OpenSSL em
${HOME}/local/ssl/lib/
, mas o comandold
não indexa essas bibliotecas por padrão. Execute os seguintes comandos para criar um script de encapsulamento que adicione as bibliotecas com patch ao${LD_LIBRARY_PATH}
antes de invocar a CLI para o OpenSSL com 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
Verifique se a versão do OpenSSL que o script inicia é a versão que você acabou de criar e instalar usando o seguinte comando:
${HOME}/local/bin/openssl.sh version
Agora você pode invocar o script de encapsulamento ${HOME}/local/bin/openssl.sh
para encapsular manualmente as chaves para importação.