Spring Cloud 加密和解密

加密和解密

重要

要使用加密和解密功能,您需要在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编码的字符,则应使用该--data-urlencode选项来curl确保其编码正确。

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

反向操作也可以通过以下方式获得/decrypt(如果服务器配置有对称密钥或完整密钥对),如以下示例所示:

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

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

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

/encrypt/decrypt终点还兼有接受的形式路径/*/{application}/{profiles},当客户打电话到主环境资源,这可以用来控制加密的每个应用程序(名称)和每个配置文件的基础。

       

要以这种精细的方式控制加密,还必须提供一种@Bean类型TextEncryptorLocator,该类型针对每个名称和配置文件创建不同的加密器。默认情况下不提供(所有加密使用相同的密钥)。

spring命令行客户机(安装弹簧云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参数是强制性的(尽管有--前缀)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值