前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用jasypt加密Spring Boot应用中的敏感配置

使用jasypt加密Spring Boot应用中的敏感配置

原创
作者头像
码代码的陈同学
修改2018-07-15 13:53:00
1.9K0
修改2018-07-15 13:53:00
举报

欢迎访问 陈同学博客原文 jasypt-spring-boot on github

本文讲述了在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密码进行加密

加密前的数据:

代码语言:txt
复制
spring:
  cloud:
    config:
      server:
        git:
          uri: https://example.domain.com/helloworld.git
          username: yourname
          password: yourpwd

加密后的数据:

代码语言:txt
复制
spring:
  cloud:
    config:
      server:
        git:
          uri: https://example.domain.com/helloworld.git
          username: username
          password: ENC(DoyyHAMYaEyJBJHW496HiTT4VIazUYZo)

如何使用jasypt

参考 jasypt github文档最好,里面有更多信息,这里仅抛砖引玉,简单列举下使用步骤。

引入jasypt-spring-boot-starter依赖

代码语言:txt
复制
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>

###配置加/解的密码

以配置在 bootstrap.yml 中为例:

代码语言:txt
复制
jasypt:
  encryptor:
    password: JH8AS90jasH

默认使用 PBEWithMD5AndDES 加密算法,只有 jasypt.encryptor.password 是必要配置。

加密你的属性

假设需要加密DB密码,密码为123456

创建一个测试类,加密后得到的加密密码为:BsSPrDRNeU/Nb1v/GsHvZA==

代码语言:txt
复制
@RunWith(SpringRunner.class)
@SpringBootTest
public class BlogApplicationTests {

    @Autowired
    StringEncryptor stringEncryptor;

    @Test
    public void test() {
        System.out.println(stringEncryptor.encrypt("123456"));
    }
}

配置加密后的属性

将加密后的属性值配置在配置文件中即可,ENC 是约定的关键字,在启动时会解析所有 PropertySource 中的加密属性。

代码语言:txt
复制
spring.datasource.password=ENC(BsSPrDRNeU/Nb1v/GsHvZA==)

小结

jasypt文档有更详细的介绍,支持多种配置方式甚至定制自己的Encryptor。

阅读本文的伙伴知道有这么回事即可,以后有使用场景时也算是个不错的选择。


欢迎关注陈同学的公众号,一起学习,一起成长

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • jasypt 简介
  • 应用场景案例
  • 如何使用jasypt
    • 引入jasypt-spring-boot-starter依赖
      • 加密你的属性
        • 配置加密后的属性
        • 小结
        相关产品与服务
        云数据库 Redis
        腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档