1. 背景
为防止黑客黑掉配置中心获取关键配置信息,例如数据库账号密码。因此配置中心中的配置文件中有敏感信息时不能以明文的方式配置,将敏感信息加密,且密钥必须与配置中心隔离,防止黑客黑掉配置中心的同时拿到密钥,从而控制了黑客的爆炸半径。
2. 引入依赖
使用【jasypt】:
Jaysypt 版本请根据自行项目情况配置,本文以 3.0.5 为例
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.5</version></dependency>
复制代码
3. 配置 jasypt
jasypt 配置可作为 SpringBoot 应用的 yml 配置的一部分,但如果按照公司规定开发人员无权限知道特定环境敏感配置,那么可将权限收拢于运维,将特定环境的 jasypt 配置放置应用的启动命令中或者使用 k8s 的 Secret 管理。
jasypt: encryptor: # 秘钥:自定义 password: Nacol174$ # 加密算法 algorithm: PBEWithMD5AndDES
复制代码
4. 敏感信息加密
StringEncryp 会根据配置的加密策略加密敏感信息:
@Slf4j@RefreshScope@RestController@RequestMapping("/encryp")public class JasyptApi {
@Autowired private StringEncryptor encryptor;
/** * @Author Nacol(姚秋实) * @Title 字符串加密 */ @GetMapping("/enc") public String enc(@Param("content") String content) { String enc = "ENC(" + encryptor.encrypt(content) + ")"; log.info("{} → {}", content, enc); return enc; }
}
复制代码
输出【root】和【12356】加密后的结果:
root → ENC(gWOlqzdPyq2pWxZ+A1S6vfuixDSRPEN11j3HF0db4et1qg8SvEES/pVKzehrAxU7)123456 → ENC(HCHr/nQWahNYn1Vbk7kHgdCssH2SwEp4hSXJ4oG85l/NLEf9hVYQ2+Ck8EoGsyX3)
复制代码
5. 配置中心脱敏
spring: application: config-enc datasource: url: jdbc:p6spy:mysql://127.0.0.1:3306/xxxxxxxx # 配置加密的账号 username: ENC(ucIPdC+D7yYmURTbPe70Q9Mk0GeuoDbK9GnNJdLjqVyT0F6e16XR6dmeB6TyX8iZ) # 配置加密的密码 password: ENC(y9xxLfgn4nouIfXi1qJ6w02jX+F+9ub4G2ELzJdx8aj8w8MXBu2dWQvJ1azmmjJ0)
复制代码
6. 验证-应用解密
通过 @Value 或者 @ConfigurationProperties 的配置类均可直接获取解密后的值,如下:
@Value("${spring.datasource.username}")private String username;
@Value("${spring.datasource.password}")private String password;
/** * @Author Nacol(姚秋实) * @Date 2023/12/2 * @Title 获取加密字段 */@GetMapping("/print-dynamic-config")public void printDynamicConfig() { log.info("username: {}, password: {}", username, password);}
复制代码
输出:
username: root, password 123456
复制代码
7. 验证-动态刷新
将 【root → nacol】 以及 【123456 → 888888】;
nacol → ENC(ktMuvifstjuxP8MnQfSFeXuT55GCbQjQVKOm/QmAscjrqAnM/5URaXdXiiE1r/9e)888888 → ENC(ob4soYVtSCHM3bzXsSKAuo//2apo1AlGYge9tMjV/VjDDTq3rtJLwQ7/pCV0ILzM)
复制代码
修改 nacos 配置中心对应配置;
重新获取加密字段,结果如下:
username: nacolpassword: 888888
复制代码
8. 总结
使用 jasypt 对 Nacos 配置中心的敏感信息加密,支持应用的自动解密、动态刷新和密钥隔离。
评论