SpringBoot如何解决yml明文密码问题

日常使用过程中,使用明文密码完全没问题,但是到了企业项目中,往往需要进行安全扫描,被安全扫描组扫到后,就必须修改。

有两种思路解决安全扫描问题。

方式一、密码不放在代码里
密码不放在工程代码中,放到配置中心上,比如Spring Cloud Config,比如Nacos,或者apollo上。

一般来说安全扫描都是只扫描代码工程,不会扫描其他配置中心,当然如果有检查配置中心,那只能用第二种方式了。

方式二、使用jasypt加密
使用jasypt加密可以解决这个问题。

首先,pom添加依赖。

com.github.ulisesbocchio jasypt-spring-boot-starter 2.1.2 然后打开jasypt的jar包目录,执行如下命令生成密文。

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=="));
}

###################################################################################################################################

参考原文:https://mp.weixin.qq.com/s/bewrZtF6iNBCwkgjr6vEeA

posted @ 2024-07-23 13:40  自在现实  阅读(392)  评论(0)    收藏  举报