前言
在《springcloud系列25——SpringCloud配置管理》中介绍了以Git为首的作为配置仓库的示例。但是我们的配置项都是以明文的形式保存在Git仓库中。虽然我们可以创建私有的仓库,然后配置仓库的用户名和密码。但是如果账号被破解了呢?所以,本节要介绍的是如何加密你的配置项。这里首先介绍对称加密在Spring Cloud Config的用法。
前提
在Spring Cloud Config中使用加解密功能,需要在你的JVM中安装有一个没有加密强度限制的JCE(JDK自带的私有强度限制的)。
注:JCE全称为Java Cryptography Extension 。
具体做法如下:
1.从oracle下载无加密强度限制的JCE;
oracle JCE的下载地址:http://download.oracle.com/otn-pub/java/jce/8/jce_policy-8.zip
2.复制2个策略文件替换JDK自带的策略文件。
解压后,可以看到2个策略文件
找到jdk/jre/lib/security,然后覆盖这2个文件。
使用
在Config Server所在的应用增加秘钥的配置(配置到bootstrap.yml):
encrypt:
key: foo
然后重启Config Server应用。
Spring Cloud会我们提供了相应的加密和解密的端点。
1.加密
2.解密
我们通过Spring Cloud提供的加密端点对配置信息进行加密,然后提交到GIT仓库。
需要注意的是,加密的信息前面必须有{cipher}前缀。
现在,我们来请求我们刚刚上传的加密的配置文件。
可以看到,Spring Cloud Config已经自动为我们解密了!
客户端使用
在上面也已经看到了,我们请求加密的配置,Spring Cloud Config为我们自动解密了,所以Cloud Config Client不需要做任何修改。
问题
1.配置encrypt.key=foo
必须配置到bootstrap.yml中,不能配置到application.yml,否则无法加密。会返回如下错误
{
"description":"No key was installed for encryption service",
"status":"NO_KEY"
}
2.yml配置文件加密项需要使用引号,而Properties文件则不能用引号引起来。
yml配置示例:
spring:
datasource:
username: dbuser
password: '{cipher}FKSAJDFGYOS8F7GLHAKERGFHLSAJ'
可以参考:https://blog.csdn.net/chenxyz707/article/details/80487733
Spring Cloud Config官方文档:http://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#_spring_cloud_config