配置中心Config加密

一、配置中心加密

配置文件统一存储在GIT中,虽然增强了管理和版本控制,但是文件内容的安全性也成了问题。如果外部任意知道了GIT地址或spring-cloud-config-server的地址,那么配置文件的全部内容相当于对外完全开放。这个时候就需要提供配置内容加解密逻辑。将加密后的配置内容保存在GIT仓库中,在spring-cloud-config-client访问spring-cloud-config-server的时候,通过spring-cloud-config-server实现加密数据的解密,这样就可以保证配置内容的安全了。
在spring-cloud架构中,Dalston.SR1版本可以正常提供加解密功能,而其他版本有BUG,无法提供加解密功能。
使用加解密逻辑,需要在JDK/JRE环境中增加policy支持。需要在oracle官网上下载policy相关资源,地址为:
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
将下载的两个policy相关jar包复制到 J A V A H O M E / l i b / 和 JAVA_HOME/lib/和 JAVAHOME/lib/JAVA_HOME/jre/lib/目录中即可。
当环境准备完毕后,可以通过下述地址测试spring-cloud-config-server的加解密环境是否生效:
http://config-server-ip:port/encrypt/status

  1. 对称加密

使用相同的密钥(key)实现配置数据的加密和解密。
在spring-cloud-config-server的全局配置文件中增加密钥配置

# 配置密钥内容,加密和解密都使用这个密钥
encrypt.key=test

spring-cloud-config-server提供了对数据加密和解密的处理逻辑,要求必须使用POST请求方式,在请求体中直接传递要加解密的内容(json请求参数提交方式),spring-cloud-config-server会返回加解密后的结果。
加密请求路径:http://config-server-ip:port/encrypt
解密请求路径:http://config-server-ip:port/decrypt
在GIT仓库中保存的密文数据使用前缀{cipher}表示数据为密文,这样spring-cloud-config-client通过spring-cloud-config-server获取配置数据的时候,spring-cloud-config-server会自动实现解密过程,并将解密后的结果返回给spring-cloud-config-client

  1. 非对称加密

使用不同的密钥(key)实现配置数据的加密和解密。使用公钥加密数据,使用私钥解密数据。
在这里插入图片描述
JDK提供了java-keytool工具来生成密钥,生成的密钥信息是"keystore"文件。keytool工具使用方式如下:
keytool -genkeypair -alias “test” -keyalg “RSA” -keystore “test.keystore”
输入密钥库口令: test123
再次输入新口令: test123
您的名字与姓氏是什么?
[Unknown]: test
您的组织单位名称是什么?
[Unknown]: test
您的组织名称是什么?
[Unknown]: test
您所在的城市或区域名称是什么?
[Unknown]: beijing
您所在的省/市/自治区名称是什么?
[Unknown]: beijing
该单位的双字母国家/地区代码是什么?
[Unknown]: cn
CN=test, OU=test, O=test, L=beijing, ST=beijing, C=cn是否正确?
[否]: y
输入 的密钥口令test123
(如果和密钥库口令相同, 按回车):
再次输入新口令:test123

将生成的密钥文件test.keystore保存到spring-cloud-config-server的classpath下(src/main/resources),并在全局配置文件中增加下述内容

# 密钥文件保存路径
encrypt.key-store.location=classpath:test.keystore
# 密钥别名,此别名是公开的
encrypt.key-store.alias=test
# 密钥库口令
encrypt.key-store.password=test123
# 密钥口令
encrypt.key-store.secret=test123

实现配置数据的加解密方式和对称加密一致

二、配置中心的安全认证

现在配置内容通过加解密的方式实现了安全保障,但是配置中心spring-cloud-config-server还是完全对外公开的。如果通过http协议地址:
http://config-server-ip:port/applicationName/profile/label
还是可以获取到配置文件内容,这对配置信息的安全保护还是不足。需要给spring-cloud-config-server提供用户安全认证,在这里使用spring-boot提供的security组件来使用HTTP Bastic用户安全认证。
在spring-cloud-config-server中增加新的依赖security

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

在spring-cloud-config-server全局配置文件中增加用户信息

spring:
  security:
    user:
      name: admin
      password: 123456

这样就为spring-cloud-config-server提供了用户安全认证。
在客户的bootstrap配置文件中增加下述内容,来实现spring-cloud-config-client访问spring-cloud-config-server的用户登录:

spring:
  cloud:
    config:
      username: admin
      password: 123456
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值