Spring Cloud Config服务端配置细节(二)之加密解密

时间:2022-05-06
本文章向大家介绍Spring Cloud Config服务端配置细节(二)之加密解密,主要内容包括准备工作、对称加解密、非对称加解密、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

在微服务架构中,由于独立的服务个数众多,加上前期测试工作量大,一些原本由运维人员维护的敏感信息会被我们直接写在微服务中,以提高开发效率,但是这种明文存储方式显然是非常危险的,所以我们要对这些信息进行加密,而Spring Cloud Config则提供了对称加解密、非对称加解密的功能来帮助我们完成这一需求。OK,本文我们就来看看如何实现配置信息的加解密。


准备工作

默认情况下我们的JRE中自带了JCE(Java Cryptography Extension),但是默认是一个有限长度的版本,我们这里需要一个不限长度的JCE,这个JCE我们可以直接百度然后在Oracle官网下载,下载之后解压,我们可以看到如下三个文件:

我们需要将这里的两个jar包拷贝到我们的jdk安装目录下,我的是%JAVA_HOME%jrelibsecurity,覆盖该目录下原有的文件。

如此之后,我们的准备工作就完成了。

对称加解密

对称加解密比较简单,直接配置密钥就可以了,在我们前文创建出来的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微服务实战》