내용으로 건너뛰기

OpenSSL을 사용해 키를 AWS KMS로 가져오려고 할 때 발생하는 ‘InvalidCiphertext’ 오류를 어떻게 해결합니까?

3분 분량
0

OpenSSL을 사용해 암호화된 키 자료를 AWS Key Management Service(AWS KMS)로 가져왔습니다. 그런데 요청이 실패하고 ‘InvalidCiphertext’ 오류가 발생했습니다.

간략한 설명

OpenSSL은 기본 설정으로 SHA-1 해시 함수(RSAES_OAEP_SHA_256 알고리즘)를 사용합니다.

RSAES_OAEP_SHA_256 알고리즘을 사용할 때 가져오기 오류를 피하려면 키 자료를 암호화하는 데 OpenSSL을 사용하십시오. openssl pkeyutl 명령을 실행하고, -pkeyopt rsa_padding_mode:oaep 및 -pkeyopt rsa_oaep_md:sha256 파라미터를 지정합니다.

해결 방법

키 자료 오리진으로 ‘external’을 사용해 AWS KMS 키 만들기

AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우 AWS CLI 오류 문제 해결을 참고하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

create-key 및 create-alias AWS CLI 명령을 실행해 외부 키 자료에 대한 AWS KMS를 만듭니다.

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

참고: example-region-1 및 kms_key_with_externalmaterial을 해당하는 키의 값으로 바꾸십시오.

키 자료를 가져올 때까지 AWS KMS 키의 상태가 Pending Import(가져오기 보류 중)로 유지됩니다. 다음 명령을 실행해 키의 상태를 봅니다.

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

래핑 퍼블릭 키 및 가져오기 토큰 다운로드

get-parameters-for-import AWS CLI 명령을 실행해 PublicKey 및 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

base64를 사용해 두 값을 디코딩하고, 해당 값을 별도의 파일에 저장합니다.

래핑 퍼블릭 키는 PublicKey.bin에, 가져오기 토큰은 ImportToken.bin에 저장됩니다.

256비트 대칭 키 생성

키 자료는 256비트(32바이트) 대칭 키여야 합니다. 다음 명령 중 한 가지를 실행해 키를 생성합니다.

OpenSSL

openssl rand -out PlaintextKeyMaterial.bin 32

-또는-

dd

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

OpenSSL 버전이 openssl pkeyutl을 지원하는지 확인

중요: pkeyutl 명령은 OpenSSL 1.0.2 이후 버전에서만 사용할 수 있습니다.

Amazon Linux Amazon Machine Image(AMI)를 사용해 시작한 인스턴스와 같이 Red Hat Enterprise Linux(RHEL) 기반 Linux 컴퓨터를 사용하는 경우, 다음 단계를 완료하십시오.

  1. 다음 명령을 실행해 OpenSSL 버전을 확인합니다.

    openssl version
    
  2. OpenSSL을 업데이트하려면 다음 명령을 실행합니다.

    sudo yum -y update openssl
    

macOS를 사용하는 경우 다음 단계를 완료하십시오.

  1. 다음 Homebrew 명령을 실행합니다.

    brew updatebrew upgrade openssl
    brew info openssl
    

    참고: info openssl 명령을 사용하면 OpenSSL이 **/usr/local/opt/openssl/bin/**에 설치되었는지 표시됩니다.

  2. 다음 명령을 실행해 OpenSSL 버전을 확인합니다.

    /usr/local/opt/openssl/bin/openssl version
    
  3. 항상 최신 OpenSSL 버전을 사용하려면 ~/.bash_profile의 끝에 다음 줄을 추가합니다.

    export PATH="/usr/local/opt/openssl/bin:$PATH"
    
  4. 다음 명령을 실행합니다.

    source ~/.bash_profile
    
  5. macOS 환경에서 변경 사항을 확인하려면 다음 명령을 실행합니다.

    echo $PATHopenssl version

래핑 퍼블릭 키를 사용해 키 자료 암호화

최신 버전의 OpenSSL과 래핑 퍼블릭 키를 사용해 키 자료를 암호화하려면 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

이 명령은 EncryptedKeyMaterial.bin을 생성합니다. 이 값을 암호화된 키 자료로 AWS KMS 키에 가져오십시오.

참고: 래핑 퍼블릭 키는 PublicKey.bin에 저장됩니다.

암호화된 키 자료 가져오기

다음 단계를 완료하십시오.

  1. import-key-material AWS CLI 명령을 실행해 암호화된 키 자료를 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
    

    참고: 가져오기가 완료되고 나면 키의 상태가 Enabled(활성화됨)로 변경됩니다.

  2. describe-key AWS CLI 명령을 실행해 키의 상태를 확인하십시오.

    aws kms --region $REGION describe-key --key-id $KEY_ID
AWS 공식업데이트됨 2년 전
댓글 없음