config加密
安全保护
由于配置中心存储的内容比较敏感,做一定的安全处理是必要的。为配置中心实现安全保护的方式有很多,比如物理网络限制,OAuth2授权等。不过,由于我们的微服务应用和配置中心都是构建与springboot基础上的,所以与spring security结合使用会更加方便。
访问加密
当我们使用config配置中心时,可以同过url:port/{name}/{profile}来查看配置中心的具体配置
但是我们不想让非开发人员查看这些,因为这里面有数据库,服务器地址等众多安全信息。
这时候就需要利用security的功能进行实现。
配置security访问加密:
配置中心配置
依赖配置
除config与spring-boot本身所需依赖之外,需增加security依赖:
compile("org.springframework.boot:spring-boot-starter-security")
配置中心配置访问账户与密码
security:
user:
name: jjj
password: 123456
客户端配置
依赖配置
除config与spring-boot本身所需依赖之外,需增加security依赖:
compile("org.springframework.boot:spring-boot-starter-security")
客户端配置访问账户与密码
spring:
cloud:
config:
username: jjj
password: 123456
备注
增加依赖后,如不配置账户与密码,config启动时会自动生成随机加密密码于控制台,
这种形式不够友好,故这里不标注
敏感内容加密
提示
特别提示,如进行了访问加密,以下功能会有部分异常(请求加密因需要身份认证无法完成),需要在以下加密信息配置完成后,再开启访问加密功能
对称加密
使用前提,修改jce关联jar
首先,在控制台输出
echo %JAVA_HOME%
查看你的java环境变量
然后根据java版本。去如下链接进行下载jce
jce-7下载
jce-8下载
将以上两个文件,替换掉%JAVA_HOME%/jre/lib/security下的原有jar
修改jce原因
原有jce有密匙长度限制,如果不进行修改,请求config加密时会报以下错误
java.security.InvalidKeyException: Illegal key size。
配置密匙,并对需要的配置进行加密
配置密匙
encrypt:
key: jjj
测试密匙是否生效
url请求如下url:
http://localhost:11087/encrypt/status
如果返回以下结果,表示已生效
配置文件内容加密
控制台请求:
curl localhost:11087/encrypt -d root
将返回如下结果:
postMan请求:
每次请求的返回值都会不同,
即:不可在已经进行加密配置完成,进行重复访问加密操作。
git配置文件配置
#密匙当然要配过来
encrypt:
key: sang
spring:
datasource:
write:
username: '{cipher}5256c79d102d6030ed467aaf91e2e1d2370f4df6b8263972bc961141c2a56611'
#{cipher}后内容表示需解密,''如果不加,无法正常识别这个字符串
非对称加密
需要利用java中的keytool来生成密匙,并存于客户端,服务端,
不同环境也需要进行配置,过程比较繁琐,而且不利于修改,故这里不做详解
总结
先进行对称加密配置,配置完成以后,开启访问加密配置(访问加密配置需写在客户端bootstrap.yml,未验证git能否正常使用,应该不可以),密匙应配置于配置中心中,此时,无论数据库还是oss敏感账户密码信息,都可以得到解决。