前文都是将配置明文存储在Git仓库中,但在实际项目中,敏感的配置属性(例如数据库账号、密码等),都应加密存储,从而提高安全性。
Config Server为配置内容的加密与解密提供了支持。
Java 7 JCE地址:http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
Java 8 JCE的地址:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html 。
Config Server的bootstrap.yml中添加:
1 2 encrypt: key: foo # 设置对称密钥以yaml格式存储:
1 2 3 4 spring: datasource: username: dbuser password: '{cipher}851a6effab6619f43157a714061f4602be0131b73b56b0451a7e268c880daea3'以properties格式存储:
1 2 spring.datasource.username=dbuser spring.datasource.password={cipher}851a6effab6619f43157a714061f4602be0131b73b56b0451a7e268c880daea3输入命令
1 curl http://localhost:8080/encrypt -d mysecret返回851a6effab6619f43157a714061f4602be0131b73b56b0451a7e268c880daea3 。说明mysecret 被加密了。
输入命令
1 curl http://localhost:8080/decrypt -d 851a6effab6619f43157a714061f4602be0131b73b56b0451a7e268c880daea3可返回mysecret ,说明能够正常解密。
执行以下命令,并按照提示操作,即可创建一个Key Store。
1 keytool -genkeypair -alias mytestkey -keyalg RSA -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass changeme -keystore server.jks -storepass letmein将生成的server.jks文件复制到项目的classpath下。
在bootstrap.yml中添加以下内容。
1 2 3 4 5 6 encrypt: keyStore: location: classpath:/server.jks # jks文件的路径 password: letmein # storepass alias: mytestkey # alias secret: changeme # keypass这样,使用命令
1 curl http://localhost:8080/encrypt -d mysecret尝试加密时 ,就会得到类似以下的结果。
1 AQB38UyNckYzW64rvsaIhy0OV4MUmS7krdHrw+VLUdqXJ4ZVdZL8/ouwSOAYM+6MSjKvzmkaU8Iv2cQ5MWhlZhCrm0f0d2ubc1MH96KBHTix9AroajeTiofPwPoBnWfBo9cC4PU1vD+rcvAvwvdR5q7rYbFc4yut4uJZRzpAXGgf680kAtb6tEtLx7c4/35PEaGXFWd2m8gn21vzWdvhbP6cdC9YlburL0Rq/0H1G+uEX99ZVIWJ0hVn4rplLWPMLUGA2ZVEyVRorIRX/2z5MU7cVPtJ6X1JZDpU4GVz8/3rD5BnbVFTGo6DfBrEzJn58Bzjl6aqo9ca/3j42RHOoQDOHXGqRX/843RbPdvMqTZd0rTOBHTUrVG9E15sCajiLkw=相对于对称加密,非对称加密的安全性更高,但对称加密相对方便。读者可按照需求,自行选择加密方案。
encrypt.* 务必存放在bootstrap.* 中,否则加解密特性无法生效!!
对称加密
GitHub:https://github.com/eacdy/spring-cloud-study/tree/master/2018-Finchley/microservice-config-server-encryptionGitee:https://gitee.com/itmuch/spring-cloud-study/tree/master/2018-Finchley/microservice-config-server-encryption非对称加密
GitHub:https://github.com/eacdy/spring-cloud-study/tree/master/2018-Finchley/microservice-config-server-encryption-rsaGitee:https://gitee.com/itmuch/spring-cloud-study/tree/master/2018-Finchley/microservice-config-server-encryption-rsa