跳至內容

如何解決嘗試使用 OpenSSL 將金鑰匯入 AWS KMS 時遇到的 "InvalidCiphertext" 錯誤?

2 分的閱讀內容
0

我已使用 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) 啟動的執行個體,請完成下列步驟:

  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 key。

注意: 包裝公有金鑰儲存在 PublicKey.bin 中。

匯入您的加密金鑰材料

請完成下列步驟:

  1. 執行 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 (已啟用)。

  2. 執行 describe-key AWS CLI 命令以確認金鑰的狀態:

    aws kms --region $REGION describe-key --key-id $KEY_ID
AWS 官方已更新 2 年前