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

A cifra -id-aes256-wrap-pad do OpenSSL compatível com o mecanismo RSA_AES_KEY_WRAP do CloudHSM PKCS#11 não está habilitada por padrão na ferramenta de linha de comando do OpenSSL.

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

Siga estas etapas para usar os comandos Bash para criar uma cópia local do OpenSSL v1.1.0.

Observação:

  • Essas etapas não removem nem alteram a instalação padrão do OpenSSL do cliente.
  • Essas instruções usam comandos RHEL com a conta de usuário-raiz. Use o comando sudo su - para mudar para o usuário-raiz. Em seguida, use a versão corrigida do OpenSSL.
  • Essas instruções se aplicam somente ao OpenSSL v1.1.x.

Corrija o OpenSSL para permitir o CKM_RSA_AES_KEY_WRAP

  1. Execute esse comando para concluir todas as etapas como usuário-raiz e garantir que você tenha as permissões corretas para diretórios e binários:

    sudo su -
  2. Execute esse comando e anote a versão do OpenSSL:

    openssl version
  3. Baixe os binários mais recentes do OpenSSL no diretório /root/build. Execute estes comandos para configurar os diretórios:

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

  5. Baixe e descompacte os binários usando estes comandos:
    Observação: substitua openssl-1.1.1d.tar.gz pela versão mais recente do OpenSSL da etapa 4.

    curl -O https://www.openssl.org/source/openssl-1.1.1d.tar.gztar -zxf openssl-1.1.1d.tar.gz
  6. Instale o patch, crie as ferramentas do gcc para corrigir e, em seguida, compile os binários baixados:

    yum install patch make gcc -y
  7. Copie e cole esse bloco e, em seguida, escolha Enter no seu dispositivo.
    Observação: talvez seja necessário alterar o diretório se você usar uma versão diferente do OpenSSL-1.1.1d. Também pode ser necessário atualizar esses comandos para versões mais recentes do OpenSSL ou esse patch pode não funcionar.

    cat <<-EOF | patch -d $HOME/build/ -p0diff -ur orig/openssl-1.1.1d/apps/enc.c openssl-1.1.1d/apps/enc.c
    --- orig/openssl-1.1.1d/apps/enc.c      
    +++ openssl-1.1.1d/apps/enc.c   
    @@ -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

    Você recebe uma saída que confirma um patch bem-sucedido, semelhante à seguinte:

    [root@ip-172-31-20-119 ~]# cat <<-EOF | patch -d $HOME/build/ -p0 diff -ur orig/openssl-1.1.1d/apps/enc.c openssl-1.1.1d/apps/enc.c
    --- orig/openssl-1.1.1d/apps/enc.c
    +++ openssl-l.1.1d/apps/enc.c
    @@ -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
    
    patching file openssl-1.1.1d/apps/enc.c
  8. Execute este comando para compilar o arquivo OpenSSL enc.c:
    Observação: pode levar vários minutos para que cada comando seja compilado.

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

    Você instalou com sucesso a versão mais recente do OpenSSL. Essa versão do OpenSSL está vinculada dinamicamente às bibliotecas no diretório $HOME/local/ssl/lib/, e seu shell não pode executá-la diretamente.

  9. Defina a variável de ambiente LD_LIBRARY_PATH para garantir que as bibliotecas associadas estejam disponíveis para o OpenSSL.
    Dica: como você deve executar o OpenSSL-1.1.1d várias vezes antes de executar o binário, crie um script chamado openssl.sh que carregue o caminho $HOME/local/ssl/lib/.

    cd $HOME/local/bin/
    echo -e '#!/bin/bash \nenv LD_LIBRARY_PATH=$HOME/local/lib/ $HOME/local/bin/openssl "$@"' > ./openssl.sh
  10. Use este comando para definir o bit de execução no script:

chmod 755 ./openssl.sh
  1. Para iniciar o OpenSSL-1.1.1, execute este comando:
$HOME/local/bin/openssl.sh

Dica: você pode usar o comando $HOME/local/bin/openssl.sh posteriormente para executar a versão corrigida do OpenSSL em uma variável de ambiente. Isso permite que você faça referência à versão corrigida do OpenSSL para executar vários comandos. Você receberá um prompt de comando. Para verificar a versão do OpenSSL, insira a versão e escolha Enter no seu dispositivo. Para sair do prompt de comando, digite quit e escolha Enter no seu dispositivo. Para configurar um alias, execute este comando ou adicione-o ao seu .bash_profile:

alias OPENSSL_V111="$HOME/local/bin/openssl.sh"
  1. Siga as instruções para transferir chaves com segurança para o CloudHSM com o OpenSSL.

Informações relacionadas

Supported mechanisms

AWS OFICIAL
AWS OFICIALAtualizada há 2 meses