¿Por qué no puedo envolver claves asimétricas usando -id-aes256-wrap-pad en OpenSSL?
Síntoma
Por defecto, el algoritmo -id-aes256-wrap-pad no está habilitado en OpenSSL. Para envolver una clave, actualice OpenSSL a la versión más reciente y parchearlo primero.
Solución
Utilice los comandos bash para crear una copia local del OpenSSL existente. No es necesario eliminar o modificar las configuraciones predeterminadas de instalación del cliente OpenSSL.
- Cambie al usuario root.
sudo su -
- Ejecute el siguiente comando y registre la versión de OpenSSL:
openssl version
- Ejecute los siguientes comandos para crear el directorio /root/build. Este directorio se utilizará para almacenar el último archivo binario OpenSSL.
mkdir $HOME/build
mkdir -p $HOME/local/ssl
cd $HOME/build
- Descargue la última versión de OpenSSL desde https://www.openssl.org/source/.
- Descargue y descomprima el archivo binario.
- Sustituya openssl-1.1.1d.tar.gz con la última versión de OpenSSL descargada en paso 4.
curl -O https://www.openssl.org/source/openssl-1.1.1d.tar.gz
tar -zxf openssl-1.1.1d.tar.gz
- Utilice la herramienta gcc para parchear la versión y compilar el archivo binario descargado.
yum install patch make gcc -y
Si está utilizando una versión que no sea OpenSSL-1.1.1d, es posible que tenga que cambiar el directorio y los comandos utilizados, o es posible que este parche no funcione correctamente.
- Ejecute los siguientes comandos:
sed -i "/BIO_get_cipher_ctx(benc, &ctx);/a\ EVP_CIPHER_CTX_set_flags(ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW);" $HOME/build/openssl-1.1.1d/apps/enc.c
- Ejecute los siguientes comandos para compilar el archivo enc.c de OpenSSL:
cd $HOME/build/openssl-1.1.1d/
./config --prefix=$HOME/local --openssldir=$HOME/local/ssl
make -j$(grep -c ^processor /proc/cpuinfo)
make install
- Configure la variable de entorno LD_LIBRARY_PATH para asegurarse de que las bibliotecas requeridas estén disponibles para OpenSSL. La última versión de OpenSSL se ha vinculado dinámicamente al archivo binario en el directorio $HOME/local/ssl/lib/, y no se puede ejecutar directamente en shell.
- Cree un script llamado openssl.sh para cargar la ruta $HOME/local/ssl/lib/ antes de ejecutar el archivo binario.
cd $HOME/local/bin/
echo -e '#!/bin/bash \nenv LD_LIBRARY_PATH=$HOME/local/lib/ $HOME/local/bin/openssl "$@"' > ./openssl.sh
- Ejecute el siguiente comando para configurar un bit de ejecución en el script:
chmod 755 ./openssl.sh
- Ejecute el siguiente comando para iniciar la versión parcheada de OpenSSL:
$HOME/local/bin/openssl.sh