9.6.Config加解密
我们的配置文件放到云端或其他服务器,配置文件中会有很多敏感信息,如数据库密码等,
这些信息如果以明文存储和传输是很危险的,为了解决这个问题,Config提供了对属性加密解密的功能,
只需要在敏感信息的值加密后加上前缀{cipher},这主要是为了防止密文被用做密码并意外泄露。
9.6.1.对称加解密:JCE方式
1、在JVM中安装全功能JCE
要使用加密和解密功能,您需要在JVM中安装全功能JCE(默认情况下不包括它),从oracle下载
JCE for JDK8下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
解压后将unlimited下的两个jar包复制到{JAVA_HOME}/jre/lib/security目录下
(将JRE lib / security目录中的两个策略文件替换为您下载的那些)
2、创建一个工程
从futurecloud-config-server复制一份,生成新的项目 futurecloud-config-server-jce
不需要而外添加依赖。
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-config-server
2.1.1.RELEASE
配置启动类FutruecloudConfigServerJceApplication
@SpringBootApplication
@EnableConfigServer
public class FutruecloudConfigServerJceApplication
{
public static void main( String[] args )
{
SpringApplication.run(FutruecloudConfigServerJceApplication.class);
}
}
配置秘钥:在bootstrap.yml中配置
encrypt:
key: yangxj
加密的时候会用到这个key,记住一定要写在 bootstrap.yml 文件中,否则会报
{“description”:“No key was installed for encryption service”,“status”:“NO_KEY”} 这个问题。
意思就是加解密的时候,会使用 environment 类型 的 encrypt key ,只有在bootstrap中加载encrypt key才会变成环境变量。
配置application.yml文件
server:
port: 8979 #程序启动端口,也就是tomcat的端口
spring:
application:
name: futurecloud-config-server-jce #应用名称,别名
cloud:
config:
server:
git:
uri: https://gitee.com/makyan/futurecloud-config # 默认访问路径
clone-on-start: true # 启动时候就clone配置仓库
default-application-name: futurecloud-config
3、测试
启动服务futurecloud-config-server-jce
因为JCE加解密的请求,是POST方式,所以我们在dos下使用命令方式,
也可以使用第三方工具如POSTMAN、RestClient等来访问/encrypt和/decrypt接口。
加密过程:
curl -X POST http://localhost:8979/encrypt -d ThisIsPassword
解密过程:
curl -X POST http://localhost:8979/decrypt -d a649adc85299fcfe4b1a0b3a5496272a8f58d7e2d35b8c07db213a8c9ae81055
注:Spring Cloud 暴露出了几个端点:
/encrypt/status:查看加密功能状态的端点
/key:查看密钥的端点
/encrypt:对请求的body内容进行加密的端点
/decrypt:对请求的body内容进行解密的端点
在没有设置密钥的时候,访问/encrypt/status端点会出现如下错误:
{
"description":"No key was installed for encryption service",
"status":""
}
4、以上我们验证了JCE的用法,现在我们将JCE加密的密文,放在配置文件并上传到云端(gitee中)
密文放在配置文件,需在密文前添加{cipher} 。
注意:.yml配置文件需要使用单引号括起来要解密的内容,.properties文件中的加密值不得用引号括起来。否则,该值不会被解密。
6、访问 : http://localhost:8979/master/futurecloud-config-jce.yml
注意:上传到云端的yml配置文件中,不同出现中文注释,否则会因为编码问题,而无法读取配置文件。
如下配置,有中文注释,由于编码问题就出现无法读取的情况。