此版本仍在开发中,目前尚不稳定。如需最新稳定版本,请使用 Spring Cloud Config 5.0.1spring-doc.cadn.net.cn

使用多个密钥和密钥轮换

除了加密属性值中的 {cipher} 前缀外,配置服务器还会在(Base64 编码的)密文开始之前查找零个或多个 {name:value} 前缀。密钥会被传递给一个 TextEncryptorLocator,该组件可根据需要执行任意逻辑以定位用于解密的 TextEncryptor。如果您已配置了密钥库(encrypt.keystore.location),默认的密钥定位器会查找由 key 前缀提供的别名所对应的密钥,其密文格式类似于以下示例:spring-doc.cadn.net.cn

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

定位器查找名为“testkey”的键。spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

也可以通过在前缀中使用 {secret:…​} 值来提供密钥。spring-doc.cadn.net.cn

然而,如果不提供,则默认使用密钥库密码(即在创建密钥库时未指定密钥时所获得的密码)。spring-doc.cadn.net.cn

如果您提供了密钥,还应使用自定义 SecretLocator 对该密钥进行加密。spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

当密钥仅用于加密少量配置数据(即,它们未在其他地方使用)时,从密码学角度出发,密钥轮换几乎不需要。spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

然而,您可能偶尔需要更改密钥(例如,在发生安全漏洞的情况下)。spring-doc.cadn.net.cn

在这种情况下,所有客户端都需要更改其源配置文件(例如,在 Git 中),并在所有密码中使用新的 {key:…​} 前缀。spring-doc.cadn.net.cn

请注意,客户端需要首先检查密钥别名是否存在于配置服务器的密钥库中。spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

如果您希望配置服务器同时处理所有加密和解密操作,也可以将 {name:value} 前缀以纯文本形式提交至 /encrypt 端点。