Utilizo OpenSSL para importar mi clave a AWS KMS pero aparece el error «InvalidCipherText». ¿Cómo puedo solucionar este problema?
He creado una clave de AWS KMS en AWS Key Management Service (AWS KMS). He especificado el origen del material de claves de KMS como externo, he elegido RSAES_OAEP_SHA_256 como algoritmo para la clave de encapsulamiento y luego he usado OpenSSL para cifrar mi material de claves con la clave de encapsulamiento. Sin embargo, cuando importo mi material de claves cifrado, la solicitud falla y aparece un mensaje de error relacionado con «InvalidCipherText». ¿Cómo puedo evitar este error de importación?
Breve descripción
De forma predeterminada, OpenSSL usa la función de hash SHA-1.
Para evitar errores de importación al utilizar el algoritmo RSAES_OAEP_SHA_256 (función de hash SHA-256), cifre el material de claves con OpenSSL mediante el comando openssl pkeyutl y especifique los parámetros –pkeyopt rsa_padding_mode:oaep y –pkeyopt rsa_oaep_md:sha256.
El procedimiento completo para importar material de claves a AWS KMS mediante OpenSSL y RSAES_OAEP_SHA_256 es el siguiente:
1. Cree una clave de KMS utilizando External para el origen del material de claves.
2. Descargue la clave de encapsulamiento (pública) y el token de importación.
3. Genere una clave simétrica de 256 bits.
4. Compruebe que su versión de OpenSSL sea compatible con openssl pkeyutl.
5. Cifre su material de claves con la clave de encapsulamiento.
6. Importe su material de claves cifrado.
Nota: Si utiliza el algoritmo de cifrado RSAES_OAEP_SHA_1 para su clave de encapsulamiento, consulte How to import key material.
Resolución
Crear una clave de KMS utilizando External para el origen del material de claves
Ejecute los siguientes comandos de la Interfaz de la línea de comandos de AWS (AWS CLI) para crear un KMS para material de claves externo.
Nota:
- Si recibe errores al ejecutar los comandos de la AWS CLI, asegúrese de que está utilizando la versión más reciente de AWS CLI.
- Asegúrese de reemplazar los valores de export REGION y export KEY_ALIAS por los detalles de su clave.
export REGION=us-east-1 export KEY_ALIAS=kms_key_with_externalmaterial export KEY_ID=`aws kms create-key --region $REGION --origin EXTERNAL --description $KEY_ALIAS --query KeyMetadata.KeyId --output text` aws kms --region $REGION create-alias --alias-name alias/$KEY_ALIAS --target-key-id $KEY_ID
El estado de la clave de KMS recién creada es pendiente de importación hasta que importe el material de claves. Ejecute el siguiente comando para ver el estado de la clave.
aws kms --region $REGION describe-key --key-id $KEY_ID
Descargar la clave de encapsulamiento (pública) y el token de importación
Ejecute los siguientes comandos de AWS CLI para obtener los valores PublicKey (clave de encapsulamiento) e ImportToken, decodifique ambos valores mediante base64 y, a continuación, guarde estos valores en archivos independientes. Tenga en cuenta que el algoritmo de encapsulamiento RSAES_OAEP_SHA_256 se especifica en el comando get-parameters-for-import.
export KEY_PARAMETERS=`aws kms --region $REGION get-parameters-for-import --key-id $KEY_ID --wrapping-algorithm RSAES_OAEP_SHA_256 --wrapping-key-spec RSA_2048` echo $KEY_PARAMETERS | awk '{print $7}' | tr -d '",' | base64 --decode > PublicKey.bin echo $KEY_PARAMETERS | awk '{print $5}' | tr -d '",' | base64 --decode > ImportToken.bin
Estos comandos almacenan la clave de encapsulamiento en PublicKey.bin y el token de importación en ImportToken.bin.
Generar una clave simétrica de 256 bits
El material de claves debe ser una clave simétrica de 256 bits (32 bytes). Ejecute uno de los siguientes comandos para generar la clave:
OpenSSL
openssl rand -out PlaintextKeyMaterial.bin 32
-o-
dd
dd if=/dev/urandom of=PlaintextKeyMaterial.bin bs=32 count=1
Comprobar que su versión de OpenSSL sea compatible con openssl pkeyutl
Para cifrar su material de claves con RSAES_OAEP_SHA_256 como algoritmo de encapsulamiento, utilice el comando openssl pkeyutl.
Importante: Este comando solo está disponible en OpenSSL 1.0.2 y versiones posteriores.
Si utiliza un equipo Linux basado en RHEL, como una instancia de Amazon Elastic Compute Cloud (Amazon EC2) lanzada con una AMI de Amazon Linux, siga estos pasos.
1. Ejecute el siguiente comando para comprobar su versión de OpenSSL.
openssl version
2. Para actualizar OpenSSL, ejecute el siguiente comando.
sudo yum –y update openssl
Si usa macOS, siga estos pasos.
1. Ejecute los siguientes comandos de Homebrew.
brew update brew upgrade openssl brew info openssl
2. El último comando le muestra que OpenSSL está instalado en /usr/local/opt/openssl/bin/. Confirme la versión de OpenSSL al ejecutar este comando.
/usr/local/opt/openssl/bin/openssl version
3. Para utilizar siempre la versión más reciente de OpenSSL, edite ~/.bash_profile y añada la siguiente línea al final del archivo:
export PATH="/usr/local/opt/openssl/bin:$PATH"
4. Después de añadir la línea, ejecute el siguiente comando.
source ~/.bash_profile
5. Para comprobar el cambio en su entorno macOS, ejecute el siguiente comando.
echo $PATH openssl version
Cifrar material de claves con la clave de encapsulamiento
Ejecute el siguiente comando para cifrar su material de claves al usar la versión más reciente de OpenSSL y la clave de encapsulamiento que descargó anteriormente.
Nota: La clave de encapsulamiento se almacena en PublicKey.bin.
openssl pkeyutl -in PlaintextKeyMaterial.bin -out EncryptedKeyMaterial.bin -inkey PublicKey.bin -keyform DER \ -pubin -encrypt -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256
El comando genera EncryptedKeyMaterial.bin. Este valor se importa como material de claves cifrado en el KMS.
Importar material de claves cifrado
Ejecute el siguiente comando de AWS CLI para importar el material de claves cifrado a la clave de KMS.
aws kms --region $REGION import-key-material --key-id $KEY_ID --encrypted-key-material fileb://EncryptedKeyMaterial.bin --import-token fileb://ImportToken.bin --expiration-model KEY_MATERIAL_DOES_NOT_EXPIRE
Una vez finalizada la importación, el estado de la clave cambia a Habilitada. Ejecute el siguiente comando para comprobar el estado de la clave.
aws kms --region $REGION describe-key --key-id $KEY_ID
Información relacionada
Vídeos relacionados
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 4 meses