陈同学
微服务
Accelerator
About
# 使用jasypt加密Spring Boot应用中的敏感配置 > [jasypt-spring-boot on github](https://github.com/ulisesbocchio/jasypt-spring-boot) 本文讲述了在Spring Boot/Spring Cloud应用中使用jasypt来加密properties。 ## jasypt 简介 详细信息直接看github文档即可,这里仅简单罗列一丢丢信息。 Jasypt为Spring Boot应用提供property sources的加密支持,可以加密的数据有: * system property * environment property * command line argument * application.properties * yaml properties * other custom property sources ##哪些是敏感信息? 由于很多应用使用 *配置文件 (eg:properties、yml)* 来存储配置信息,配置中经常会涉及到许多敏感信息。 举几个小例子: * 普通应用密码信息,如:DB、Rabbit、Redis等 * 特殊密码信息,如:Spring Cloud Config需要配置Git等VCS密码信息 * 第三方通讯凭证信息,如:调用第三方接口发送短信的通讯凭证信息 由于各业务场景不同,因此敏感信息的定义也不同。 ## 应用场景案例 这里以自有团队的Spring Cloud Config来举个例子。 * **场景:** 使用两个git repository来存储配置信息,一个存储生产环境配置,一个存储非生产环境所有配置。分两个的目的是控制权限,生产环境仅特定人员可见。 * **问题:** 由于VCS的账户密码存储在配置文件中,所以分两个git repo存储配置也是自欺欺人,可以直接根据配置文件中的VCS密码下载生产环境的配置信息。 * **解决:** 对VCS密码进行加密 **加密前的数据:** ```yaml spring: cloud: config: server: git: uri: https://example.domain.com/helloworld.git username: yourname password: yourpwd ``` **加密后的数据:** ```yaml spring: cloud: config: server: git: uri: https://example.domain.com/helloworld.git username: username password: ENC(DoyyHAMYaEyJBJHW496HiTT4VIazUYZo) ``` ## 如何使用jasypt > 参考 [jasypt](https://github.com/ulisesbocchio/jasypt-spring-boot) github文档最好,里面有更多信息,这里仅抛砖引玉,简单列举下使用步骤。 ### 引入jasypt-spring-boot-starter依赖 ```java <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> ``` ###配置加/解的密码 以配置在 *bootstrap.yml* 中为例: ```yaml jasypt: encryptor: password: JH8AS90jasH ``` 默认使用 **PBEWithMD5AndDES** 加密算法,只有 **jasypt.encryptor.password** 是必要配置。 ### 加密你的属性 假设需要加密DB密码,密码为123456 创建一个测试类,加密后得到的加密密码为:BsSPrDRNeU/Nb1v/GsHvZA== ```java @RunWith(SpringRunner.class) @SpringBootTest public class BlogApplicationTests { @Autowired StringEncryptor stringEncryptor; @Test public void test() { System.out.println(stringEncryptor.encrypt("123456")); } } ``` ### 配置加密后的属性 将加密后的属性值配置在配置文件中即可,**ENC** 是约定的关键字,在启动时会解析所有 **PropertySource** 中的加密属性。 ```properties spring.datasource.password=ENC(BsSPrDRNeU/Nb1v/GsHvZA==) ``` ## 小结 jasypt文档有更详细的介绍,支持多种配置方式甚至定制自己的Encryptor。 阅读本文的伙伴知道有这么回事即可,以后有使用场景时也算是个不错的选择。
本文由
cyj
创作,可自由转载、引用,但需署名作者且注明文章出处。
文章标题:
使用jasypt加密Spring Boot应用中的敏感配置
文章链接:
https://chenyongjun.vip/articles/59
扫码或搜索 cyjrun 关注微信公众号, 结伴学习, 一起努力