spring-cloud-config安全问题

配置服务的安全问题会很重要,其中的内容是我本身学习的,因为学习时间不长,有可能不是很完备,若是有更好的方案,烦请评论中留言或私信,谢谢!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建立不一样的加密方法。默认提供的并无这个功能(全部加密使用相同的密钥)。

相关文章
相关标签/搜索