Saltar al contenido

¿Cómo puedo aplicar parches a OpenSSL para permitir su uso con el mecanismo CKM_RSA_AES_KEY_WRAP de CloudHSM?

4 minutos de lectura
0

Quiero usar el mecanismo CKM_RSA_AES_KEY_WRAP de AWS CloudHSM con OpenSSL.

Descripción corta

Para usar el cifrado OpenSSL -id-aes256-wrap-pad que es compatible con el mecanismo RSA_AES_KEY_WRAP para la biblioteca PKCS #11 de CloudHSM, descarga e instala la versión más reciente de OpenSSL. Luego, aplica el parche para permitir el empaquetado de sobre que se necesita para el mecanismo CKM_RSA_AES_KEY_WRAP.

Resolución

Nota:

  • La siguiente resolución no elimina ni modifica la instalación predeterminada de OpenSSL del cliente.
  • La resolución utiliza los comandos Bash de Red Hat Enterprise Linux (RHEL) con el usuario raíz de la cuenta de AWS.
  • La resolución solo se aplica a OpenSSL v1.1.x.

Cómo aplicar parches a OpenSSL para permitir CKM_RSA_AES_KEY_WRAP

Antes de aplicar un parche a OpenSSL, ejecuta el siguiente comando para cambiar el usuario raíz de la cuenta:

sudo su -

Sigue estos pasos:

  1. Ejecuta el siguiente comando y, a continuación, anota la versión de OpenSSL:

    openssl version
  2. Descarga los últimos archivos binarios de OpenSSL en el directorio /root/build.

  3. Ejecuta los siguientes comandos para configurar los directorios:

    mkdir $HOME/build
    mkdir -p $HOME/local/ssl
    cd $HOME/build
  4. Anota la última versión de descarga de OpenSSL del sitio web de OpenSSL.

  5. Ejecuta los siguientes comandos para descargar y desempaquetar los archivos binarios:

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

    Nota: Sustituye openssl-1.1.1w.tar.gz por la versión más reciente de OpenSSL.

  6. Ejecuta el siguiente comando para instalar el parche, crear herramientas de gcc para aplicar parches y compilar los archivos binarios descargados:

    yum install patch make gcc -y
  7. Introduce el siguiente bloque y, a continuación, pulsa Intro en tu 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

    Nota: Si usas una versión de OpenSSL que no sea OpenSSL-1.1.1w, cambia el directorio y actualiza los comandos. El parche solo funciona con OpenSSL-1.1.1w.
    Ejemplo de resultado que confirma que el parche se ha realizado correctamente:

    [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. Ejecuta el siguiente comando para compilar el archivo enc.c de OpenSSL:

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

    Nota: La compilación de cada comando puede tardar varios minutos.

La versión más reciente de OpenSSL está vinculada de forma dinámica a las bibliotecas del directorio $HOME/local/ssl/lib/ y tu shell no puede ejecutarla directamente.

Ejecución de OpenSSL en el shell

Sigue estos pasos:

  1. Ejecuta el siguiente comando para configurar la variable de entorno LD_LIBRARY_PATH de modo que las bibliotecas asociadas estén disponibles para OpenSSL:

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

    Nota: Como debes ejecutar OpenSSL-1.1.1w varias veces, crea un script denominado openssl.sh que cargue la ruta $HOME/local/ssl/lib/ antes de ejecutar el archivo binario.

  2. Ejecuta el siguiente comando para configurar el bit de ejecución en el script:

    chmod 755 ./openssl.sh
  3. Ejecuta el siguiente comando para iniciar OpenSSL-1.1.1:

    $HOME/local/bin/openssl.sh

    Nota: Puedes usar el comando $HOME/local/bin/openssl.sh más adelante para ejecutar la versión parcheada de OpenSSL en una variable de entorno. Con la versión parcheada de OpenSSL, puedes ejecutar varios comandos.

  4. Introduce la versión y, a continuación, pulsa Intro en tu dispositivo para comprobar la versión de OpenSSL en el símbolo del sistema.

  5. Escribe quit y, a continuación, pulsa Intro en el dispositivo para salir del símbolo del sistema.

  6. Ejecuta el siguiente comando para configurar un alias:

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

    Nota: También puedes agregar el alias a tu .bash_profile.

  7. Usa OpenSSL para transferir claves a CloudHSM.

OFICIAL DE AWSActualizada hace 9 meses