【微服务笔记15】微服务组件之Config配置中心实现用户认证、配置属性加解密

这篇文章,主要介绍微服务组件之Config配置中心实现用户认证、配置属性加解密。

目录

一、用户认证

1.1、引入security依赖

1.2、服务端ConfigServer添加访问配置

1.3、客户端ConfigClient添加访问配置

二、配置属性加解密

2.1、对称加密

(1)检车是否支持对称加密

(2)加密配置属性

(3)加密内容保存到配置中心

(4)客户端测试

2.2、非对称加密

(1)keytool生成密钥文件

(2)防止maven忽略config.keystore文件

(3)添加非对称加解密配置

(4)加密配置属性

(5)修改配置中心属性


一、用户认证

前面两篇文章主要介绍了如何搭建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配置中心实现用户认证、配置属性加解密。

猜你喜欢

转载自blog.csdn.net/qq_39826207/article/details/130171628
今日推荐