SpringBoot集成jasypt,加密yml配置文件

r囧r小猫 2023-10-14 10:42 44阅读 0赞

SpringBoot集成jasypt,加密yml配置文件

  • 一、pom配置
  • 二、生成密文代码
  • 三、配置
    • 3.1、yml加密配置
    • 3.2、密文配置
    • 3.3、启动配置
    • 3.4、部署配置
  • 四、遇到的一些坑

最新项目安全检测,发现配置文件中数据库密码,redis密码仍处理明文状态

一、pom配置

  1. <!-- 配置文件yml加密 -->
  2. <dependency>
  3. <groupId>com.github.ulisesbocchio</groupId>
  4. <artifactId>jasypt-spring-boot-starter</artifactId>
  5. <version>2.1.2</version>
  6. </dependency>

二、生成密文代码

仅作为生成密文的工具类

  1. package com;
  2. import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
  3. import org.jasypt.encryption.pbe.config.EnvironmentPBEConfig;
  4. import org.junit.Test;
  5. import org.junit.runner.RunWith;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.test.context.junit4.SpringRunner;
  8. @SpringBootTest
  9. @RunWith(SpringRunner.class)
  10. public class JasyptUtil {
  11. private final static String SECRECT = "1234qwer"; //秘钥
  12. private final static String ALGORITHM = "PBEWithMD5AndDES"; //加密算法
  13. @Test
  14. public void testEncrypt() throws Exception {
  15. System.out.println("密文密码:" + encrypt("myPassword"));
  16. }
  17. private String encrypt(String text){
  18. StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
  19. EnvironmentPBEConfig config = new EnvironmentPBEConfig();
  20. config.setAlgorithm(ALGORITHM);
  21. config.setPassword(SECRECT);
  22. standardPBEStringEncryptor.setConfig(config);
  23. return standardPBEStringEncryptor.encrypt(text);
  24. }
  25. public String decrypt(String text) {
  26. StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
  27. EnvironmentPBEConfig config = new EnvironmentPBEConfig();
  28. config.setAlgorithm(ALGORITHM);
  29. config.setPassword(SECRECT);
  30. standardPBEStringEncryptor.setConfig(config);
  31. return standardPBEStringEncryptor.decrypt(text);
  32. }
  33. }

三、配置

3.1、yml加密配置

(jasypt配置一定要放最上面)

  1. #加密配置
  2. jasypt:
  3. encryptor:
  4. password: 1234qwer # 秘钥
  5. algorithm: PBEWithMD5AndDES # 加密算法
  6. iv-generator-classname: org.jasypt.iv.NoIvGenerator

3.2、密文配置

使用工具类加密之后的密文,直接放在配置文件中,使用 ENC()
在这里插入图片描述

3.3、启动配置

有的说法还需要在启动类做一下配置,我这边并没有配置,也可直接使用。
如无法启动,可在启动类配置@EnableEncryptableProperties

在这里插入图片描述

3.4、部署配置

开发过程中,将秘钥直接放在yml中可以,但是发布到生产之后,这样放的话,那跟明文也没有什么区别了。
所以发布的时候,password 的配置空着即可。通过jar包的启动命令,来设置秘钥。如下:

  1. nohup java -jar -Djasypt.encryptor.password='1234qwer' /app/web.jar --server.port=8080 --spring.config.location=/app/web.yml >> /app/web.out 2>&1 &

四、遇到的一些坑

1、jasypt的配置文件要放在ENC()密文配置的上面。
2、版本需要匹配
3、启动命令秘钥需要加’

报错:Failed to bind properties under ‘spring.datasource.password‘ to java.lang.String
参考:https://blog.csdn.net/qq_38254635/article/details/132027639

发表评论

表情:
评论列表 (有 0 条评论,44人围观)

还没有评论,来说两句吧...

相关阅读