使用 AWS re:Post 即表示您同意 AWS re:Post 使用條款

在我嘗試使用 OpenSSL 將金鑰匯入 AWS KMS 時,如何解決 "InvalidCiphertext" 錯誤?

2 分的閱讀內容
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

解決方法

使用「外部」作為金鑰材料來源來建立 AWS KMS 金鑰

如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

執行 create-keycreate-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-1kms_key_with_externalmaterial 取代為您的金鑰值。

在您匯入金鑰材料之前,AWS KMS 金鑰狀態會保留在待匯入中。執行下列命令以檢視金鑰的狀態:

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

下載包裝公有金鑰和匯入字符

執行 get-parameters-for-import AWS CLI 命令以取得 PublicKeyImportToken 值:

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 金鑰。

**注意:**包裝公有金鑰儲存在 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
    

    注意:匯入完成後,金鑰的狀態會變更為已啟用

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

    aws kms --region $REGION describe-key --key-id $KEY_ID
AWS 官方
AWS 官方已更新 8 個月前