Appearance
Spring Cloud 敏感配置信息加密处理
在 Spring Cloud
微服务中,通常很多信息都是在 application.yml
或 Nacos Server
中直接明文配置,比如数据库、redis连接信息等。其中也会涉及密码等敏感信息,直接明文方式配置是很不安全的。
所以需要对敏感信息进行加密,防止密码泄漏。 Jasypt
这个库就是为了解决这个问题,实现了 Spring Cloud
配置的自动加密解密。
源码地址:https://gitee.com/mirrors/jasypt-spring-boot
启用配置加解密
添加 jasypt-spring-boot-starter
依赖
在项目 pom.xml
文件中添加如下依赖:
xml
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
配置 jasypt
信息
在 Spring
配置文件中配置 Jasypt
相关信息,如下:
yml
jasypt:
encryptor:
# 加密算法
algorithm: PBEWITHHMACSHA512ANDAES_256
# 加密使用的盐,生产环境时,使用启动参数传递密钥,避免密钥与密码同时在配置文件中泄漏
password: jaspyt_password
加解密测试
java
@SpringBootTest
@RunWith(SpringRunner.class)
public class JasyptTest {
@Autowired
private StringEncryptor stringEncryptor;
/**
* 加密解密测试
*/
@Test
public void jasyptTest() {
// 加密
System.out.println(stringEncryptor.encrypt("root"));
// JSrINYe4IBotHndGjX1hnmY3mtPNUJlXjP12cx1+pHqUz2FNXGPu3Frnajh3QCXg
// 解密
System.out.println(stringEncryptor.decrypt("JSrINYe4IBotHndGjX1hnmY3mtPNUJlXjP12cx1+pHqUz2FNXGPu3Frnajh3QCXg"));
// root
}
/**
* 手动测试
*/
@Test
public void test() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword("jaspyt_password");
config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
System.out.println(encryptor.encrypt("root"));
// JSrINYe4IBotHndGjX1hnmY3mtPNUJlXjP12cx1+pHqUz2FNXGPu3Frnajh3QCXg
}
}
Spring 配置中使用加密属性
通过 application.yml
或 Nacos Server
的配置中,可以使用 ENC()
包裹加密后的字符串代替密码等原始参数值使用,如下:
yaml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.10.31/mp
username: root
# 使用ENC()包裹,标识为加密之后的,否则无法解密,会报错
password: ENC(R2H69h1aEgJ3EDPLXAVQ5CxZJWtl8EvqIJUtlATRt6om4w46/J+blu2JAvkR7Yvp)
生成环境启动
生产环境密钥作为启动参数:
shell
java -jar -Djasypt.encryptor.password=your-secret
变量使用时,和普通参数值相同,无需做特殊处理