Config Server——配置内容的加密与解密

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 我们在Git仓库中存储的都是明文,但在很多场景下,某些敏感的配置内容(例如数据库账号、密码),应当被加密存储以提高安全性。Config Server为配置内容的加密与解密提供了支持。

我们在Git仓库中存储的都是明文,但在很多场景下,某些敏感的配置内容(例如数据库账号、密码),应当被加密存储以提高安全性。Config Server为配置内容的加密与解密提供了支持。

安装JCE

Config Server的加解密功能依赖Java Cryptography Extension(JCE)。

Java 8 JCE的地址是:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

下载JCE,解压后,按照README.txt的说明即可安装,其实就是将JDK/jre/lib/security目录中的两个jar文件替换为JCE中的jar文件。

其他Java版本的JCE的下载地址及安装在Spring Cloud 文档中有提及,详见:http://cloud.spring.io/spring-cloud-static/Camden.SR2/#_cloud_native_applications

加解密端点

Config Server为我们提供了加密与解密的端点,分别是/encrypt/decrypt。我们可使用

curl $CONFIG_SERVER_URL/encrypt -d 想要加密的明文
AI 代码解读

来加密明文。使用

curl $CONFIG_SERVER_URL/decrypt -d 想要解密的密文
AI 代码解读

来解密密文。

编写代码

(1) 复制项目microservice-config-server ,将ArtifactId修改为microservice-config-server-encryption

(2) 修改application.yml,添加以下内容:

encrypt:
  key: foo  # 设置对称密钥
AI 代码解读

这样,代码就编写完成了。

测试

(1) 输入命令

curl http://localhost:8080/encrypt -d mysecret
AI 代码解读

返回851a6effab6619f43157a714061f4602be0131b73b56b0451a7e268c880daea3 。说明mysecret 被加密了。

(2) 输入命令

curl http://localhost:8080/decrypt -d 851a6effab6619f43157a714061f4602be0131b73b56b0451a7e268c880daea3
AI 代码解读

可返回mysecret ,说明能够正常解密。

存储加密的内容

加密后的内容,使用{cipher}密文 的形式存储。

测试

(1) 准备一个配置文件,命名为encryption.yml

spring:
  datasource:
    username: dbuser
    password: '{cipher}851a6effab6619f43157a714061f4602be0131b73b56b0451a7e268c880daea3'
AI 代码解读

并将其push到Git仓库https://git.oschina.net/itmuch/spring-cloud-config-repo。此处需注意spring.datasource.password上的单引号不能少。如果使用的是properties则无需使用单引号,例如:

spring.datasource.username=dbuser
spring.datasource.password={cipher}851a6effab6619f43157a714061f4602be0131b73b56b0451a7e268c880daea3
AI 代码解读

这是由yaml与properties的解析机制所决定的。

(2) 使用http://localhost:8080/encryption-default.yml 可获得以下结果:

profile: default
spring:
  datasource:
    password: mysecret
    username: dbuser
AI 代码解读

说明Config Server能够自动地为我们解密配置内容。

一些场景下,我们可能想要让Config Server直接返回密文本身,而并非解密后的内容,这时可设置spring.cloud.config.server.encrypt.enabled=false 。这时可由Config Client自行解密。

非对称加密

上文中,我们讨论的加密方式是对称加密,Spring Cloud同样支持非对称加密。

(1) 复制项目microservice-config-server ,将ArtifactId修改为microservice-config-server-encryption-rsa

(2) 创建一个Key Store,并将生成的文件复制到项目的classpath下。

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
AI 代码解读

(3) 在application.yml中添加以下内容:

encrypt:
  keyStore:
    location: classpath:/server.jks # jks文件的路径
    password: letmein               # storepass
    alias: mytestkey                # alias
    secret: changeme                # keypass
AI 代码解读

这样我们使用命令curl http://localhost:8080/encrypt -d mysecret ,将会得到以下结果:

AQB38UyNckYzW64rvsaIhy0OV4MUmS7krdHrw+VLUdqXJ4ZVdZL8/ouwSOAYM+6MSjKvzmkaU8Iv2cQ5
MWhlZhCrm0f0d2ubc1MH96KBHTix9AroajeTiofPwPoBnWfBo9cC4PU1vD+rcvAvwvdR5q7rYbFc4yut
4uJZRzpAXGgf680kAtb6tEtLx7c4/35PEaGXFWd2m8gn21vzWdvhbP6cdC9YlburL0Rq/0H1G+uEX99Z
VIWJ0hVn4rplLWPMLUGA2ZVEyVRorIRX/2z5MU7cVPtJ6X1JZDpU4GVz8/3rD5BnbVFTGo6DfBrEzJn5
8Bzjl6aqo9ca/3j42RHOoQDOHXGqRX/843RbPdvMqTZd0rTOBHTUrVG9E15sCajiLkw=
AI 代码解读

相对于对称加密,非对称加密的安全性更高,但对称加密相对方便。读者可按照需求自行选择。

拓展阅读

http://stackoverflow.com/questions/30131598/spring-cloud-config-server-where-to-set-encrypt-key-to-enable-encrypt-endpoin
https://juliomunoz.wordpress.com/2014/12/10/probando-spring-netflix-parte-1-spring-cloud-config-server/

本文链接: http://www.itmuch.com/spring-cloud/config-server-encrypt-decrypt/
**版权声明: **本博客由周立创作,采用 CC BY 3.0 CN 许可协议。可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。

目录
打赏
0
0
0
0
29
分享
相关文章
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
262 60
配置Nginx反向代理实现SSL加密访问的步骤是什么?
我们可以成功地配置 Nginx 反向代理实现 SSL 加密访问,为用户提供更安全、可靠的网络服务。同时,在实际应用中,还需要根据具体情况进行进一步的优化和调整,以满足不同的需求。SSL 加密是网络安全的重要保障,合理配置和维护是确保系统安全稳定运行的关键。
345 60
微服务(四)-config配置中心的配置加解密
微服务(四)-config配置中心的配置加解密
Docker中配置TLS加密的步骤
我们可以在 Docker 中成功配置 TLS 加密,增强 Docker 环境的安全性,保护容器之间以及与外界的通信安全。需要注意的是,在实际应用中,应根据具体情况进行更细致的配置和调整,确保符合安全要求。同时,定期更新证书和私钥,以保障安全性。
169 1
UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)
这篇文章介绍了在UniApp H5项目中处理跨域问题的两种方法:通过修改manifest.json文件配置h5设置,或在项目根目录创建vue.config.js文件进行代理配置,并提供了具体的配置代码示例。
UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
285 0
|
6月前
|
Vue3基础(19)___vite.config.js中配置路径别名
本文介绍了如何在Vue 3的Vite配置文件`vite.config.js`中设置路径别名,以及如何在页面中使用这些别名导入模块。
217 0
Vue3基础(19)___vite.config.js中配置路径别名
vite vue3 config配置
【10月更文挑战第5天】
204 0
【Azure API 管理】APIM 配置Validate-JWT策略,验证RS256非对称(公钥/私钥)加密的Token
【Azure API 管理】APIM 配置Validate-JWT策略,验证RS256非对称(公钥/私钥)加密的Token
【Azure 应用服务】App Service 通过配置web.config来添加请求返回的响应头(Response Header)
【Azure 应用服务】App Service 通过配置web.config来添加请求返回的响应头(Response Header)
113 0

热门文章

最新文章