springboot整合jasypt加密yml配置文件
一、前言
通常项目配置文件中的账号信息如下,都是直接暴露出来的,如果源码不小心泄露将会引起一系列安全问题
二、解决
- 通过配置中心动态加载配置文件
- 通过jasypt加密组件进行加密/解密
三、实现
1、pom.xml中引入依赖
<!-- jasypt加密组件: https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter --> <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.1.0</version> </dependency>
2、application.yml中配置加密密钥
# 配置加密密钥 jasypt: encryptor: password: zhong # 这里密钥修改 随意
3、jasypt加密/解密测试类
public class JasyptTest { @Test public void test() { // 对应配置文件中配置的加密密钥 System.setProperty("jasypt.encryptor.password", "zhong"); StringEncryptor stringEncryptor = new DefaultLazyEncryptor(new StandardEnvironment()); System.out.println("加密: " + stringEncryptor.encrypt("root")); System.out.println("解密: " + stringEncryptor.decrypt("上面加密的字符串")); } }
4、修改yml配置文件账号信息为加密方式
spring: application: name: scheduled datasource: driver-class-name: com.mysql.cj.jdbc.Driver name: defaultDataSource password: ENC(uBxFfL0wQd9sL9CLV1zZbg==) url: jdbc:mysql://127.0.0.1:3306/aj?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: ENC(BkmP68GGfNiTdQfZRXwoqA==) jasypt: encryptor: password: zhong
四、扩展知识
自定义加密标识
jasypt默认使用ENC()来标识加密,加载配置的时候检测到ENC()即会自动解密 下面我们来尝试自定义一个加密标识,JAVA_ABE()
application.yml中新增如下配置:
jasypt: encryptor: property: prefix: JAVA_ABE( # 加密前缀 suffix: ) # 加密后缀 password: zhong # 加密密钥
修改配置如下:
spring: application: name: scheduled datasource: driver-class-name: com.mysql.cj.jdbc.Driver name: defaultDataSource password: JAVA_ABE(uBxFfL0wQd9sL9CLV1zZbg==) url: jdbc:mysql://127.0.0.1:3306/aj?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: JAVA_ABE(BkmP68GGfNiTdQfZRXwoqA==) jasypt: encryptor: password: zhong
让加密更安全
虽然经过上文的加密,涉及信息安全的配置项肯定会变得更安全,这个是毫无疑问的!
但是假如配置文件里的自定义加密密钥jasypt.encryptor.password=zhong泄露了,那我们的加密字段也还是有可能被别人解密(毕竟还是写在了配置文件中),为此,有几项工作可以让加密变得更加安全。
方式一:直接作为程序启动时的命令行参数来带入
java -jar scheduled.jar --jasypt.encryptor.password=zhong
方式二:直接作为程序启动时的应用环境变量来带入
java -Djasypt.encryptor.password=zhong -jar scheduled.jar
方式三:甚至可以作为系统环境变量的方式来带入
jasypt.encryptor.password=${JASYPT_ENCRYPTOR_PASSWORD:}
这样就安全多了
PS:加密密钥不要写在配置文件中 安全起见!
上一篇:
JS实现多线程数据分片下载