这篇文章,主要介绍微服务组件之Config配置中心实现用户认证、配置属性加解密。
目录
一、用户认证
前面两篇文章主要介绍了如何搭建Config配置中心的运行环境,那种环境下,任意的用户都可以访问Config配置中心的配置文件,这在实际开发中是不允许的,容易导致安全问题,所以一般都需要进行用户认证操作,只有授予了访问权限的用户才能够访问Config配置中心。
Config配置中心实现用户认证,是依赖于Security模块,我们只需要引入spring-security依赖即可。
1.1、引入security依赖
<!-- 引入 Security 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
1.2、服务端ConfigServer添加访问配置
在【application.yml】配置文件中,添加用户认证的相关配置信息,如下所示:
spring:
# 添加用户认证配置
security:
user:
name: user # 默认就是 user 用户名称
password: root # 登录密码
1.3、客户端ConfigClient添加访问配置
ConfigServer服务端添加了Security用户认证的配置,那么客户端在访问服务端的时候,就需要带上用户名和密码,这就需要在ConfigClient客户端工程中的【bootstrap.yml】配置文件中进行设置(注意:一定要在bootstrap.yml配置文件中设置)。
spring:
cloud:
config:
# 用户认证
username: user # 访问 config server 的用户名称
password: root # 访问 config server 的登录密码
经过上面三个步骤,就已经完成Config配置中心的用户认证功能了。
二、配置属性加解密
Config配置中心的配置属性,目前都是采用明文的形式保存在Git上面,但是针对一些隐私数据,实际开发中肯定是要进行加密存储的,这样可以避免因为配置文件泄露,导致安全问题。
配置属性加解密有两种方式,分别是:对称加密算法、非对称加密算法。
2.1、对称加密
对称加密是最简单的一种加解密算法,加密和解密时候都是采用相同的密钥,这种方式也有缺点,那就是一旦密码泄露,就会导致隐私数据泄露。
(1)检车是否支持对称加密
启动Config Server服务端工程,浏览器访问【http://localhost:9999/encrypt/status】地址,查看是否具备对称加解密的功能。
- 如果出现下图所示情况,则说明具备加解密功能,但是现在还缺少加解密的密钥策略。
- 如何解决上图所示的错误呢???
在Config Server服务端工程的【bootstrap.yml】配置文件中,添加密钥key配置(注意:一定要在boostrap.yml文件中添加)。
# 对称加解密的key配置
encrypt:
key: config_encrypt_key # 这里自定义写一个加解密使用的key密钥即可
- 配置密钥之后,重新启动ConfigServer服务端工程。
出现上面的情况,就说明Config Server服务端已经具备加解密的环境了。
(2)加密配置属性
在配置中心服务端中,提供了【http://localhost:9999/encrypt】接口地址,用于加密操作,我们可以在CMD命令行中,使用curl命令进行属性的加密,然后将加密之后的属性保存到Git上面。
命令如下所示:
# -d 后面的内容就是需要加密的明文内容
curl http://localhost:9999/encrypt -d root
(3)加密内容保存到配置中心
进入配置中心,找到对应的配置文件,然后将加密之后的内容,填入到指定的属性后面,需要注意的是,这个内容必须是按照如下规则填写:
'{cipher}后面跟着加密的内容'
下面是我配置的内容:
(4)客户端测试
启动客户端,然后获取password属性,查看是否为解密之后的内容,如果是则对称加解密成功。
需要注意的是,Config加解密是发生在Config Server服务端的,Config Server会从Git上面获取到加密之后的属性,然后解密之后再将属性发送给Config Client客户端程序。
2.2、非对称加密
非对称加密,是指:采用一对密钥,一个是公钥、一个是私钥,客户端拿着公钥进行数据的加密,服务端拿着私钥进行密文的解密。要使用非对称加密,需要生成一个密钥配置文件,这里我们可以采用JDK自带的【keytool】工具来生成密钥配置文件。
(1)keytool生成密钥文件
在某个目录下面,打开CMD命令行窗口,执行如下命令:
# keytool 生成密钥文件的命令工具
# -genkeypair 生成密钥对
# -keystore 用于指定密钥对文件名称路径,我这里就叫做config.keystore文件
# -alias 别名,这叫做config
# -keyalg 非对称加解密算法
# -keypass 密码,这里叫做config
# -storepass 存储密码,这里叫做config
keytool -genkeypair -keystore config.keystore -alias config -keyalg RSA -keypass config -storepass config
执行命令之后,此时会让你输入一些内容,如下:
执行成功之后,此时在对应的目录下面就会生成一个【config.keystore】文件,然后将这个文件复制到Config Server服务端工程的【resources】类路径下面。
(2)防止maven忽略config.keystore文件
maven默认情况下,是不会将config.keystore文件打包到classes目录的,所以需要在pom中添加配置:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.yml</include>
<include>**/*.properties</include>
<include>**/*.keystore</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
(3)添加非对称加解密配置
在Config Server服务端工程中的【bootstrap.yml】文件里面,添加如下配置信息:
# 非对称加密的配置
encrypt:
key-store:
location: classpath:config.keystore # 密钥对文件的路径
alias: config # 密码对别名,和生成密钥对时候那个alias保持一致
password: config # 对应 storepass 的值
secret: config # 对应 keypass 的值,私钥
(4)加密配置属性
打开CMD命令行窗口,执行命令,生成密文。
命令如下所示:
curl http://localhost:9999/encrypt -d root_2023
(5)修改配置中心属性
修改配置中心的password属性值,将其替换成非对称加密之后的密文内容。
启动客户端工程,访问测试是否能够正常获取加密之后的属性。
到此,Config配置中心实现用户认证、配置属性加解密就完成啦。
综上,这篇文章结束了,主要介绍微服务组件之Config配置中心实现用户认证、配置属性加解密。