Como resolvo o erro “InvalidCiphertext” quando tento usar o OpenSSL para importar minha chave para o AWS KMS?

4 minuto de leitura
0

Eu usei o OpenSSL para importar meu material de chave criptografada para o AWS Key Management Service (AWS KMS). No entanto, a solicitação falhou e recebi o erro “InvalidCiphertext”.

Breve descrição

Por padrão, o OpenSSL usa a função de hash SHA-1 (algoritmo RSAES_OAEP_SHA_256).

Para evitar erros de importação ao usar o algoritmo RSAES_OAEP_SHA_256, use o OpenSSL para criptografar seu material de chaves. Execute o comando openssl pkeyutl e especifique os parâmetros -pkeyopt rsa_padding_mode:oaep e -pkeyopt rsa_oaep_md:sha256.

Resolução

Use “externo” para a origem do material de chave para criar uma chave do AWS KMS

Se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solucionar erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Execute os comandos create-key e create-alias da AWS CLI para criar um AWS KMS para material de chaves externas:

export REGION=example-region-1export 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

Observação: substitua example-region-1 e kms_key_with_externalmaterial pelos valores de sua chave.

Até você importar o material de chave, o status da chave do AWS KMS permanece em Importação pendente. Execute o comando a seguir para ver o status da chave:

aws kms --region $REGION describe-key --key-id $KEY_ID

Faça download da chave de empacotamento pública e do token de importação

Execute o comando get-parameters-for-import da AWS CLI para obter os valores PublicKey e ImportToken:

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

Use base64 para decodificar os dois valores e, em seguida, armazene esses valores em arquivos separados.

A chave de empacotamento pública é armazenada em PublicKey.bin e o token de importação é armazenado em ImportToken.bin.

Gerar uma chave simétrica de 256 bits

O material de chave deve ser uma chave simétrica de 256 bits (32 bytes). Execute um dos comandos a seguir para gerar a chave:

OpenSSL

openssl rand -out PlaintextKeyMaterial.bin 32

-ou-

dd

dd if=/dev/urandom of=PlaintextKeyMaterial.bin bs=32 count=1

Verifique se sua versão do OpenSSL é compatível com openssl pkeyutl

Importante: o comando pkeyutl está disponível somente no OpenSSL versão 1.0.2 e versões posteriores.

Se você usa um computador Linux baseado no Red Hat Enterprise Linux (RHEL), como uma instância executada com uma imagem de máquina da Amazon (AMI) do Amazon Linux, conclua as seguintes etapas:

  1. Execute o comando a seguir para verificar sua versão do OpenSSL:

    openssl version
    
  2. Para atualizar o OpenSSL, execute o comando a seguir:

    sudo yum -y update openssl
    

Se você usa o macOS, conclua as seguintes etapas:

  1. Execute os seguintes comandos do Homebrew:

    brew updatebrew upgrade openssl
    brew info openssl
    

    Observação: o comando info openssl mostra que o OpenSSL está instalado em /usr/local/opt/openssl/bin/.

  2. Execute o comando a seguir para confirmar a versão do OpenSSL:

    /usr/local/opt/openssl/bin/openssl version
    
  3. Para sempre usar a versão mais recente do OpenSSL, adicione a seguinte linha no final de ~/.bash_profile:

    export PATH="/usr/local/opt/openssl/bin:$PATH"
    
  4. Execute o seguinte comando:

    source ~/.bash_profile
    
  5. Para verificar a alteração em seu ambiente macOS, execute o comando a seguir:

    echo $PATHopenssl version

Criptografar seu material de chave com a chave de empacotamento pública

Para usar a versão mais recente do OpenSSL e a chave de empacotamento pública para criptografar seu material de chaves, execute o comando openssl pkeyutl:

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

O comando gera EncryptedKeyMaterial.bin. Importar esse valor como material de chave do AWS KMS.

Observação: a chave de empacotamento pública é armazenada em PublicKey.bin.

Importar seu material de chave criptografado

Conclua as seguintes etapas:

  1. Execute o comando import-key-material da AWS CLI para importar o material de chave criptografada para a chave do AWS 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
    

    Observação: após a conclusão da importação, o status da chave muda para Habilitado.

  2. Execute o comando describe-key da AWS CLI para verificar o status da chave:

    aws kms --region $REGION describe-key --key-id $KEY_ID
AWS OFICIAL
AWS OFICIALAtualizada há um ano