SpringCloud config的安全性

2019-07-12  本文已影响0人  黄靠谱

手段

https://www.jianshu.com/p/1dbd9a83880f

  1. 配置服务端的用户密码,避免无关人员直接获取到项目配置文件

可以通过对 config server配置 用户名 和密码,从而实现安全(不能通过url 直接获取到关联的代码仓库的配置文件),需要登录账号密码才可以查看。 同时客户端也要配置用户名和密码

security:
  basic:
    enabled: true
  user:
    name: root
    password: 123456
    

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
  1. 使用内网(阿里云),不支持外网通过url直接访问 config服务端查看配置情况。依赖配置的服务也在内网。

  2. 加密解密,从而保护敏感信息,不至于明文显示。但是可以通过url访问获取到密文(可能设计到登陆账号密码,或者内网环境,不对外开放直接的url访问,或者读取config server的配置文件的encryp.key)

http://localhost:8001/encrypt/status
# 生成加密后的值
curl root:123456@localhost:8001/encrypt -d zhihao.miao 
87da683d3f37607c848cba041891d1740a33461051eba034b7ff881319cf0eab
# 解密
curl root:123456@localhost:8001/decrypt  -d 87da683d3f37607c848cba041891d1740a33461051eba034b7ff881319cf0eab

demo

然后通过直接访问服务器,获取到密文
http://localhost:8001/spring-cloud-config-client-test.properties

test.name=zhihao.miao

curl localhost:8001/encrypt -d sa_dev

其它: 一个密文 加密每次会生成不同的明文,但是这些明文解密后的密文是一样的
所以如果拥有config server的url访问权限,可以根据代码仓库的密文,通过解密反推出明文。(骚操作啊)

加密的注意事项

加密的安全性要非常注意,因为通过url,可以破解出对应的密文。
curl root:123456@localhost:8001/decrypt -d 87da683d3f37607c848cba041891d1740a33461051eba034b7ff881319cf0eab

所以一般的操作是:

  1. config server 配置账号密码,防止 直接通过url的形式,破解出密文
  2. 客户端连接config server是通过注册中心连接,而不是账号密码的形式连接到config server(eureka有账号密码认证),从而保护了 server的账号密码

但是一旦拥有了config server的账号密码(可以通过查看config项目的bootstrap.properties获得),通过eureka可以看到 config server的IP + 端口,还是可以通过明文破解出密文

其实用户名和密码对于数据库也没那么重要

  1. 如果mysql 开启了ip认证的话,即使有账号密码也无法登陆数据库 (虽然一般 dev / test都关闭了对 IP的限制)
  2. 阿里云的mysql 比如 uat和 prod都是只能通过dms才能访问的,都没有账号密码一说
上一篇 下一篇

猜你喜欢

热点阅读