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 키 상태는 가져오기 보류 중으로 유지됩니다. 다음 명령을 실행하여 키의 상태를 확인하세요.
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
참고: 가져오기가 완료되면 키의 상태가 활성화됨으로 변경됩니다.
-
describe-key AWS CLI 명령을 실행하여 키의 상태를 확인하세요.
aws kms --region $REGION describe-key --key-id $KEY_ID