移轉至最新版本的疑難排解 - AWS Encryption SDK

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

移轉至最新版本的疑難排解

在將您的應用程式更新至 2.0 版。x或更高版本AWS Encryption SDK,更新到最新的 1。x的版本AWS Encryption SDK並完全部署它。這將幫助您避免在更新到 2.0 版時可能遇到的大多數錯誤。x和更新版本。如需詳細指引 (包括範例),請參閱遷移您的AWS Encryption SDK

重要

請驗證您最新的 1。x版。x或更高版本AWS Encryption SDK。

注意

AWSCLI (加密):本指南的參考資料至 1.7 版。x的AWS Encryption SDK適用於 1.8 版。x的AWSCLI 的 Encryption。本指南的參考資料至 2.0 版。x的AWS Encryption SDK適用於 2.1.x的AWSCLI 的 Encryption。

最初發布了新的安全功能AWS加密 CLI 1.7 版。x2.0 和 2.0.x。但是,AWS加密版本 1.8.x取代 1.7 版。x和AWS加密x2.0 版。x。如需詳細資訊,請參閱相關安全性諮詢aws-encryption-sdk-cli儲存庫 GitHub。

本主題旨在協助您辨識並解決您可能遇到的最常見錯誤。

已取代或移除的物件

2.0 版。x包含幾項重大變更,包括移除 1.7 版中已淘汰的舊版建構函式、方法、函數和類別。x。若要避免編譯器錯誤、匯入錯誤、語法錯誤和找不到符號錯誤 (視您的程式設計語言而定),請先升級到最新的 1。x的版本AWS Encryption SDK為您的編程語言。(此版必須是 1.7 版。x或更高版本。) 在使用最新的 1.x版本,您可以在移除原始符號之前開始使用取代元素。

如果您需要升級至 2.0 版。x或稍後立即,諮詢變更用於您的編程語言,並用更改日誌建議的符號替換舊式符號。

組態衝突:承諾政策和演算法套件

如果您指定的算法套件與您的承諾政策,對加密的呼叫失敗組態衝突錯誤。

為了避免這種類型的錯誤,請不要指定演算法套件。根據預設,AWS Encryption SDK選擇與承諾政策相容的最安全演算法。不過,如果您必須指定演算法套件 (例如未簽署的演算法套件),請務必選擇與承諾產品原則相容的演算法套件。

承諾政策 相容演算法套件
ForbidEncryptAllowDecrypt

任何演算法套件主要承諾,例如:

AES_256_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384(03 78) (含簽署)

AES_256_GCM_IV12_TAG16_HKDF_SHA256(01 78) (未簽署)

RequireEncryptAllowDecrypt

RequireEncryptRequireDecrypt

任何演算法套件取代為主要承諾,例如:

AES_256_GCM_HKDF_SHA512_COMMIT_KEY_ECDSA_P384(05 78) (含簽署)

AES_256_GCM_HKDF_SHA512_COMMIT_KEY(04 78) (未簽署)

如果您在未指定演算法套件時遇到此錯誤,表示您可能已選擇衝突的演算法套件密碼材料管理(厘米). 默認 CMM 不會選擇衝突的算法套件,但自定義 CMM 可能會選擇。如需說明,請參閱您自訂 CMM 的說明文件。

組態衝突:承諾政策和密文

所以此RequireEncryptRequireDecrypt 承諾政策不允許AWS Encryption SDK解密未加密的郵件關鍵承諾。如果你問AWS Encryption SDK要解密沒有密鑰承諾的消息,它會返回一個組態衝突錯誤。

若要避免此錯誤,請在設定RequireEncryptRequireDecrypt承諾政策,請確保所有加密而不承諾金鑰的加密文本都經過密鑰承諾進行解密和重新加密,或者由不同的應用程序處理。如果您遇到這個錯誤,您可以傳回衝突密文字的錯誤,或是暫時變更承諾原則RequireEncryptAllowDecrypt

如果因為升級到 2.0 版而遇到此錯誤。x或 1.7 之前的版本更高版本。x沒有先升級到最新的 1。x版(1.7 版。x或更高版本),考慮還原到最新的 1。x在升級到 2.0 版之前,對該版本進行版本並部署到所有主機。x或更高版本。如需協助,請參閱 如何遷移和部署AWS Encryption SDK

金鑰履約承諾驗證失敗

當您解密使用金鑰承諾加密的郵件時,您可能會收到金鑰履約承諾驗證失敗錯誤訊息。這表示解密呼叫失敗,因為加密郵件與訊息的唯一資料金鑰不相同。通過在解密過程中驗證數據密鑰,關鍵承諾防止您解密可能導致多個純文本的消息。

此錯誤表示您嘗試解密的加密訊息未傳回AWS Encryption SDK。這可能是手動製作的訊息或資料損毀的結果。如果您遇到此錯誤,您的應用程式可以拒絕郵件並繼續,或停止處理新郵件。

其他加密失敗

加密失敗可能會因多種原因而失敗。您無法使用AWS KMS探索鑰匙圈或一個探索模式下的主要金鑰提供者加密郵件。

請務必使用包裝您擁有的金鑰來指定金鑰環或主要金鑰提供者許可用於加密。如需有關權限的說明AWS KMS keys,請參閱檢視金鑰政策判斷的存取權AWS KMS keyAWS Key Management Service開發人員指南

其他解密失敗

如果您嘗試解密加密的郵件失敗,則表示AWS Encryption SDK無法(或不會)解密消息中的任何加密數據密鑰。

如果您使用指定包裝金鑰的金鑰環或主要金鑰提供者,AWS Encryption SDK僅使用您指定的包裝鍵。驗證您正在使用您打算並且有包裝鍵kms:Decrypt許可至少一個包裝鍵。如果您正在使用AWS KMS keys,作為後備,您可以嘗試使用AWS KMS探索鑰匙圈或一個探索模式下的主要金鑰提供者。如果作業成功,在傳回純文字之前,請確認用來解密訊息的金鑰是否為您信任的金鑰。

轉返考量

如果您的應用程序無法加密或解密數據,通常可以通過更新代碼符號,密鑰環,主密鑰提供程序來解決問題,或承諾政策。但是,在某些案例中,您可能會判斷最好將您的應用程式轉返至先前版本的AWS Encryption SDK。

如果您必須回滾,請謹慎操作。的版本AWS Encryption SDK1.7 版之前的版本。x無法解密使用加密的密文關鍵承諾

  • 從最新的 1 回滾。x版AWS Encryption SDK通常是安全的。您可能必須復原對程式碼所做的變更,才能使用舊版不支援的元件和物件。

  • 一旦您開始使用金鑰承諾產品加密 (將承諾產品原則設定為RequireEncryptAllowDecrypt) 於 2.0 版。x或更高版,您可以轉返 1.7 版。x,但不適用於任何早期版本。的版本AWS Encryption SDK1.7 版之前的版本。x無法解密使用加密的密文關鍵承諾

如果您在所有主機都可以使用金鑰承諾進行解密之前不小心啟用了使用金鑰承諾加密,則最好是繼續推出,而不是復原。如果訊息是暫時性的或可以安全地捨棄,則您可能會考慮回復而遺失訊息。如果需要復原,您可以考慮編寫一個解密和重新加密所有郵件的工具。