Ir para o conteúdo

Como posso corrigir o OpenSSL para permitir o uso com o mecanismo CKM_RSA_AES_KEY_WRAP do CloudHSM?

4 minuto de leitura
0

Quero usar o mecanismo CKM_RSA_AES_KEY_WRAP do AWS CloudHSM com o OpenSSL.

Breve descrição

Para usar a cifra -id-aes256-wrap-pad do OpenSSL que é compatível com o mecanismo RSA_AES_KEY_WRAP da biblioteca PKCS #11 do CloudHSM, baixe e instale a versão mais recente do OpenSSL. Em seguida, corrija-o para permitir o encapsulamento necessário para o mecanismo CKM_RSA_AES_KEY_WRAP.

Resolução

Observação:

  • a resolução a seguir não remove nem altera a instalação padrão do OpenSSL do cliente.
  • A resolução usa comandos Bash do Red Hat Enterprise Linux (RHEL) com o usuário-raiz da conta da AWS.
  • A resolução se aplica somente ao OpenSSL v1.1.x.

Corrija o OpenSSL para permitir o CKM_RSA_AES_KEY_WRAP

Antes de corrigir o OpenSSL, execute o seguinte comando para mudar para o usuário-raiz da conta:

sudo su -

Conclua as etapas a seguir:

  1. Execute o comando a seguir e observe a versão do OpenSSL:

    openssl version
  2. Baixe os binários mais recentes do OpenSSL no diretório /root/build.

  3. Execute os seguintes comandos para configurar os diretórios:

    mkdir $HOME/build
    mkdir -p $HOME/local/ssl
    cd $HOME/build
  4. Observe a versão mais recente de download do OpenSSL no site do OpenSSL.

  5. Execute os seguintes comandos para baixar e descompactar os binários:

    wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
    tar -zxf openssl-1.1.1w.tar.gz

    Observação: substitua openssl-1.1.1w.tar.gz pela versão mais recente do OpenSSL.

  6. Execute o comando a seguir para instalar o patch, criar ferramentas gcc para corrigir e compilar os binários baixados:

    yum install patch make gcc -y
  7. Digite o bloco a seguir e pressione Enter no seu dispositivo:

    cat <<-EOF | patch -d $HOME/build/ -p 0
    diff -ur orig/openssl-1.1.1w/apps/enc.c openssl-1.1.1w/apps/enc.c
    --- orig/openssl-1.1.1w/apps/enc.c      
    +++ openssl-1.1.1w/apps/enc.c   
    @@ -534,6 +534,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

    Observação: se você usa uma versão do OpenSSL diferente do OpenSSL-1.1.1w, altere o diretório e atualize os comandos. O patch funciona somente com o OpenSSL-1.1.1w.
    Exemplo de saída que confirma um patch bem-sucedido:

    [root@ip-172-31-20-119 build]# cat <<-EOF | patch -d $HOME/build/ -p 0
    diff -ur orig/openssl-1.1.1w/apps/enc.c openssl-1.1.1w/apps/enc.c
    --- orig/openssl-1.1.1w/apps/enc.c
    +++ openssl-1.1.1w/apps/enc.c
    @@ -534,6 +534,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
    patching file openssl-1.1.1w/apps/enc.c
  8. Execute o comando a seguir para compilar o arquivo OpenSSL enc.c:

    cd $HOME/build/openssl-1.1.1w/
    ./config --prefix=$HOME/local --openssldir=$HOME/local/ssl
    make -j$(grep -c ^processor /proc/cpuinfo)
    make install

    Observação: pode levar vários minutos para que cada comando seja compilado.

A versão mais recente do OpenSSL se vincula dinamicamente às bibliotecas no diretório $HOME/local/ssl/lib/, e seu shell não pode executá-la diretamente.

Execute o OpenSSL em seu shell

Conclua as etapas a seguir:

  1. Execute o comando a seguir para definir a variável de ambiente LD_LIBRARY_PATH para que as bibliotecas associadas estejam disponíveis para o OpenSSL:

    cd $HOME/local/bin/
    echo -e '#!/bin/bash \nenv LD_LIBRARY_PATH=$HOME/local/lib/ $HOME/local/bin/openssl "$@"' > ./openssl.sh

    Observação: como você deve executar o OpenSSL-1.1.1w várias vezes antes de executar o binário, crie um script chamado openssl.sh que carregue o caminho $HOME/local/ssl/lib/.

  2. Execute o comando a seguir para definir o bit de execução no script:

    chmod 755 ./openssl.sh
  3. Execute o seguinte comando para iniciar o OpenSSL-1.1.1:

    $HOME/local/bin/openssl.sh

    Observação: é possível usar o comando $HOME/local/bin/openssl.sh posteriormente para executar a versão corrigida do OpenSSL em uma variável de ambiente. Com a versão corrigida do OpenSSL, é possível executar vários comandos.

  4. Insira a versão e pressione Enter no seu dispositivo para verificar a versão do OpenSSL no prompt de comando.

  5. Para sair do prompt de comando, digite quit e pressione Enter no seu dispositivo.

  6. Execute o comando a seguir para configurar um alias:

    alias OPENSSL_V111="$HOME/local/bin/openssl.sh"

    Observação: também é possível adicionar o alias ao seu .bash_profile.

  7. Use o OpenSSL para transferir chaves para o CloudHSM.

AWS OFICIALAtualizada há 10 meses