spring boot配置文件中配置项加解密
本文介绍了使用Jasypt加密Spring Boot配置文件的方法,以保护敏感信息安全。主要内容包括:1) 引入jasypt-spring-boot-starter依赖;2) 编写测试类生成加密字符串,提供加密解密方法;3) 在开发环境配置文件中设置加密密钥;4) 将加密内容用ENC()包裹后放入生产环境配置文件;5) 部署时通过JVM参数或环境变量传递解密密钥。这种方法有效防止配置文件泄露导致的
场景描述

比如yaml配置文件中数据库连接,或者其他的关键配置项,用明文直接写,一旦配置文件代码被外泄了,那就存在很大的风险。
为了安全期间,使用Jasypt对配置文件的值进行加密和解密操作,保证配置参数的安全性。
实战操作
1.pom.xml引入依赖
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
2.生成加密字符串
加密的方法,需要自己写个测试类来生成一下,下面是已经写好的测试方法:
DemoApplicationTests.java
import org.jasypt.encryption.StringEncryptor;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
/**
* 明文密码加密工具
*/
@SpringBootTest
class DemoApplicationTests {
@Autowired
private StringEncryptor encryptor;
/**
* 加密
* 1.再使用前应该先将sa-base/src/main/resources/dev/sa-base.yaml文件中下方的配置文件放开,
* (注:不用时将这几个参数注释掉,为了安全性我们的jasypt使用JVM参数的方式进行传递jasypt密码)
* #jasypt:
* # encryptor:
* # password: 加密强密码
* 2.将value的值替换为需要加密的值
* 3.执行单元测试
* 4.获取到加密字符串后,将原本的明文密码替换为:ENC(加密字符串)
*/
@Test
void encrypt() {
//替换成自己需要加密的字符
String value = "明文字符串";
System.out.println(encryptor.encrypt(value));
}
/**
* 解密
*/
@Test
void decrypt() {
// 替换为需要解密的密文(不需要包含 ENC() 包裹)
String cipherText = "密文字符串";
try {
String plain = encryptor.decrypt(cipherText);
System.out.println(plain);
} catch (Exception e) {
System.err.println("解密失败,请确认 Jasypt 口令与算法一致:" + e.getMessage());
throw e;
}
}
}
还需要在当前运行的环境(dev)的配置文件中添加一段配置,用于定义加密的密钥,配置如下:

# yaml配置文件加密/解密的密钥
jasypt:
encryptor:
password: 123456
这段配置放到开发环境的配置文件中,因为是在开发环境中,先把明文的内容,调用测试类来生成密文的内容。最后放到生产环境的配置文件中。
上面配置和Java测试类创建好之后,启动项目,调用加密的测试方法:

控制台会输出加密后的密文。

3.在生产配置文件中放入密文
把密文放到生产配置文件中,如下图:

注意:密文字符串,需要用ENC()包起来,代表这是用Jasypt算法进行加密后的内容。
4.版本发布
在版本发布时,需要配置参数,让spring boot自动识别到密文对应的明文,只有这样,系统才能正常运行。
如果是用java -jar 命令启动应用的情况,使用java -jar启动时直接在最后添加
-Djasypt.encryptor.password=你的口令
例如:java -jar myapp.jar -Djasypt.encryptor.password=123456
如果是linux的服务方式(systemd)启动应用,那么服务的配置文件中,添加配置:
Environment="JASYPT_ENCRYPTOR_PASSWORD=密钥"

配置完成后,启动项目,自动就会对加密字符串进行解密,识别到真实的配置参数。
更多推荐
所有评论(0)