配置服务的安全问题会很重要,其中的内容是我本身学习的,因为学习时间不长,有可能不是很完备,若是有更好的方案,烦请评论中留言或私信,谢谢!java
1. 首先访问配置服务须要设置密码:git
使用spring-security使得这件事变得很简单,在pom.xml中引入依赖spring
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
在application.properties中指定用户名和密码,安全
security.user.name=user security.user.password=yourPW
若是不指定,用户名默认是user,密码会使用随机密码写入到log中。配置客户端也是须要提供帐号密码才能访问的,配置客户端的搭建方案后面会说。服务器
2. 大部分公司没能力本身改造git仓库,所以,机密性很高的配置放入git中并不安全。app
配置服务提供了对配置的加密和解密,因为配置客户端会不少,并不安全,建议将加密和解密所有放在配置服务中完成。spring-boot
3. 加密配置文件内容:学习
Config Server 可使用对称(共享)密钥或者非对称密钥(RSA密钥对).就安全性来说,非对称密钥是优先选择,可是,选择对称密钥进行加解密处理显得很是方便,由于,只须要简单的配置一个属性值.加密
加密使用公钥完成,私钥用来解密。原则上,若是你只想加密,服务器上只配置公钥(用私钥在本地自行解密)。实际中,建议将加密和解密所有放在配置服务中完成。缘由是这种方式会把密钥管理过程让全部的客户端都知道,而不是把焦点汇集在服务器上。从另一个方面讲,一个很是有益的建议是若是你的配置服务器相对不安全,只能有少数客户端须要加密配置属性。spa
加密配置:
1. 生成密钥库
$ 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
2. 配置配置服务配置文件
encrypt: keyStore: location: classpath:/server.jks password: letmein alias: mytestkey secret: changeme
4. 如何加密配置文件内容信息
通过上面的配置,配置服务器已经具有给配置文件内容加密与解密的能力,下面介绍如何进行加密和解密
服务器会暴露 /encrypt
和/decrypt
接口。若是你想编辑远程配置文件,你能够请求Config Server的/encrypt
接口来加密。
逆操做也能够经过/decrypt
来完成。
你加密的值增长{cipher}
前缀后,放入配置文件中便可,从配置服务器获取的配置会是通过自动解密的内容。
当客户端程序对主环境资源不能肯定时,/encrypt
和/decrypt
接口也接受带有路径形式的请求 /*/{name}/{profiles}
,这样能够针对每一个application(name)和profile进行详细的控制加解密。
若是以这种细粒度的方式来控制加解密,你必须提供一个TextEncryptorLocator
类型的@Bean
,使用这个Bean 能够为每一个名称或profile建立不一样的加密方法。默认提供的并无这个功能(全部加密使用相同的密钥)。