使用多個金鑰和金鑰輪換

除了加密屬性值中的 {cipher} 前綴之外,Config 伺服器還會在 (Base64 編碼) 密文開始之前尋找零或多個 {name:value} 前綴。金鑰會傳遞到 TextEncryptorLocator,後者可以執行任何需要的邏輯來尋找密碼的 TextEncryptor。如果您已設定金鑰儲存庫 (encrypt.keystore.location),則預設的定位器會尋找具有 key 前綴所提供別名的金鑰,其密文類似於以下內容

foo:
  bar: `\{cipher}{key:testkey}...`

定位器會尋找名為 "testkey" 的金鑰。也可以透過在前綴中使用 {secret:…​} 值來提供密碼。但是,如果未提供密碼,則預設為使用金鑰儲存庫密碼 (這是您建立金鑰儲存庫且未指定密碼時獲得的密碼)。如果您確實提供了密碼,則也應該使用自訂 SecretLocator 加密密碼。

當金鑰僅用於加密少量組態資料時 (也就是說,它們未在其他地方使用),從密碼學的角度來看,幾乎不需要金鑰輪換。但是,您可能偶爾需要變更金鑰 (例如,在發生安全漏洞時)。在這種情況下,所有用戶端都需要變更其來源組態檔 (例如,在 git 中),並在所有密碼中使用新的 {key:…​} 前綴。請注意,用戶端需要先檢查金鑰別名是否在 Config 伺服器金鑰儲存庫中可用。

如果您希望讓 Config 伺服器處理所有加密和解密,則 {name:value} 前綴也可以作為純文字張貼到 /encrypt 端點。