Spring Cloud Config 加密解密:保护敏感配置信息
在分布式系统中,数据库密码、API 密钥等敏感配置需要加密存储,避免明文泄露。Spring Cloud Config 提供了完善的加密解密机制,支持对称加密和非对称加密两种方式,确保敏感信息在传输和存储过程中的安全性。
加密解密的前提准备
Spring Cloud Config 的加密功能依赖 Java 加密扩展(JCE),需先确保环境配置正确:
下载 JCE:
对于 JDK 8 及以下版本,需手动下载 Java Cryptography Extension (JCE) Unlimited Files。JDK 9+ 已内置无限制强度的 JCE,无需额外配置。
安装 JCE:
将下载的 JCE 包中的local_policy.jar和US_export_policy.jar复制到$JAVA_HOME/jre/lib/security/目录,覆盖原有文件。
对称加密(Symmetric Encryption)
对称加密使用相同的密钥进行加密和解密,配置简单,适合中小规模系统。
1. 配置加密密钥
在配置中心(Config Server)的 bootstrap.yml 中指定加密密钥:
1 | encrypt: |
2. 使用加密端点
配置中心启动后,会自动暴露 /encrypt 和 /decrypt 端点,用于加密和解密:
(1)加密敏感信息
通过 POST 请求加密明文(如数据库密码):
1 | # 加密明文"db-pass-123" |
返回密文(示例):
1 | 851a6effab6619f43135a714061f4602be0251b73b56b0451a7e268c880daea3 |
(2)解密密文
通过 POST 请求解密密文:
1 | # 解密密文(使用上述返回的密文) |
返回明文:
1 | db-pass-123 |
3. 在配置文件中使用加密值
将加密后的密文用 {cipher} 前缀包裹,写入 Git 仓库的配置文件(如 application.yml):
1 | spring: |
注意:密文必须用单引号
'包裹,否则 YAML 解析器可能报错。
非对称加密(Asymmetric Encryption)
非对称加密使用公钥加密、私钥解密,安全性更高,适合大规模分布式系统。需通过 keytool 生成密钥库(KeyStore)。
1. 生成密钥库(JKS)
使用 JDK 自带的 keytool 工具生成 RSA 密钥对:
1 | # 生成密钥库(JKS格式) |
执行后会生成 server.jks 文件,将其复制到配置中心的 src/main/resources 目录(类路径下)。
2. 配置非对称加密
在配置中心的 bootstrap.yml 中配置密钥库信息:
1 | encrypt: |
3. 使用非对称加密
(1)获取公钥(可选)
如需在客户端手动加密,可通过配置中心获取公钥:
1 | curl http://localhost:7010/encrypt/public |
返回公钥(示例):
1 | { |
(2)加密和解密
非对称加密的端点使用方式与对称加密一致:
- 加密:
curl -X POST http://localhost:7010/encrypt -d "敏感信息" - 解密:
curl -X POST http://localhost:7010/decrypt -d "密文"
配置文件中使用密文的方式也相同(需加 {cipher} 前缀)。
客户端解密机制
客户端(微服务)无需配置加密密钥,只需确保能访问配置中心:
- 客户端启动时从配置中心拉取加密的配置;
- 配置中心自动解密后返回明文给客户端;
- 客户端直接使用解密后的配置(无需额外处理)。
注意:客户端不会获取到加密密钥,解密过程由配置中心完成,确保密钥安全。
生产环境注意事项
密钥管理:
- 对称加密的密钥(
encrypt.key)需严格保密,避免硬编码在配置文件中,可通过环境变量或密钥管理服务(如 Vault)注入。 - 非对称加密的密钥库(
server.jks)需设置复杂口令,并限制文件访问权限。
- 对称加密的密钥(
端点安全:
- 生产环境需为
/encrypt和/decrypt端点添加认证(如结合 Spring Security),避免未授权访问。
1
2
3
4
5
6
7
8
9
10
11# 仅允许管理员角色访问加密端点
management:
endpoints:
web:
exposure:
include: encrypt,decrypt
endpoint:
encrypt:
roles: ADMIN
decrypt:
roles: ADMIN- 生产环境需为
性能考量:
- 非对称加密的性能低于对称加密,建议仅对核心敏感信息(如数据库密码)使用非对称加密,其他信息可使用对称加密。
密钥轮换:
- 定期轮换密钥(尤其是对称加密密钥),避免长期使用同一密钥导致泄露风险。
总结
Spring Cloud Config 提供的加密解密功能有效保护了敏感配置信息,对称加密适合简单场景,非对称加密适合高安全性需求。实际应用中需结合密钥管理、端点安全和定期轮换策略,构建完整的敏感信息保护体系
v1.3.10