服务器还暴露了/encrypt和/decrypt端点(假设这些端点将被保护,并且只能由授权代理访问)。如果您正在编辑远程配置文件,可以使用Config Server通过POST到/encrypt端点来加密值,例如
- $ curl localhost:8888/encrypt -d mysecret
- 682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda
复制代码逆向操作也可通过/decrypt获得(如果服务器配置了对称密钥或全密钥对):
注意 如果要加密的值具有需要进行URL编码的字符,则应使用--data-urlencode选项curl来确保它们已正确编码。
$ curl localhost:8888/decrypt -d 682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bdamysecret
如果您使用curl进行测试,则使用--data-urlencode(而不是-d)或设置显式Content-Type: text/plain,以确保在有特殊字符时正确地对数据进行编码('+'特别是棘手)。
将加密的值添加到{cipher}前缀,然后再将其放入YAML或属性文件中,然后再提交并将其推送到远程可能不安全的存储区。
/encrypt和/decrypt端点也都接受/*/{name}/{profiles}形式的路径,当客户端调用到主环境资源时,可以用于每个应用程序(名称)和配置文件控制密码。
注意 为了以这种细微的方式控制密码,您还必须提供一种TextEncryptorLocator类型的@Bean,可以为每个名称和配置文件创建不同的加密器。默认提供的不会这样做(所有加密使用相同的密钥)。
spring命令行客户端(安装了Spring Cloud CLI扩展)也可以用于加密和解密,例如
- $ spring encrypt mysecret --key foo
- 682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda
- $ spring decrypt --key foo 682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda
- mysecret
复制代码要在文件中使用密钥(例如用于加密的RSA公钥),使用“@”键入键值,并提供文件路径,例如
- $ spring encrypt mysecret --key @${HOME}/.ssh/id_rsa.pub
- AQAjPgt3eFZQXwt8tsHAVv/QHiY5sI2dRcR+...
复制代码关键参数是强制性的(尽管有一个--前缀)。