|
此版本仍在开发中,目前尚不稳定。如需最新稳定版本,请使用 Spring Cloud Config 5.0.1! |
使用多个密钥和密钥轮换
除了加密属性值中的 {cipher} 前缀外,配置服务器还会在(Base64 编码的)密文开始之前查找零个或多个 {name:value} 前缀。密钥会被传递给一个 TextEncryptorLocator,该组件可根据需要执行任意逻辑以定位用于解密的 TextEncryptor。如果您已配置了密钥库(encrypt.keystore.location),默认的密钥定位器会查找由 key 前缀提供的别名所对应的密钥,其密文格式类似于以下示例:
foo:
bar: `\{cipher}{key:testkey}...`
定位器查找名为“testkey”的键。
也可以通过在前缀中使用 {secret:…} 值来提供密钥。
然而,如果不提供,则默认使用密钥库密码(即在创建密钥库时未指定密钥时所获得的密码)。
如果您提供了密钥,还应使用自定义 SecretLocator 对该密钥进行加密。
当密钥仅用于加密少量配置数据(即,它们未在其他地方使用)时,从密码学角度出发,密钥轮换几乎不需要。
然而,您可能偶尔需要更改密钥(例如,在发生安全漏洞的情况下)。
在这种情况下,所有客户端都需要更改其源配置文件(例如,在 Git 中),并在所有密码中使用新的 {key:…} 前缀。
请注意,客户端需要首先检查密钥别名是否存在于配置服务器的密钥库中。
如果您希望配置服务器同时处理所有加密和解密操作,也可以将 {name:value} 前缀以纯文本形式提交至 /encrypt 端点。 |