在SpringBoot Project中,会将一些敏感信息配置到application.yml/application.properties配置文件中(同样适用于Spring Cloud的各个微服务其实(微服务实例)本质就是一个SpringBoot
),例如数据库的用户名和密码、Redis的密码等。为了保证敏感信息的安全,我们需要将此类数据进行加密配置。
Jasypt方案
Jasypt: Java simplified encryption
以下实践在JDK21、SpringBoot3.3.0下成功验证,若你的JDK和SpringBoot版本有所差异,可能需要调整一些细节
pom.xml
引入依赖
<!-- https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter -->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
加密你的敏感信息
public class TmpUtil {
public static void main(String[] args) {
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
//加密所需的秘钥(salt),解密敏感信息仍旧需要改值
textEncryptor.setPassword("ashe");
//要加密的敏感信息
String url = textEncryptor.encrypt("jdbc:mysql://${host}/${port}?serverTimezone=Asia/Shanghai");
String username = textEncryptor.encrypt("username");
String password = textEncryptor.encrypt("password");
String driver = textEncryptor.encrypt("com.mysql.cj.jdbc.Driver");
System.out.println("ENC("+url+")");
System.out.println("ENC("+username+")");
System.out.println("ENC("+password+")");
System.out.println("ENC("+driver+")");
System.out.println(textEncryptor.decrypt(username));
System.out.println(textEncryptor.decrypt(password));
}
}
application.yml填写加密后的密文
spring:
datasource:
url: ENC(xxxx)
username: ENC(xxxx)
password: ENC(xxxx)
driver-class-name: ENC(xxxx)
#jasypt:
# encryptor:
# password: ashe # 替换为你自己的密钥
# iv-generator-classname: org.jasypt.iv.NoIvGenerator
# algorithm: PBEWithMD5AndDES
Jasypt库所使用的默认加密算法为PBEWithMD5AndDES,其需要解密的内容需要用ENC()包裹(你可以自定义选择其他加密算法),如果在配置文件中直接展示你的秘钥,那么密文将很容易被解密出原文,因此一般不建议在配置文件中展示,而是通过启动脚本的方式来告诉Jasypt秘钥值,用以解密密文。
IDEA中本地启动设置VM Options
-Djasypt.encryptor.password=ashe -Djasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator -Djasypt.encryptor.algorithm=PBEWithMD5AndDES
-Djasypt.encryptor.password=ashe -Djasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator -Djasypt.encryptor.algorithm=PBEWithMD5AndDES
Linux中的启动脚本
#!/bin/bash
# Start the application with the Jasypt encryptor password (replace with your actual start command)
java -Djasypt.encryptor.password=ashe -Djasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator -Djasypt.encryptor.algorithm=PBEWithMD5AndDES -jar your-application.jar
较低版本的jasypt似乎不需要显式指定iv-generator-classname和algorithm
其他方案
- Druid方案
- Spring Cloud Vault 加密
标签:ENC,加密,SpringBoot,配置文件,encryptor,iv,textEncryptor,password,Djasypt From: https://www.cnblogs.com/ashet/p/18239074