跳至内容

如何使用 OpenSSL 通过 AWS KMS 非对称密钥来加密文件?

2 分钟阅读
0

我想使用 OpenSSL 通过 AWS Key Management Service (AWS KMS) 密钥来加密文件。

解决方法

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

创建 RSA 密钥对,下载公有密钥并创建 AES 256 位密钥

完成以下步骤:

  1. 创建 RSA 密钥对
  2. 要下载公有密钥,请运行 AWS CLI 命令 get-public-key
    aws kms get-public-key --key-id your-key-id --output text --query 'PublicKey' > RSAPublic.b64 && base64 -d RSAPublic.b64 > RSAPublic.bin
    注意:your-key-id 替换您的非对称密钥 ID。--query 函数可获取公有密钥,然后将 base64 文件解码为 DER 密钥。
  3. 运行以下 OpenSSL rand 命令来创建高级加密标准 (AES) 256 位密钥:
    openssl rand -base64 32 > key.bin

加密您的数据

完成以下步骤:

  1. 使用 key.bin 文件运行以下 OpenSSL enc 命令:
    openssl enc -aes-256-cbc -salt -pbkdf2 -in FILE_TO_ENCRYPT -out FILE_TO_ENCRYPT.enc -pass file:./key.bin
    注意:FILE_TO_ENCRYPT 替换为您的文件名。-pbkdf2 命令仅适用于 OpenSSL 1.1.1。Amazon Linux 2 亚马逊机器映像 (AMI) 使用 OpenSSL 1.0.2,不支持 -pbkdf2 命令。
  2. 使用 AWS KMS 公有密钥加密 key.bin 文件。这样可以保护您的密钥数据。只有有权访问您的 AWS KMS 私有密钥的用户才能访问 key.bin 文件。为此,请运行 OpenSSL pkeyutl 命令:
    openssl pkeyutl -in key.bin -out enc.key.bin -inkey RSAPublic.bin -keyform DER -pubin -encrypt -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256
    **注意:**pkeyutl 命令使用的加密算法支持 AWS KMS API RSAES_OAEP_SHA_256 进行解密。AWS KMS 公有密钥 RSAPublic.bin 对 AES 256 位密钥进行加密,并创建一个名为 enc.key.bin 的新文件。
  3. 为了加密 key.bin 文件,使得用户必须解密 enc.key.bin 文件才能访问 key.bin,请运行 rm AWS CLI 命令:
    aws s3 rm key.bin && rm FILE_TO_ENCRYPT
    **注意:**将 FILE_TO_ENCRYPT 替换为您的文件名。
  4. (可选)删除要加密的原始文件,这样用户就无法访问该文件。

您现在拥有以下资源:

  • FILE_TO_ENCRYPT.enc 文件中的加密数据。
  • 加密的 AES 256 位密钥 enc.key.bin
  • AWS KMS 公有密钥 RSAPublic.bin

**注意:**拥有加密数据的用户必须将文件发送给您进行解密。

解密您的文件

要检索加密数据,请解密 enc.key.bin,然后使用该密钥解密文件 FILE_TO_ENCRYPT.enc

**注意:**您必须有权访问 AWS KMS API,因为 AWS KMS 私有密钥无法以明文形式查看。

完成以下步骤:

  1. 要解密 enc.key.bin 文件并将其发送到 AWS KMS API,请运行 decrypt AWS CLI 命令:
    aws kms decrypt --key-id your-key-id --ciphertext-blob fileb://enc.key.bin --encryption-algorithm RSAES_OAEP_SHA_256 --output text --query 'Plaintext' | base64 --decode > decryptedKey.bin
    注意:your-key-id 替换为您的密钥 ID。--query 函数可提取明文,然后将 base64 值解码到 decryptedKey.bin 文件。
  2. 要输出解密后的文件,请在运行以下 OpenSSL enc 命令时使用 decryptedKey.bin 文件:
    openssl enc -d -aes-256-cbc -pbkdf2 -in FILE_TO_ENCRYPT.enc -out DECRYPTED_FILE -pass file:./decryptedKey.bin
    **注意:**将 DECRYPTED_FILE 替换为您的文件名。
  3. 要验证加密和解密是否成功完成,请将 DECRYPTED_FILEFILE_TO_ENCRYPT 进行比较。
AWS 官方已更新 7 个月前