使用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 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

Centos6.5安装配置nginx

出现如下代码: nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is...

11330
来自专栏Debian社区

Debian Linux下安装配置 Pure-ftpd

PureFTPd 是一款专注于程序健壮和软件安全的免费FTP服务器软件(基于BSD License)。其可以在多种类Unix操作系统中编译运行,包括Linux、...

21920
来自专栏云计算教程系列

如何在Ubuntu 14.04上安装Mailpile

在本教程中,我们将在Ubuntu 14.04上安装Mailpile,一个快速,安全,漂亮的Webmail客户端。

15900
来自专栏dalaoyang

Linux生成私钥和公钥免密连接

有时需要从服务器A免密连接到服务器B,这时需要在服务器A生成私钥和公钥,大致过程其实就2步。

29310
来自专栏cs

加密软件--PGP安装教程。

PGP(Pretty Good Privacy)是一个基于RSA公钥加密体系的邮件加密软件。 ---- pgp--百度百科 加密软件--百度百科。 安装教程...

39790
来自专栏SpiritLing

自己写的加密网页,与百度网盘私密很相似,需要密码才能访问(原创)

题记: 马上就要招聘了,所以我打算放置简历在自己的网页上,但是又不想给除了招聘的人,或者我指定的人外看,所以我需要对网页页面加密 我找了许多资料,查看了许多所谓...

57650
来自专栏增长技术

Android应用apk的程序签名

在调试应用程序时,Android SDK工具会自动对应用程序进行了签名。Eclipse的ADT插件和Ant编译工具都提供了两种签名模式——Debug模式和Rel...

32710
来自专栏Java编程技术

Hystrix熔断机制原理剖析

在分布式系统架构中多个系统之间通常是通过远程RPC调用进行通信,也就是 A 系统调用 B 系统服务,B 系统调用 C 系统的服务。当尾部应用 C 发生故障而系统...

16810
来自专栏康怀帅的专栏

Let's Encrypt SSL 证书配置详解

首先确保你的网站是可以访问的( nginx 配置好 80 端口),申请证书时 let's Encrypt 会访问网站上的某一文件来确认网站归属(当然也可以通过 ...

51740
来自专栏云知识学习

Tomcat开启SSL 8443端口的方法

TOMCAT_HOME:/usr/local/tomcat7,安装方法参考:windows和linux 下将tomcat注册为服务

628110

扫码关注云+社区

领取腾讯云代金券