Spring Cloud Config 服务端配置细节(二)之加密解密
准备工作
默认情况下我们的JRE中自带了JCE(Java Cryptography Extension),但是默认是一个有限长度的版本,我们这里需要一个不限长度的JCE,这个JCE我们可以直接百度然后在Oracle官网下载,下载之后解压,我们可以看到如下三个文件:
![图片](encryption-and-decryption-of-spring-cloud-config-server-configuration-details (-ii/640.png)
我们需要将这里的两个jar包拷贝到我们的jdk安装目录下,我的是%JAVA_HOME%\jre\lib\security
,覆盖该目录下原有的文件。
如此之后,我们的准备工作就完成了。
对称加解密
对称加解密比较简单,直接配置密钥就可以了,在我们前文创建出来的config-server中配置密钥,但是注意这个密钥需要配置在bootstrap.properties中,另外这里还有非常重要一点:Spring Cloud的Dalston.SR3和Dalston.SR2版本在这个问题上是有BUG的,如果用这两个版本在这里测试会没有效果,应该避开使用这两个版本,我这里使用的是Dalston.SR4版本,配置如下:
1 | encrypt.key=sang |
配置完成之后,启动我们的config-server工程,然后访问如下地址http://localhost:2007/encrypt/status,如果看到如下访问结果,表示环境搭建成功了:
![图片](encryption-and-decryption-of-spring-cloud-config-server-configuration-details (-ii/641.png)
此时我们就可以通过第三方工具如POSTMAN、RestClient等来访问/encrypt和/decrypt接口,比如说我要给dev这个字符加密,方式如下(我这里以POSTMAN为例,注意是POST请求):
![图片](encryption-and-decryption-of-spring-cloud-config-server-configuration-details (-ii/642.png)
解密方式如下:
![图片](encryption-and-decryption-of-spring-cloud-config-server-configuration-details (-ii/643.png)
OK,拿到加密的字符串之后,我们就可以在配置文件中使用了,还是我们昨天的配置文件,这次我这样来写:
![图片](encryption-and-decryption-of-spring-cloud-config-server-configuration-details (-ii/644.png)
配置文件的值如果是以{cipher}
开头,表示该值是一个加密字符,配置中心config-server在获取到这个值之后会先对值进行解密,解密之后才会返回给客户端使用。
非对称加解密
上文我们使用了对称加解密的方式来确保配置文件的安全性,如果使用非对称加解密的方式,我们的安全性将会得到进一步的提高。使用非对称加密的话需要我们先生成密钥对,生成密钥对可以直接使用jdk中自带的keytool工具,方式如下:
1 | keytool -genkeypair -alias config-server -keyalg RSA -keystore config-server.keystore |
执行效果如图:
![图片](encryption-and-decryption-of-spring-cloud-config-server-configuration-details (-ii/645.jpeg)
执行成功之后,会在命令执行目录下生成一个名为config-server.keystore的文件,将该文件拷贝到config-server的src\main\resources目录下,然后做如下配置:
1 | encrypt.key-store.location=config-server.keystore |