SpringCloud之Spring Config配置中心用户认证及配置内容加解密

一、环境及场景

场景: ConfigServer是允许匿名访问的。在正式发布环境情况下,通过直接调用配置中心接口,就可以直接看到你的数据库信息,这样是不安全的:例:http://xxx.xxx.xx.xx:xxxx/microservice-user.yml,为了防止内容外泄,需要做一些操作保护信息。
环境:
Springboot:2.3.10.RELEASE
spring-cloud:Hoxton.SR11

二、用户认证

SpringCloud是在调用接口的时候,对用户进行一个登陆验证,本文是一个基于HTTP Basic的用户验证。

1.添加依赖

		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-security</artifactId>
        </dependency>

2.在application.yml中添加配置

spring:
  security:
    user:
      password: user123 #配置登陆的密码是user123
      name: user #配置登陆的账户是user

这样的就很简单的为ConfigServer添加了一个基于HTTP Basic的认证,如果不设置密码的话,密码是一串随机值,会在你的ConfigServer启动的时候打印出来

3.展示效果:

4.客户端使用需要用户认证的ConfigServer

4.1 使用Curl风格的URL。示例:

spring:
  cloud:
    config:
      uri: http://user:user123@localhost:7001/

4.2 指定ConfigServer的账户密码。示例:

spring:
  cloud:
    config:
      label: ${spring.profiles.active} #指定Git仓库的分支,对应config server 所获取的配置文件的{label}
      discovery:
        enabled: true #表示使用服务发现组件中的configserver ,而不是自己指定config server的uri,默认为false
        service-id: microservice-config-server #服务发现中configserver的serverId
      fail-fast: true #失败快速响应
      username: user
      password: user123

指定账户密码的优先级要高于URI

三、配置内容加解密

安装JCE

默认情况下我们的JRE中自带了JCE(Java Cryptography Extension),但是默认是一个有限长度的版本,我们这里需要一个不限长度的JCE,
Java 6 JCE地址:https://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html
Java 7 JCE地址:http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
Java 8 JCE的地址:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

下载完成之后解压,把得到到两个Jar包复制到$JAVA_HOME\jre\lib\security目录下。

1.对称加密

1.1 设置一个加密用到的Key

在我们的configserver项目中的bootstrap.yml配置文件中加入如下配置项:

encrypt:
  key: Thisismysecretkey

1.2 对内容加密,解密

注意:如果你已经添加了HTTP Basic用户认证,那么你直接使用postman请求会报错:
在这里插入图片描述
解决办法:
在这里插入图片描述
这里是post请求,不是get,有些博客说的是get

加密:
使用encrypt端点请求即可:
在这里插入图片描述

Spring Security的CSRF验证

使用postman进行加密解密的时候,如果还是请求失败,阅读下面这两个文章,你会找到原因和解决办法
1.使用Spring Security的Basic Auth认证后Postman的POST请求不成功原因

2.Spring Security - 什么时候禁用CSRF

解密:
同理使用decrypt端点请求

在这里插入图片描述

1.3 存储加密的内容

拉取的你配置仓库的数据,将你需要加密的数据替换:
需要使用{cipher}的密文形式,单引号不要忘记了。然后push到远程。
例如:

root: '{cipher}e031665915e85d9653baab673e6781cdb348c42771a55c2977334edf1017bc5e'

1.4 测试

再次请求配置内容。返回:

root: abc

说明ConfigServer能自动解密配置内容。有时候,我们需要ConfigServer返回密文本身,而不是解密后的内容。

1.5 设置返回密文

在bootstrap.yml文件添加配置:

spring:
  cloud:
    config:
      server:
        encrypt:
          enabled: false #配置后请求内容为加密后的,不会再自动解密

1.6 客户端自行解密

客户端解密也比较简单

1.6.1 添加依赖
		<!--客户端解密-->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-rsa</artifactId>
            <version>1.0.10.RELEASE</version>
        </dependency>
1.6.2 设置配置

添加配置:客户端的解密key也必须放到bootstrap.yml中。

encrypt:
  key: Thisismysecretkey

2.非对称加密

执行以下命令,并按照提示操作,即可创建一个Key Store。

keytool -genkeypair -alias mytestkey -keyalg RSA -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass changeme -keystore server.jks -storepass letmein

将生成的server.jks文件复制到项目的classpath下。

在bootstrap.yml中添加以下内容。

encrypt:
  keyStore:
    location: classpath:/server.jks # jks文件的路径
    password: letmein               # storepass
    alias: mytestkey                # alias
    secret: changeme                # keypass

这样,我们使用命令

curl http://localhost:8080/encrypt -d mysecret

尝试加密时 ,就会得到类似以下的结果。

AQB38UyNckYzW64rvsaIhy0OV4MUmS7krdHrw+VLUdqXJ4ZVdZL8/ouwSOAYM+6MSjKvzmkaU8Iv2cQ5MWhlZhCrm0f0d2ubc1MH96KBHTix9AroajeTiofPwPoBnWfBo9cC4PU1vD+rcvAvwvdR5q7rYbFc4yut4uJZRzpAXGgf680kAtb6tEtLx7c4/35PEaGXFWd2m8gn21vzWdvhbP6cdC9YlburL0Rq/0H1G+uEX99ZVIWJ0hVn4rplLWPMLUGA2ZVEyVRorIRX/2z5MU7cVPtJ6X1JZDpU4GVz8/3rD5BnbVFTGo6DfBrEzJn58Bzjl6aqo9ca/3j42RHOoQDOHXGqRX/843RbPdvMqTZd0rTOBHTUrVG9E15sCajiLkw=

相对于对称加密,非对称加密的安全性更高,但对称加密相对方便

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Spring Cloud Config配置中心有以下功能: 1. 集中管理应用程序的配置信息 2. 支持多环境配置 3. 支持加密/解密配置信息 4. 支持客户端自动更新配置信息 5. 支持版本管理 6. 支持配置信息的动态刷新 ### 回答2: Spring Cloud Config配置中心是一个可以集中管理、动态更新分布式系统中的配置的工具。它具有以下功能: 1. 集中管理:Spring Cloud Config可以将分布式系统的配置集中存储在一个地方,使得配置信息更加可控和可维护。开发人员可以通过配置服务器统一管理各个环境(如开发、测试、生产)的配置文件,减少配置文件的传统散落问题。 2. 动态更新:在分布式系统中,如果某些配置信息发生变化,传统方式需要重新部署应用程序才能使变化生效。而使用Spring Cloud Config可以实现动态更新,即可以在不重新部署应用的情况下,及时将新的配置信息更新到应用程序中,减少了重新部署对系统的影响和停机时间。 3. 版本管理:Spring Cloud Config允许配置文件进行版本管理,每次更新配置文件都会生成一个新的版本,方便进行配置的历史版本查看和回滚操作。这样可以有效地避免因为配置错误而导致的系统故障,并提高系统的可靠性和稳定性。 4. 分布式支持:Spring Cloud Config支持将配置文件分布式地存储在多个配置服务器中,可以根据需求进行水平扩展和负载均衡,确保系统可扩展性和高可用性。 5. 安全性:Spring Cloud Config提供了对配置文件的安全保护机制,开发人员可以通过对配置文件进行加密和解密操作,确保配置文件的安全性,防止敏感信息泄露。 总的来说,Spring Cloud Config配置中心提供了集中管理、动态更新、版本管理、分布式支持和安全性等功能,帮助开发人员更加方便地管理和维护分布式系统的配置信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值