跳至內容

如何使用 OpenSSL 透過 AWS KMS 非對稱金鑰來加密檔案?

2 分的閱讀內容
0

我想要使用 OpenSSL,透過 AWS Key Management Service (KMS) 金鑰來加密檔案。

解決方法

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

建立 RSA 金鑰對、下載公共金鑰,並建立 AES 256 位元金鑰

請完成以下步驟:

  1. 建立 RSA 金鑰對。
  2. 若要下載公共金鑰,請執行 get-public-key AWS CLI 命令:
    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 Amazon Machine Image (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_FILE 和 FILE_TO_ENCRYPT。
AWS 官方已更新 1 年前