- 使用Jasypt加密SpringBoot项目的application们
- application里有什么
- 为什么要加密
- 怎么加密
- 加密策略
该文章主要从为什么要对SpringBoot的application中的敏感信息加密,到如何使用Jasypt-Spring-Boot项目对application*加密,以及加密策略的建议。记录一下本码农对application加密的一些心得体会。
application里有什么要知道为什么要对application加密,首先要清楚application有什么。用过SpringBoot的友农肯定明白,里面整个系统的一些配置信息,系统在启动的时候会加载这些配置,诸如数据库的连接信息、redis的配置信息、日志的输出配置等等。这些配置信息有些共同的特点,他们都是全局的(整个系统都用这一份)、静态的(程序跑起来之后旧不会改变了)、环境相关的(不同环境下某些值需要改变)。当然这些东西直接写在程序中也是可以的,但是在更换环境的时候还要改代码,这是我们不愿意看见的,因此这个application的出现必不可少的,而且里面记录了很多密码、密钥等敏感信息。
为什么要加密如上所述,application中记录这诸如数据库密码、程序密钥等关键信息,这些信息如果因为系统漏洞等原因被黑客得到,损失将无法估量。
怎么加密本文使用Jasypt-Spring-Boot进行加密,Jasypt-Spring-Boot的使用非常简单。
- 引入依赖
- 如果你的SpringBoot项目使用了@SpringBootApplication 或 @EnableAutoConfiguration,像以下这样:
@SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication .class, args); } }使用以下依赖com.github.ulisesbocchio jasypt-spring-boot-starter 3.0.4 - 如果不是,则使用下面的依赖
在程序入口增加注解:com.github.ulisesbocchio jasypt-spring-boot 3.0.4 @Configuration @EnableEncryptableProperties public class MyApplication { }
- 如果你的SpringBoot项目使用了@SpringBootApplication 或 @EnableAutoConfiguration,像以下这样:
- 接下来对关键信息进行加密
- 将配置文件中需要加密的内容使用以下符号标注上
spring: datasource: url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root password: DEC(123456) #这里需要将密码123456进行加密,使用DEC()将密码括起来 - 引入Jasypt插件
com.github.ulisesbocchio jasypt-maven-plugin 3.0.4 - 执行以下命令对 srcmainresourcesapplication.properties 进行加密
mvn jasypt:encrypt -Djasypt.encryptor.password="the password"
- 如果配置文件不是application.properties,则使用以下命令指定文件名进行加密
mvn jasypt:encrypt -Djasypt.plugin.path="file:src/main/resources/application.yml" -Djasypt.encryptor.password="the password"
注:Windows系统下用CMD执行命令会导致整个文件变为GBK编码,使用BASH或者IDEA自带的命令来处理比较靠谱 - 这里是加密后的结果,原来的DEC变成了ENC,代表已经加密完成。
spring: datasource: url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root password: ENC(STxPwhemkd3r5ugshWeRywkH//rGhCq4KjhIMm1xZoc5lW07sO6/nfh684Q4r3kQ)
- 将配置文件中需要加密的内容使用以下符号标注上
- 到这里要准备启动应用了
- 既然密码已经被加密了,那么就需要有一个地方告诉程序解密的密钥是什么,因此在application中再增加一个参数,记录加密的密钥
jasypt: encryptor: password: the password # 这个地方就不要加密了,这里加密了谁都不知道密码是啥了
- 这个时候启动应用,会发现程序正常启动了。如果启动失败了那说明配置还有点问题,按照以上步骤重试一遍。
- 既然密码已经被加密了,那么就需要有一个地方告诉程序解密的密钥是什么,因此在application中再增加一个参数,记录加密的密钥
- 既然怕application文件被黑客窃取到,那么将密钥明文写在application中,那等于没有加密
- 这里可以在启动SpringBoot应用的时候将密钥加入到启动命令中如下所示:
java -jar application.jar --jasypt.encryptor.password=YourPassword



