Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
我如何解决在尝试使用 OpenSSL 将密钥导入 AWS KMS 时发生的 "InvalidCiphertext" 错误?
我使用 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 命令行界面 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 及更高版本上可用。
如果您使用基于 Red Hat Enterprise Linux (RHEL) 的 Linux 计算机,如使用 Amazon Linux 亚马逊机器映像 (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 密钥。
**注意:**包装公钥存储在 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
相关内容
- AWS 官方已更新 3 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 3 个月前