如何解決嘗試使用 OpenSSL 將金鑰匯入 AWS KMS 時遇到的 "InvalidCiphertext" 錯誤?
我已使用 OpenSSL 將加密金鑰材料匯入 AWS Key Management Service (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 參數。
解決方法
使用「外部」作為金鑰材料來源來建立 AWS KMS key
如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱 Troubleshoot AWS CLI errors (對 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 key 會保持 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 版及更新版本。
如果您使用以 Red Hat Enterprise Linux (RHEL) 為基礎的 Linux 電腦,例如使用 Amazon Linux Amazon Machine Image (AMI) 啟動的執行個體,請完成下列步驟:
-
執行下列命令以檢查您的 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 key。
注意: 包裝公有金鑰儲存在 PublicKey.bin 中。
匯入您的加密金鑰材料
請完成下列步驟:
-
執行 import-key-material AWS CLI 命令,將加密金鑰材料匯入 AWS KMS key:
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
- 語言
- 中文 (繁體)

相關內容
已提問 3 年前
已提問 2 年前
AWS 官方已更新 2 年前