17、Spring Cloud17——加密解密服务

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

加密方式一般有以下几种方案:
1、Base64,这其实不是一种加密的方法,而是一种编码方案,叫Base64是因为52个大小写字母,加上0到9是个数字,再加上两个标点符号(+ /),一共是64个。
2、不可逆加密:理论上无法解密的(MD5、SHA1-XXX)这种文本加密之后不需要解密,一般来说用于密码加密上,密码不需要解密。
3、可逆加密:就是可以解密的,它分两种,对称加密(加密和解密的密钥是同一个)和非对称加密(加密和解密的密钥不是同一个,加密的密钥称作公钥可以告诉任何人,公钥只能加密不能解密,私钥只能解密不能加密)。

在Spring Cloud中对称加密和非对称加密都是支持的,下面我们来看一下怎么使用。

默认情况下我们的JRE中自带了JCE(Java Cryptography Extension)Java加密扩展包,但是默认是一个有限长度的版本,我们这里需要一个不限长度的JCE,这个JCE我们可以直接百度然后在Oracle官网下载(https://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html ),下载之后解压,我们可以看到如下三个文件:
17、Spring Cloud17——加密解密服务_第1张图片我们需要将这里的两个jar包拷贝到我们的jdk安装目录下,我的是%JAVA_HOME%\jre\lib\security,覆盖该目录下原有这两个同名文件的文件。

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

对称加解密
对称加解密比较简单,直接配置密钥就可以了,在我们前文创建出来的config-server中配置密钥,但是注意这个密钥需要配置在bootstrap.properties中,在config-server中创建一个bootstrap.properties文件,配置如下:

encrypt.key=shuping

配置完成之后,启动我们的config-server工程,然后访问如下地址http://localhost:7000/encrypt/status,如果看到如下访问结果,表示环境搭建成功了(注意:这里先把Spring Security的依赖先注释):
17、Spring Cloud17——加密解密服务_第2张图片
此时我们就可以通过第三方工具如postman、RestClient等来访问/encrypt和/decrypt接口,比如说我要给dev123这个字符加密,方式如下(我这里以postman为例,注意是post请求):
17、Spring Cloud17——加密解密服务_第3张图片上图下面的的那一串就是加密后的字符串,然后把这个字符串拷贝到仓库里面,但是这些一会儿去加载这个配置文件的时候,就不知道这到底是一个加密的字符还是原本字符串,所以使用加密字符需要在前面加一个{cipher}:
17、Spring Cloud17——加密解密服务_第4张图片然后把它提交一下:
17、Spring Cloud17——加密解密服务_第5张图片
现在我再从config-client中去访问发现怎么刷新都还是原来的数据:
在这里插入图片描述而config-server中已经发生了改变:
17、Spring Cloud17——加密解密服务_第6张图片

这说明如果GitHub仓库里面的配置文件发生了变化config-server能过即时的感知到,但是config-client不能即时的感知到,必须要重启才行。
在这里插入图片描述配置中心config-server在获取到这个值之后会先对值进行解密,解密之后才会返回给客户端使用。

非对称加密
非对称加密就是加密和解密的密钥不一样,像我们的对称加密就只是在配置文件中加了一个encrypt.key=shuping(密钥)而已,其他的都没变,那么非对称加密又该如何配置呢?

如果做非对称加密,需要你生成一个加密和解密的密钥对。生成密钥对可以直接使用jdk中自带的keytool工具,打开cmd直接执行如下命令:

keytool -genkeypair -alias config-server -keyalg RSA -keystore config-server.keystore

keytool -genkeypair -alias :生成一个密钥对
config-server :别名
-keyalg RSA :算法用的RSA,非对称加密的主流算法
-keystore config-server.keystore:生成的密钥文件放在config-server.keystore文件里面

在这里插入图片描述17、Spring Cloud17——加密解密服务_第7张图片执行成功之后,会在命令执行目录下生成一个名为config-server.keystore的文件,将该文件拷贝到config-server的src\main\resources目录下,然后在config-server的bootstrap.properties中做如下配置:

#位置
encrypt.key-store.location=config-server.keystore
#刚才配置的时候取得别名
encrypt.key-store.alias=config-server
#两次输入的公钥和密钥
encrypt.key-store.password=123456
encrypt.key-store.secret=123456

重启项目后,对文本加密:
17、Spring Cloud17——加密解密服务_第8张图片复制到文件中:
在这里插入图片描述然后提交
17、Spring Cloud17——加密解密服务_第9张图片
访问config-server
17、Spring Cloud17——加密解密服务_第10张图片
重启config-client:
在这里插入图片描述

你可能感兴趣的:(Spring,Cloud,Spring,Cloud)