当前位置:网站首页>微服务实战|集中配置中心Config非对称加密与安全管理
微服务实战|集中配置中心Config非对称加密与安全管理
2022-07-29 14:32:00 【_时光煮雨】
前言
上一篇:微服务实战|集中配置组件Config规避敏感信息泄露
上一篇文章中,我们介绍了使用集中配置中心组件Config实现了对称加密算法实现了配置信息的加密和解密,本文将介绍使用非对称加密算法实现同样的功能以及配置中心的安全管理。
一、Config非对称加密实战
1、生成秘钥文件
使用 JDK 中自带的数字证书管理工具keytool 。进入jdk安装目录下的bin目录,执行以下命令生成秘钥文件:
D:\soft\Java\jdk1.8.0_181\bin>keytool -genkeypair -alias config-server -keyalg RSA -dname "CN=cn,OU=cn,O=cn,L=cn,S=cn,C=cn" -keypass 123456 -keystroe d:/config-server.jks -storepass 123456
将生成的config-server.jks文件copy到config-server项目的resource目录下面。
2、配置秘钥
继续修改我们的config-server项目,将bootstrap.yml文件内容修改如下:
#对称加密配置
#encrypt:
# key: 123456
#非对称加密配置
encrypt:
key-store:
location: config-server.jks
alias: config-server
password: 123456
secret: 123456
3、启动验证
启动config-server项目,验证一下加密解密是否正常:
同样访问http://localhost:8005/encrypt/status,返回ok

再来访问http://localhost:8081/encrypt 加密接口:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7yY7TB6s-1659000221062)(D:\document\cxy\art\09-1.png)]](/img/eb/35d589c8ca2d5c017bc8e9b7dfd4a2.png)
同样一切正常,能够正常加密和解密。
4、项目实战
加密和解密功能正常之后,就要修改我们的配置文件内容了。
修改我们的config-server项目,在repo文件夹下,修改客户端的配置文件configclient-dev.yml,修改内容如下:
#对称加密密文
#app:
# key: '{cipher}5ab3ce1502c40c276074f400aee0be0f6279d6a85bb9d8d315a78c7a91603dde58d4512a6bc9f6492a8eddd34dbeeac0'
#非对称加密密文
app:
key: '{cipher}AQBFywM+SuemUIS18U8wXrw96hxmhq26u4UUKCxQ1jLTLEcT7MEldJ9C7H4USE+bxVIlHernOewcfWQBg8SwSqK9MuLr07Z1bTEwPEu8KfbEMKTXJBaK6OOVLPFKjaUS/ezHKlke1DYjPpxuo9QO5GOTXIGZOBIlcclJbBCAc2/JIEK34Na/vJdbmSVtNdo6qLw1ufDNPES5q7pweWrnaP4vmtzV8JSs7+UAOV4caf8Zxrv7Sp6KuxuRlEn2yNPoi9bzf4pBWoqxZ5cUsEkzMb5ZEEkmqXCXT4o6+AWdantXbzUXCVculh0FGHvJnnvzsDjoKnVJm0JULjNa5yWNik42tdqsj4KlW76XWcBNv4ditrNsYz13IhZpwsZGHtqTZ97AwobvaTY/UrV1We5ssx3O'
注意密文前面增加{cipher},这样才能正常解密。
5、验证
最后,再次重启registry项目以及config-server,config-client两个服务,访问client端的hello接口:http://localhost:8007/hello,同样正常返回了加密后的明文:

二、配置中心安全管理
刚才我们注意到,我们之间访问如:http://localhost:8005/encrypt/status、http://localhost:8081/encrypt 等状态,加密、解密接口是可以之间访问的。甚至我们可以之间访问配置中心获取配置文件的接口地址:http://localhost:8005/configclient/dev:

浏览器访问后返回的json报文为什么直接格式化了?安装这个插件就行了:Chrome浏览器插件:FeHelper
这是同样存在安全隐患的!我们同样需要做进一步的安全管理:
1、引入依赖
继续修改我们的config-server项目的pom文件,增加如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
添加完成之后,重启 config_server 项目,注意重启的时候后台会打印如下日志:
Using generated security password: 8dc1da66-b6ea-4aa7-a67d-3d02f97e179c
然后浏览器再访问地址: http://localhost:8005/configclient/dev,就会跳转到登录页面,而不会直接返回配置信息,登录信息的用户名默认就是user,而密码就是上面打印的日志中生成的随机密码,我们也可以指定用户名和密码:
2、增加安全管理配置
修改config-server项目中的application.yml配置文件:
server:
port: 8005
spring:
application:
name: config-server
profiles:
active: native #本地文件
cloud:
config:
server:
native:
search-locations: classpath:/repo
security: #增加安全管理配置
user:
name: cxy965
roles: admin
password: 123456
eureka:
client:
service-url:
defaultZone: http://localhost:8001/eureka/
这样,就可以使用我们指定的用户名和密码进行登录了。
3、调整客户端调用
增加安全管理配置之后,我们重新启动config-client项目,就会发现,无法从配置中心拉取配置:
2022-07-28 17:09:03.416 WARN 29296 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Could not locate PropertySource: Could not extract response: no suitable HttpMessageConverter found for response type [class org.springframework.cloud.config.environment.Environment] and content type [text/html;charset=UTF-8]
2022-07-28 17:09:03.418 INFO 29296 --- [ main] com.cxy965.demo.ConfigClientApplication : No active profile set, falling back to default profiles: default
意思是通过我们的配置信息,无法获取可用配置资源,是因为配置中心增加了安全管理,客户端无权访问了,这时,在客户端增加访问的用户名和密码就可以了。
修改config-client项目的bootstrap.yml,如下:
spring:
application:
name: configclient
cloud:
config:
username: cxy965 #增加访问配置中心用户名信息
password: 123456 #增加访问配置中心密码信息
name: configclient
profile: dev
discovery:
enabled: true
service‐id: config-server
eureka:
client:
service‐url:
defaultZone: http://localhost:8001/eureka/
再重新启动就可以了!
边栏推荐
猜你喜欢

这 6 款在线 PDF 转换工具,得试试

Introduction to several methods of making custom welcome interface on Weiluntong touch screen

全面质量管理理论

C语言 5:bool类型,关系表达式,逻辑表达式,分支语句,函数调用机制,break,continue,goto,return/exit跳转语句

【yolov7系列二】正负样本分配策略

Realization of Online Chat System Based on SSM

web会话管理与xss攻击

文本处理之xml

Nacos基础教程

基于C语言实现一个社交系统
随机推荐
A review of deep learning for beginners!
软件测试架构师的工作日常
函数柯里化
生鲜赛道溃败中存活的本来生活,纠结生存
基于C语言实现一个社交系统
无线传感器网络定位综述
立足本土,链接全球 | 施耐德电气“工业SI同盟”携手伙伴共赴未来工业
请写出用Graphics2D类的新方法画一个图形的步骤(表格如何画斜线)
全面质量管理理论
【ArcGIS微课1000例】0030:ArcGIS利用MXD doctor工具分析并修复mxd地图文档
基于降阶扩张状态观测器的逆变系统重复控制设计
The raised platform system based on JSP&Servlet implementation
Programmers are a group with a high incidence of occupational diseases. Don’t be naive to think that it’s just as simple as being bald.
极市直播丨严彬-Unicorn:走向目标跟踪的大一统(ECCV2022 Oral)
自定义fingerprint特征
C语言 4:汇编语言指令介绍
一篇适合新手的深度学习综述!
About inner classes
电视处理器a53和a55哪个厉害(cortexa55处理器好吗)
C语言 3:常量和变量,顺序语句,选择语句,循环语句,作用域和生存期