3.4-1 保护敏感的配置信息

如果在Spring Cloud配置服务器上的某个属性的值是加密的,但提供的加密串是错误的,
比如将licensingservice.yml文件中的下列属性:
spring.datasource.password: "{cipher}11db9cabb9e352467114f7e91e0f83d5d84185750e1972ad78d918664dc77fe1"
改成:
spring.datasource.password: "{cipher}11db9cabb9e352467iiiiii114f7e91e0f83d5d84185750e1972ad78d918664dc77fe1"
则访问:则http://192.168.237.132:8888/licensingservice/default,会返回如下信息,注意标红部分:
{
    "name": "licensingservice",
    "profiles": ["default"],
    "label": null,
    "version": null,
    "state": null,
    "propertySources": [{
        "source": {
            "example.property": "I AM IN THE DEFAULT",
            "spring.jpa.database": "POSTGRESQL",
            "spring.datasource.platform": "postgres",
            "spring.jpa.show-sql": "true",
            "spring.database.driverClassName": "org.postgresql.Driver",
            "spring.datasource.url": "jdbc:postgresql://database:5432/eagle_eye_local",
            "spring.datasource.username": "postgres",
            "spring.datasource.testWhileIdle": "true",
            "spring.datasource.validationQuery": "SELECT 1",
            "spring.jpa.properties.hibernate.dialect": "org.hibernate.dialect.PostgreSQLDialect",
            "redis.server": "redis",
            "redis.port": "6379",
            "signing.key": "345345fsdfsf5345",
            "invalid.spring.datasource.password": "<n/a>"
        }
    }]
}
还有一个现象,每次使用postman对同一个值进行加密(访问http://192.168.237.132:8888/encrypt),每次返回的结果都不同:
 
11db9cabb9e352467114f7e91e0f83d5d84185750e1972ad78d918664dc77fe1
 
 
41e01d0233f1b66611e504f64000996fbc7137e6a6c1d06b337a851cc2bd9677
 
Spring Cloud配置服务器上的那个属性值保持不变,还是之前的加密串,在使用postman之后得到41e01d0233f1b66611e504f64000996fbc7137e6a6c1d06b337a851cc2bd9677这个加密串之后,再次访问:http://192.168.237.132:8888/licensingservice/default,还是可以解密被加密的属性值。
这说明Spring Cloud配置服务器对属性值进行加密和解密,不仅使用了ENCRYPT_KEY环境变量,还使用了自己的方式产生了一个值x,x成为加密密钥的一部分,且x被保存。
 
jar更新命令说明,如下示例:
[root@localhost confsvr]# ll
总用量 22336
drwxr-xr-x. 3 root root       21 1月  22 11:32 BOOT-INF
drwxr-xr-x. 4 root root       57 1月  21 17:19 config
-rw-r--r--. 1 root root 22867986 1月  21 16:21 configurationserver-0.0.1-SNAPSHOT.jar
[root@localhost confsvr]# jar uf configurationserver-0.0.1-SNAPSHOT.jar BOOT-INF/classes/application.yml
[root@localhost confsvr]# ll
总用量 22336
drwxr-xr-x. 3 root root       21 1月  22 11:32 BOOT-INF
drwxr-xr-x. 4 root root       57 1月  21 17:19 config
-rw-r--r--. 1 root root 22868105 1月  22 11:33 configurationserver-0.0.1-SNAPSHOT.jar
 
也就是如果想更新jar文件中的BOOT-INF/classes/application.yml文件,则需要先在本地centos7上创建对应的目录:BOOT-INF/classes/,然后运行命令。
 
 在Spring Cloud Config中禁用服务器端的属性解密。这可以通过设置Spring Cloud Config的src/main/resources/application.yml文件中的spring.cloud.config.server.encrypt.enabled属性为false来完成,其配置内容如下:
server:
    port: 8888
spring:
   profiles:
     active: native
   cloud:
      config:
        server:
            native:
            encrypt.enabled: false
而下面的配置内容是错误的,禁用服务器端的属性解密不会生效:
               
server:
    port: 8888
spring:
   profiles:
     active: native
   cloud:
      config:
        server:
            native:
               encrypt:
                  enabled: false
 
posted @ 2019-12-02 20:53  mongotea  阅读(332)  评论(0编辑  收藏  举报