使用多金鑰和金鑰輪換
除了加密屬性值中的 {cipher} 字首之外,配置伺服器還會在(Base64 編碼的)密文開頭查詢零個或多個 {name:value} 字首。這些金鑰會傳遞給 TextEncryptorLocator,後者可以執行任何必要的邏輯來查詢密文的 TextEncryptor。如果您已配置了金鑰庫 (encrypt.keystore.location),則預設定位器會查詢由 key 字首提供的別名金鑰,其密文類似於以下形式
foo:
bar: `\{cipher}{key:testkey}...`
定位器會查詢名為“testkey”的金鑰。還可以透過在字首中使用 {secret:…} 值來提供金鑰。但是,如果未提供金鑰,則預設使用金鑰庫密碼(即在構建金鑰庫且未指定金鑰時所獲得的值)。如果確實提供了金鑰,則還應該使用自定義的 SecretLocator 來加密該金鑰。
當金鑰僅用於加密少量配置資料(即,未在其他地方使用)時,從密碼學角度來看,幾乎無需進行金鑰輪換。但是,您可能偶爾需要更改金鑰(例如,在發生安全漏洞的情況下)。在這種情況下,所有客戶端都需要更改其源配置檔案(例如,在 git 中),並在所有密文中使用新的 {key:…} 字首。請注意,客戶端需要首先檢查金鑰別名在配置伺服器金鑰庫中是否可用。
如果您希望配置伺服器處理所有加密和解密,那麼 {name:value} 字首也可以作為純文字新增到 /encrypt 端點。 |