一、配置内容的加解密

对于某些敏感的配置内容(如:账号、密码)应当加密存储。

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

  springCloud(19):统一管理微服务配置-配置内容的加解密和与Eureka配合使用_第1张图片

解密:http://localhost:5020/decrypt,如解密:87ba2ef5645aec689fde5a1c812eccee0226f66a8cc114a2d44a48d0aa92753b 

 springCloud(19):统一管理微服务配置-配置内容的加解密和与Eureka配合使用_第2张图片

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

  springCloud(19):统一管理微服务配置-配置内容的加解密和与Eureka配合使用_第3张图片

 访问http://localhost:5020/decrypt,解密

  springCloud(19):统一管理微服务配置-配置内容的加解密和与Eureka配合使用_第4张图片

二、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,效果:

 wKioL1mn38_T8nWEAAAOnqrm3U4137.png