一、配置内容的加解密
对于某些敏感的配置内容(如:账号、密码)应当加密存储。
Config Server为配置内容的加密和解密提供了支持。
1.1、安装JCE
Config Server的加密解密功能依赖Java Cryptography Extension(JCE).
Java8 JCE的地址是:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
替换jdk/jre/lib/security目录中的两个jar
1.2、Config Server的加解密端点
Config Server提供了加密与解码的端点,分别是/encrypt与/decrypt。使用的是对称加密
a、创建项目config-server-encryption
b、配置application.yml配置文件
server: port: 5020 #端点的配置 endpoints: sensitive: true shutdown: enabled: true management: security: enabled: false spring: application: name: config-server-encryption cloud: config: server: git: uri: https://git.oschina.net/wadjz/spring-cloud-config.git username: password: clone-on-start: true encrypt: key: wadjz # 设置对称加密的密钥
c、测试
加密:http://localhost:5020/encrypt,如加密:zhangsan
解密:http://localhost:5020/decrypt,如解密:87ba2ef5645aec689fde5a1c812eccee0226f66a8cc114a2d44a48d0aa92753b
1.3、存储加密的内容
加密后的内容,可使用{cipher}密文的形式存储。
1、准备一个配置文件encryption.yml
spring: datasource: username: root password: '{cipher}87ba2ef5645aec689fde5a1c812eccee0226f66a8cc114a2d44a48d0aa92753b'
将其push到Git上
注意:yml文件这里的{cipher}一定要用单引号,properties则不用。
2、使用http://localhost:5020/encryption-default.yml可获取如下内容:
spring: datasource: password: zhangsan username: root
说明Config Server能自动解密配置内容。
一些场景下,想要让Config Server直接返回密文本身,而不是解密后的内容,可设置spring.cloud.config.server.encrypt.enabled=false,这时可由Config Client自行解密。
1.4、非对称加密
前面说的都是对称加密,Spring cloud同样支持非对称加密。
a、创建项目config-server-encryption-rsa
b、执行以下命令,并按照提示操作,即可创建一个Key Store
keytool -genkeypair -alias mytestkey -keyalg RSA -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass changeme -keystore d:/server.jks -storepass letmein
c、将生成的server.jks文件复制到项目的classpath下
d、在application.yml中添加如下配置
encrypt: key-store: alias: mytestkey # alias secret: changeme # keypass password: letmein # storepass location: classpath:/server.jks # jks文件的路径
e、测试,
访问http://localhost:5020/encrypt,加密zhangsan
访问http://localhost:5020/decrypt,解密
二、Spring Cloud Config与Eureka配合使用
将Config Server和Config Client都注册到Eureka Server上。
1、Config Server的application.yml配置如下:
server: port: 5028 #端点的配置 endpoints: sensitive: true shutdown: enabled: true management: security: enabled: false spring: application: name: config-server-eureka cloud: config: server: git: uri: https://git.oschina.net/wadjz/spring-cloud-config.git username: password: clone-on-start: true health: repositories: a-foo: label: v2.0 profiles: dev name: spring-cloud-demo eureka: client: service-url: defaultZone: http://liuy2:5010/eureka/ instance: prefer-ip-address: true
2、Config Client的bootstrap.yml配置如下,端口5021:
spring: application: # 对应config Server所获取的配置文件的{application} name: spring-cloud-demo cloud: config: profile: dev label: master discovery: # 表示使用微服务发现组件中的Config Server,而不是自己指定Config Server的URI,默认false enabled: true # 指定Config Server在服务发现中的serviceId,默认是configserver service-id: config-server-eureka eureka: client: service-url: defaultZone: http://liuy2:5010/eureka/
3、测试访问http://localhost:5021/profile,效果: