手段
https://www.jianshu.com/p/1dbd9a83880f
- 配置服务端的用户密码,避免无关人员直接获取到项目配置文件
可以通过对 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>
-
使用内网(阿里云),不支持外网通过url直接访问 config服务端查看配置情况。依赖配置的服务也在内网。
-
加密解密,从而保护敏感信息,不至于明文显示。但是可以通过url访问获取到密文(可能设计到登陆账号密码,或者内网环境,不对外开放直接的url访问,或者读取config server的配置文件的encryp.key)
- 通过配置encrypt.key 来开启加密
- 比如用Post请求来获取加密后的值
http://localhost:8001/encrypt/status
# 生成加密后的值
curl root:123456@localhost:8001/encrypt -d zhihao.miao
87da683d3f37607c848cba041891d1740a33461051eba034b7ff881319cf0eab
# 解密
curl root:123456@localhost:8001/decrypt -d 87da683d3f37607c848cba041891d1740a33461051eba034b7ff881319cf0eab
demo
- 先通过明文加密生成加密值 # curl root:123456@localhost:8001/encrypt -d zhihao.miao
- 在服务端配置需要的密文 # encrypt.key= zhihao.miao
- 在配置中心里面配置加密值 # test.name={cipher}87da683d3f37607c848cba041891d1740a33461051eba034b7ff881319cf0eab
然后通过直接访问服务器,获取到密文
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
所以一般的操作是:
- config server 配置账号密码,防止 直接通过url的形式,破解出密文
- 客户端连接config server是通过注册中心连接,而不是账号密码的形式连接到config server(eureka有账号密码认证),从而保护了 server的账号密码
但是一旦拥有了config server的账号密码(可以通过查看config项目的bootstrap.properties获得),通过eureka可以看到 config server的IP + 端口,还是可以通过明文破解出密文
其实用户名和密码对于数据库也没那么重要
- 如果mysql 开启了ip认证的话,即使有账号密码也无法登陆数据库 (虽然一般 dev / test都关闭了对 IP的限制)
- 阿里云的mysql 比如 uat和 prod都是只能通过dms才能访问的,都没有账号密码一说
网友评论