SpringBoot工程配置文件中字符串加密

283 阅读2分钟

一、问题背景

基于安全考虑,公司要求对MySQL、Redis、sftp等程序中用到的账户/密码数据加密,项目SpringBoot工程,以上内容均在yml配置文件中,故需实现SpringBoot配置文件中的明文字符串加密。

二、解决方案

使用 jasypt 进行配置文件加密,jasypt 是一个简单易用的加解密Java库,可以快速集成到 SpringBoot 项目中,并提供了自动配置,使用非常简单。

jasypt 的实现原理是实现了 ApplicationContextInitializer 接口,重写了获取环境变量的方法,在容器初始化时对配置文件中的属性进行判断,若包含前后缀 ENC() 表示是加密属性值,则进行解密并返回。(在 GitHub 上有更详细的使用说明)。

三、处理过程

  1. pom文件引入依赖

maven工程的pom文件中引入jasypt依赖,并install到本地。

<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>
  1. 配置加密密钥

在主配置文件类中 ,添加秘钥配置:

#自定义配置文件加解密秘钥
jasypt:
  encryptor:
    password: bbbb

注意:最好将密钥或私钥作为环境变量参数在执行应用的启动命令时传入,而不是放在配置文件中。

  1. 配置文件中明文字符串加密
  • 打开本地仓中jasypt依赖所在目录:** \repository\org\jasypt\jasypt\1.9.2
  • 执行如下命令生成密文字符串 :
#传入待加密明文字符串[aaaa]、加解密秘钥[bbbb]、调用jasypt加密得到密文字符串
java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=aaaa password=bbbb algorithm=PBEWithMD5AndDES  >1.txt
  • 从输出文件【1.txt】中OUTPUT下获取密文字符串【toBXJhUASWD+Np2mefM0Zw==】
----ENVIRONMENT-----------------
Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 25.202-b08 
----ARGUMENTS-------------------
algorithm: PBEWithMD5AndDES
input: aaaa
password: bbbb
----OUTPUT----------------------
toBXJhUASWD+Np2mefM0Zw==
  • 最后在配置文件中将明文密码 aaaa 替换为密文 ENC(toBXJhUASWD+Np2mefM0Zw==)
  1. 编译并启动验证

重启应用后验证是否生效