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