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