¿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.

Breve descripción

El conjunto de cifrado -id-aes256-wrap-pad de OpenSSL compatible con el mecanismo PKCS #11 de CloudHSM RSA_AES_KEY_WRAP no está habilitado de forma predeterminada en la herramienta de línea de comandos de OpenSSL.

Descargue e instale la versión más reciente de OpenSSL. Luego, aplique el parche para permitir el empaquetado de sobre que se necesita para el mecanismo CKM_RSA_AES_KEY_WRAP.

Solución

Siga estos pasos para usar los comandos Bash y crear una copia local de OpenSSL v1.1.0.

Nota:

  • Estos pasos no eliminan ni alteran la instalación predeterminada de OpenSSL del cliente.
  • Estas instrucciones utilizan los comandos de RHEL con la cuenta de usuario raíz. Use el comando sudo su - para cambiar al usuario raíz. A continuación, utilice la versión parcheada de OpenSSL.
  • Estas instrucciones se aplican únicamente a OpenSSL v1.1.x.

Parche OpenSSL para permitir CKM_RSA_AES_KEY_WRAP

  1. Ejecute este comando para completar todos los pasos como usuario raíz y asegurarse de que tiene los permisos correctos para los directorios y los archivos binarios:

    sudo su -
  2. Ejecute este comando y, a continuación, anote la versión de OpenSSL:

    openssl version
  3. Descargue los últimos archivos binarios de OpenSSL en el directorio /root/build. Ejecute estos comandos para configurar los directorios:

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

  5. Descargue y descomprima los archivos binarios con estos comandos:
    Nota: Sustituya openssl-1.1.1d.tar.gz por la versión más reciente de OpenSSL del paso 4.

    curl -O https://www.openssl.org/source/openssl-1.1.1d.tar.gztar -zxf openssl-1.1.1d.tar.gz
  6. Instale el parche, cree herramientas de gcc para aplicar el parche y, a continuación, compile los binarios descargados:

    yum install patch make gcc -y
  7. Copie y pegue este bloque y, a continuación, seleccione entrar en su dispositivo.
    Nota: Es posible que necesite cambiar el directorio si usa una versión diferente a la de OpenSSL-1.1.1d. Es posible que necesite actualizar estos comandos para las versiones más recientes de OpenSSL o que este parche no funcione.

    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

    Recibirá un resultado que confirma que el parche se ha realizado correctamente, similar al siguiente:

    [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. Ejecute este comando para compilar el archivo OpenSSL enc.c:
    Nota: La compilación de cada comando puede tardar varios minutos.

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

    Ha instalado correctamente la última versión de OpenSSL. Esta versión de OpenSSL está vinculada de forma dinámica a las bibliotecas del directorio $HOME/local/SSL/lib/, y su shell no puede ejecutarla directamente.

  9. Establezca la variable de entorno LD_LIBRARY_PATH para asegurarse de que las bibliotecas asociadas estén disponibles para OpenSSL.
    Consejo: Como debe ejecutar OpenSSL-1.1.1d varias veces, antes de ejecutar el binario, cree un script denominado openssl.sh que cargue la ruta $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. Utilice este comando para configurar el bit de ejecución en el script:

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

Consejo: Puede usar el comando $HOME/local/bin/openssl.sh más adelante para ejecutar la versión parcheada de OpenSSL en una variable de entorno. Esto le permite hacer referencia a la versión parcheada de OpenSSL para ejecutar varios comandos. Recibirá un símbolo del sistema. Para verificar la versión de OpenSSL, introduzca la version y, a continuación, seleccione entrar en su dispositivo. Para salir del símbolo del sistema, escriba quit y, a continuación, seleccione entrar en el dispositivo. Para configurar un alias, ejecute este comando o agréguelo a su .bash_profile:

alias OPENSSL_V111="$HOME/local/bin/openssl.sh"
  1. Siga las instrucciones para transferir claves de forma segura a CloudHSM con OpenSSL.

Información relacionada

Supported mechanisms

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 3 meses