SpringCloud 加密和解密

2023-07-31 09:34 更新

重要:

要使用加密和解密功能,您需要在JVM中安装完整功能的JCE(默认情况下不包括)。您可以从Oracle 下载“ Java密码学扩展(JCE)无限强度辖区策略文件 ”并按照安装说明进行操作(本质上,您需要用下载的JRE lib / security目录替换这两个策略文件)。

如果远程属性源包含加密的内容(值以​{cipher}​开头),则在通过HTTP发送给客户端之前,将对它们进行解密。此设置的主要优点是,当属性值处于“ 静止 ”状态时(例如,在git存储库中),不需要使用纯文本格式。如果无法解密某个值,则将其从属性源中删除,并使用相同的密钥添加一个附加属性,但附加前缀为​invalid​和一个表示“ 不适用 ”的值(通常为​<n/a>​)。这很大程度上是为了防止将密文用作密码并意外泄漏。

如果为配置客户端应用程序设置了远程配置存储库,则它可能包含与以下内容类似的​application.yml​:

application.yml。 

spring:
  datasource:
    username: dbuser
    password: '{cipher}FKSAJDFGYOS8F7GLHAKERGFHLSAJ'

.properties文件中的加密值不能用引号引起来。否则,该值不会解密。以下示例显示了有效的值:

application.properties。 

spring.datasource.username: dbuser
spring.datasource.password: {cipher}FKSAJDFGYOS8F7GLHAKERGFHLSAJ

您可以安全地将此纯文本推送到共享的git存储库,并且秘密密码仍然受到保护。

服务器还公开​/encrypt​和​/decrypt​端点(假设这些端点是安全的,并且只能由授权代理访问)。如果您编辑远程配置文件,则可以使用Config Server通过POST到​/encrypt​端点来加密值,如以下示例所示:

$ curl localhost:8888/encrypt -d mysecret
682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda

如果您加密的值中包含需要URL编码的字符,则应对curl使用--data-urlencode选项以确保它们正确编码。

确保不要在加密值中包含任何curl命令统计信息。将值输出到文件可以帮助避免此问题。

也可以通过​/decrypt​使用反向操作(前提是服务器配置了对称密钥或完整密钥对),如以下示例所示:

$ curl localhost:8888/decrypt -d 682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda
mysecret

如果使用curl进行测试,请使用--data-urlencode(而不是-d)或设置显式的Content-Type: text/plain以确保在有特殊字符时,curl可以正确编码数据(“ +”特别棘手)。

在将加密的值放入YAML或属性文件之前,以及将其提交并将其推送到远程(可能不安全)存储之前,请获取加密的值并添加​{cipher}​前缀。

/encrypt​和​/decrypt​端点也都接受​/*/{application}/{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+...

 --key参数是强制性的(尽管前缀为--)。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号