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 컴퓨터를 사용하는 경우, 다음 단계를 완료하십시오.
-
다음 명령을 실행해 OpenSSL 버전을 확인합니다.
openssl version
-
OpenSSL을 업데이트하려면 다음 명령을 실행합니다.
sudo yum -y update openssl
macOS를 사용하는 경우 다음 단계를 완료하십시오.
-
다음 Homebrew 명령을 실행합니다.
brew updatebrew upgrade openssl
brew info openssl
참고: info openssl 명령을 사용하면 OpenSSL이 **/usr/local/opt/openssl/bin/**에 설치되었는지 표시됩니다.
-
다음 명령을 실행해 OpenSSL 버전을 확인합니다.
/usr/local/opt/openssl/bin/openssl version
-
항상 최신 OpenSSL 버전을 사용하려면 ~/.bash_profile의 끝에 다음 줄을 추가합니다.
export PATH="/usr/local/opt/openssl/bin:$PATH"
-
다음 명령을 실행합니다.
source ~/.bash_profile
-
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에 저장됩니다.
암호화된 키 자료 가져오기
다음 단계를 완료하십시오.
-
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(활성화됨)로 변경됩니다.
-
describe-key AWS CLI 명령을 실행해 키의 상태를 확인하십시오.
aws kms --region $REGION describe-key --key-id $KEY_ID