使用多密钥和密钥轮换
除了加密属性值中的 {cipher} 前缀之外,配置服务器还会在(Base64 编码的)密文开头查找零个或多个 {name:value} 前缀。这些密钥会传递给 TextEncryptorLocator,后者可以执行任何必要的逻辑来查找密文的 TextEncryptor。如果您已配置了密钥库 (encrypt.keystore.location),则默认定位器会查找由 key 前缀提供的别名密钥,其密文类似于以下形式
foo:
bar: `\{cipher}{key:testkey}...`
定位器会查找名为“testkey”的密钥。还可以通过在前缀中使用 {secret:…} 值来提供密钥。但是,如果未提供密钥,则默认使用密钥库密码(即在构建密钥库且未指定密钥时所获得的值)。如果确实提供了密钥,则还应该使用自定义的 SecretLocator 来加密该密钥。
当密钥仅用于加密少量配置数据(即,未在其他地方使用)时,从密码学角度来看,几乎无需进行密钥轮换。但是,您可能偶尔需要更改密钥(例如,在发生安全漏洞的情况下)。在这种情况下,所有客户端都需要更改其源配置文件(例如,在 git 中),并在所有密文中使用新的 {key:…} 前缀。请注意,客户端需要首先检查密钥别名在配置服务器密钥库中是否可用。
如果您希望配置服务器处理所有加密和解密,那么 {name:value} 前缀也可以作为纯文本添加到 /encrypt 端点。 |