在微服务架构中,因为独立的服务个数众多,加上前期测试工做量大,一些本来由运维人员维护的敏感信息会被咱们直接写在微服务中,以提升开发效率,可是这种明文存储方式显然是很是危险的,因此咱们要对这些信息进行加密,而Spring Cloud Config则提供了对称加解密、非对称加解密的功能来帮助咱们完成这一需求。OK,本文咱们就来看看如何实现配置信息的加解密。bootstrap
本文是Spring Cloud系列的第二十四篇文章,了解前二十三篇文章内容有助于更好的理解本文: 缓存
1.使用Spring Cloud搭建服务注册中心
2.使用Spring Cloud搭建高可用服务注册中心
3.Spring Cloud中服务的发现与消费
4.Eureka中的核心概念
5.什么是客户端负载均衡
6.Spring RestTemplate中几种常见的请求方式
7.RestTemplate的逆袭之路,从发送请求到负载均衡
8.Spring Cloud中负载均衡器概览
9.Spring Cloud中的负载均衡策略
10.Spring Cloud中的断路器Hystrix
11.Spring Cloud自定义Hystrix请求命令
12.Spring Cloud中Hystrix的服务降级与异常处理
13.Spring Cloud中Hystrix的请求缓存
14.Spring Cloud中Hystrix的请求合并
15.Spring Cloud中Hystrix仪表盘与Turbine集群监控
16.Spring Cloud中声明式服务调用Feign
17.Spring Cloud中Feign的继承特性
18.Spring Cloud中Feign配置详解
19.Spring Cloud中的API网关服务Zuul
20.Spring Cloud Zuul中路由配置细节
21.Spring Cloud Zuul中异常处理细节
22.分布式配置中心Spring Cloud Config初窥
23.Spring Cloud Config服务端配置细节(一)安全
默认状况下咱们的JRE中自带了JCE(Java Cryptography Extension),可是默认是一个有限长度的版本,咱们这里须要一个不限长度的JCE,这个JCE咱们能够直接百度而后在Oracle官网下载,下载以后解压,咱们能够看到以下三个文件: 架构
咱们须要将这里的两个jar包拷贝到咱们的jdk安装目录下,个人是%JAVA_HOME%\jre\lib\security
,覆盖该目录下原有的文件。 负载均衡
如此以后,咱们的准备工做就完成了。运维
对称加解密比较简单,直接配置密钥就能够了,在咱们前文建立出来的config-server中配置密钥,可是注意这个密钥须要配置在bootstrap.properties中,另外这里还有很是重要一点:Spring Cloud的Dalston.SR3和Dalston.SR2版本在这个问题上是有BUG的,若是用这两个版本在这里测试会没有效果,应该避开使用这两个版本,我这里使用的是Dalston.SR4版本,配置以下:分布式
encrypt.key=sang
配置完成以后,启动咱们的config-server工程,而后访问以下地址http://localhost:2007/encrypt/status,若是看到以下访问结果,表示环境搭建成功了: 微服务
此时咱们就能够经过第三方工具如POSTMAN、RestClient等来访问/encrypt和/decrypt接口,好比说我要给dev这个字符加密,方式以下(我这里以POSTMAN为例,注意是POST请求): 工具
解密方式以下: 测试
OK,拿到加密的字符串以后,咱们就能够在配置文件中使用了,仍是咱们昨天的配置文件,此次我这样来写:
小伙伴们注意,配置文件的值若是是以{cipher}
开头,表示该值是一个加密字符,配置中心config-server在获取到这个值以后会先对值进行解密,解密以后才会返回给客户端使用。
上文咱们使用了对称加解密的方式来确保配置文件的安全性,若是使用非对称加解密的方式,咱们的安全性将会获得进一步的提升。使用非对称加密的话须要咱们先生成密钥对,生成密钥对能够直接使用jdk中自带的keytool工具,方式以下:
keytool -genkeypair -alias config-server -keyalg RSA -keystore config-server.keystore
执行效果如图:
执行成功以后,会在命令执行目录下生成一个名为config-server.keystore的文件,将该文件拷贝到config-server的srcmainresources目录下,而后作以下配置:
encrypt.key-store.location=config-server.keystore encrypt.key-store.alias=config-server encrypt.key-store.password=111111 encrypt.key-store.secret=111111
OK,如此以后咱们的非对称加密就配置好了,测试方式和对称加密的测试方式一致,我这里就再也不演示了。
Spring Cloud Config的加解密咱们就说到这里,有问题欢迎留言讨论。
参考资料:
1.《Spring Cloud微服务实战》
更多JavaEE资料请关注公众号: