SpringBoot集成jasypt,加密yml配置文件
最新项目安全检测,发现配置文件中数据库密码,redis密码仍处理明文状态
一、pom配置
java
<!-- 配置文件yml加密 -->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
二、生成密文代码
仅作为生成密文的工具类
java
package com;
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.EnvironmentPBEConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest
@RunWith(SpringRunner.class)
public class JasyptUtil {
private final static String SECRECT = "1234qwer"; //秘钥
private final static String ALGORITHM = "PBEWithMD5AndDES"; //加密算法
@Test
public void testEncrypt() throws Exception {
System.out.println("密文密码:" + encrypt("myPassword"));
}
private String encrypt(String text){
StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
EnvironmentPBEConfig config = new EnvironmentPBEConfig();
config.setAlgorithm(ALGORITHM);
config.setPassword(SECRECT);
standardPBEStringEncryptor.setConfig(config);
return standardPBEStringEncryptor.encrypt(text);
}
public String decrypt(String text) {
StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
EnvironmentPBEConfig config = new EnvironmentPBEConfig();
config.setAlgorithm(ALGORITHM);
config.setPassword(SECRECT);
standardPBEStringEncryptor.setConfig(config);
return standardPBEStringEncryptor.decrypt(text);
}
}
三、配置
3.1、yml加密配置
(jasypt配置一定要放最上面)
java
#加密配置
jasypt:
encryptor:
password: 1234qwer # 秘钥
algorithm: PBEWithMD5AndDES # 加密算法
iv-generator-classname: org.jasypt.iv.NoIvGenerator
3.2、密文配置
使用工具类加密之后的密文,直接放在配置文件中,使用 ENC()
3.3、启动配置
有的说法还需要在启动类做一下配置,我这边并没有配置,也可直接使用。
如无法启动,可在启动类配置@EnableEncryptableProperties
3.4、部署配置
开发过程中,将秘钥直接放在yml中可以,但是发布到生产之后,这样放的话,那跟明文也没有什么区别了。
所以发布的时候,password 的配置空着即可。通过jar包的启动命令,来设置秘钥。如下:
java
nohup java -jar -Djasypt.encryptor.password='1234qwer' /app/web.jar --server.port=8080 --spring.config.location=/app/web.yml >> /app/web.out 2>&1 &
四、遇到的一些坑
1、jasypt的配置文件要放在ENC()密文配置的上面。
2、版本需要匹配
3、启动命令秘钥需要加'
报错:Failed to bind properties under 'spring.datasource.password' to java.lang.String
参考:https://blog.csdn.net/qq_38254635/article/details/132027639