前言

在《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):

1
2
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,否则无法加密。会返回如下错误

1
2
3
4
{
"description":"No key was installed for encryption service",
"status":"NO_KEY"
}

2.yml配置文件加密项需要使用引号,而Properties文件则不能用引号引起来。

yml配置示例:

1
2
3
4
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