专栏首页码代码的陈同学使用jasypt加密Spring Boot应用中的敏感配置
原创

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

欢迎访问 陈同学博客原文 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密码进行加密

加密前的数据:

spring:
  cloud:
    config:
      server:
        git:
          uri: https://example.domain.com/helloworld.git
          username: yourname
          password: yourpwd

加密后的数据:

spring:
  cloud:
    config:
      server:
        git:
          uri: https://example.domain.com/helloworld.git
          username: username
          password: ENC(DoyyHAMYaEyJBJHW496HiTT4VIazUYZo)

如何使用jasypt

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

引入jasypt-spring-boot-starter依赖

<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>

###配置加/解的密码

以配置在 bootstrap.yml 中为例:

jasypt:
  encryptor:
    password: JH8AS90jasH

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

加密你的属性

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

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

@RunWith(SpringRunner.class)
@SpringBootTest
public class BlogApplicationTests {

    @Autowired
    StringEncryptor stringEncryptor;

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

配置加密后的属性

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

spring.datasource.password=ENC(BsSPrDRNeU/Nb1v/GsHvZA==)

小结

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

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


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

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Mysql插入2.6亿条垃圾数据后会发生什么?

    今天下午业务人员发现某功能无响应(该功能一天前上线),技术人员初步诊断后发现是某个DB不太正常,DB为Mysql 5.7.18。

    码代码的陈同学
  • Mysql thread 与 OS thread

    本文作为 Mysql插入2.6亿条垃圾数据后会发生什么? 、手工重现Mysql插入的”2.6亿”垃圾数据 的续篇,初始目的是想看看kill掉执行中的事务对应的o...

    码代码的陈同学
  • 上传Maven组件时不断重试&Broken pipe

    在云服务器(公网)上装了Nexus作为Maven私服,Nexus使用Nginx代理

    码代码的陈同学
  • 一步步教你利用Github开源项目实现网络爬虫:以抓取证券日报新闻为例

    在学习编程的过程中,初学者(特别是想转行互联网的来自其它专业的初学者)往往因为缺乏实际项目的操作而陷入基础学习的环境中无法自拔,在学习Python的过程中,笔者...

    Python中文社区
  • SeleniumWebDriver之FindElement和FindElements

    与Web页面的交互需要用户定位Web元素。FindElement命令用于唯一地标识页面中的(单个)Web元素。然而,FindElements命令用于唯一地标识页...

    软测小生
  • 疫情下AI获客正当时:销售转化率超3倍,写内容「秒变千篇」

    疫情「黑天鹅」来袭,让大部分公司的市场、销售部门难以正常开展业务,更别提线下拜访客户,上半年业绩也或将遭受严重损失。

    机器之心
  • OSPF 路由协议配置

    规则一:当area id为0,则说明area 0 为骨干区域 规则二:非骨干区域必须围绕着骨干区域而搭建 规则三:骨干区域不能被分隔

    cn0sec
  • Facebook不让美国,英国和澳大利亚"走后门"

    Facebook在周一拒绝了美国,英国和澳大利亚的要求。要求提出需要一个“后门”功能来通向端到端加密的Messenger应用,以协助执法机构打击犯罪和恐怖主义。

    shellmik
  • Merit技术人员价值管理系统——完善编辑结构

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

    hotqin888
  • 基于知识蒸馏的BERT模型压缩

    在过去一年里,语言模型的研究有了许多突破性的进展, 比如GPT用来生成的句子足够以假乱真[1];BERT, XLNet, RoBERTa [2,3,4]等等作为...

    大数据文摘

扫码关注云+社区

领取腾讯云代金券