SpringBoot 使用 jasypt 对配置项进行加密
为什么要对配置文件进行加密
像这样将项目的数据库密码、redis密码等直接写在项目中会有潜在的风险,比如项目源码泄漏,员工一不小心将公司源码上传到公有仓库,导致公司数据库密码泄漏。这时候对配置文件的关键信息进行加密就变得非常有必要了
jasypt 介绍
jasypt 是一个开源的工具包,可以很方便的对 SpringBoot 配置文件中的配置项进行加密,保护重要数据,下面讲解一下 jasypt 的使用
jasypt 使用
引入依赖
生成加密字符串
既然需要对关键配置信息进行加密,就需要获取加密后的字符串,可以使用以下三种方式获取加密字符串
通过 api 获取
输出信息为:
执行 jar 获取
如果你引入了jasypt-spring-boot-starter
依赖,可以在本地maven
仓库的org/jasypt/jasypt/1.9.3
路径下找到jasypt-1.9.3.jar
这个 jar 包,可以直接使用这个 jar 对数据进行加密
输出信息为:
OUTPUT 下面的就是加密后的字符串,这里加密后的字符串与通过 api 获取的字符串不同,是因为PBEWithMD5AndDES 算法每次的加密结果都不一样,对加密后的数据进行解密,还是能解密出原始数据的
maven 插件方式生成加密字符串
添加 jasypt-maven-plugin
用DEC()
包裹需要加密的字符
执行命令
当看到BUILD SUCCESS
表示执行成功,再看application.yml
文件,发现用DEC()
包裹的配置已经成功加密了,并且前缀由DEC
变成ENC
了
验证
到这里就已经完成对关键配置的加密过程,下面写一个简单的示例验证加密后的数据是否能准确解密
运行项目,发现控制台报错如下:
记得前面加密时用到的密钥吗ADUMDFUOV7834*
,解密的时候同样需要提供密钥才能正常解密,我们可以在 application.yml 中加入如下配置
重新运行程序,浏览器访问localhost:8080/getDatabaseInfo
,接口返回
证明jasypt
在加载配置的时候,会自动完成配置的解密过程,对加密后的配置进行解密
线上使用
可以看到,使用jasypt
十分的方便,只需要引入依赖,对需要的配置项进行加密即可,jasypt
会自动的完成解密过程
但回到开头,我们加密配置项的目的是为了防止在配置文件泄漏的时候,把配置信息一起泄漏出去。配置我们是加密了,但密钥还是保存在配置文件中,别人还是能拿到密钥在解密出配置信息,这就相当于我们把门给锁了,但是钥匙还是插在锁上,所以需要将配置跟密钥分开存储
通过启动命令将密钥传给应用
通过环境变量的方式
jasypt项目地址:https://github.com/ulisesbocchio/jasypt-spring-boot
扫码关注我
一起学习,一起进步
版权声明: 本文为 InfoQ 作者【hungxy】的原创文章。
原文链接:【http://xie.infoq.cn/article/5cc0e4e3e189715df487843f4】。文章转载请联系作者。
评论