使用多个密钥和密钥轮换
除了加密属性值中的 {cipher}
前缀外,Config Server 还会在(Base64 编码的)密文开始之前查找零个或多个 {name:value}
前缀。这些键会被传递给 TextEncryptorLocator
,它可以执行任何所需的逻辑来为密文定位一个 TextEncryptor
。如果你配置了一个密钥库(encrypt.keystore.location
),默认的定位器会查找由 key
前缀提供的别名的密钥,密文类似于以下内容:
foo:
bar: {cipher}{key:testkey}...
定位器会查找名为 testkey
的密钥。也可以通过在前缀中使用 {secret:…}
值来提供密钥。然而,如果没有提供密钥,默认情况下会使用密钥库密码(这是在构建密钥库时未指定密钥时获得的密码)。如果确实提供了密钥,还应使用自定义的 SecretLocator
对密钥进行加密。
当密钥仅用于加密少量配置数据(即它们不在其他地方使用)时,从加密的角度来看,密钥轮换几乎是不必要的。然而,有时您可能需要更改密钥(例如,在发生安全漏洞的情况下)。在这种情况下,所有客户端都需要更改其源配置文件(例如,在 git 中),并在所有密文中使用新的 {key:…}
前缀。请注意,客户端需要首先检查密钥别名是否在配置服务器的密钥库中可用。
提示
如果你想让配置服务器处理所有的加密和解密操作,{name:value}
前缀也可以作为纯文本添加到 /encrypt
端点。