SpringBoot如何解决yml明文密码问题
日常使用过程中,使用明文密码完全没问题,但是到了企业项目中,往往需要进行安全扫描,被安全扫描组扫到后,就必须修改。
有两种思路解决安全扫描问题。
方式一、密码不放在代码里
密码不放在工程代码中,放到配置中心上,比如Spring Cloud Config,比如Nacos,或者apollo上。
一般来说安全扫描都是只扫描代码工程,不会扫描其他配置中心,当然如果有检查配置中心,那只能用第二种方式了。
方式二、使用jasypt加密
使用jasypt加密可以解决这个问题。
首先,pom添加依赖。
java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="root" password=mysalt-xy algorithm=PBEWithMD5AndDES
执行结果:
图片
重新执行,可以看到每次结果不一样。
图片
input 是要加密的明文
password 是相当于盐
因此密码需要在执行一次 input="密码"
生成后替换,格式ENC(密文)
图片
然后添加盐配置:
jasypt:
encryptor:
password: mysalt-xy
这样就可以轻松加密了。
###################################################################################################################################
使用总结: 盐放在配置文件不安全。于是放到环境变量里。idea中调试需要把这个环境变量也配置在 edit configurations 中的 环境变量里。
yml如下:
spring:
datasource:
url: jdbc:mysql://localhost/test?useSSL=false
username: ENC(dmwrHDD1BD9fTyAgO92zXw)
password: ENC(IkJNz9BfVKBeksXPWUZ0sA)
driver-class-name: com.mysql.jdbc.Driver
---------------------------------------
jasypt:
encryptor:
password: ${JASYPT_ENCRYPTOR_PASSWORD}
加解密demo:
@Value("${JASYPT_ENCRYPTOR_PASSWORD}")
private String myProperty;
BasicTextEncryptor textEncryptor;
@BeforeAll
public void setUp() {
textEncryptor = new BasicTextEncryptor();
textEncryptor.setPassword(myProperty);
}
@Test
@DisplayName("测试加密")
public void t4(){
System.out.println(textEncryptor.encrypt("123456"));
}
@Test
@DisplayName("测试解密")
public void t5(){
System.out.println(textEncryptor.decrypt("LI5Gqx5JkCEh/Mc9b4EvxQ=="));
}
###################################################################################################################################

浙公网安备 33010602011771号