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

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

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

一、pom配置

java 复制代码
<!-- 配置文件yml加密 -->
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.1.2</version>
</dependency>

二、生成密文代码

仅作为生成密文的工具类

java 复制代码
package com;

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.EnvironmentPBEConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@SpringBootTest
@RunWith(SpringRunner.class)
public class JasyptUtil {

    private final static String SECRECT = "1234qwer"; //秘钥
    private final static String ALGORITHM = "PBEWithMD5AndDES"; //加密算法

    @Test
    public void testEncrypt() throws Exception {
        System.out.println("密文密码:" + encrypt("myPassword"));
    }

    private String encrypt(String text){
        StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
        EnvironmentPBEConfig config = new EnvironmentPBEConfig();
        config.setAlgorithm(ALGORITHM);
        config.setPassword(SECRECT);
        standardPBEStringEncryptor.setConfig(config);
        return standardPBEStringEncryptor.encrypt(text);
    }

    public String decrypt(String text) {
        StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
        EnvironmentPBEConfig config = new EnvironmentPBEConfig();
        config.setAlgorithm(ALGORITHM);
        config.setPassword(SECRECT);
        standardPBEStringEncryptor.setConfig(config);
        return standardPBEStringEncryptor.decrypt(text);
    }

}

三、配置

3.1、yml加密配置

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

java 复制代码
#加密配置
jasypt:
  encryptor:
    password: 1234qwer # 秘钥
    algorithm: PBEWithMD5AndDES # 加密算法
    iv-generator-classname: org.jasypt.iv.NoIvGenerator

3.2、密文配置

使用工具类加密之后的密文,直接放在配置文件中,使用 ENC()

3.3、启动配置

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

如无法启动,可在启动类配置@EnableEncryptableProperties

3.4、部署配置

开发过程中,将秘钥直接放在yml中可以,但是发布到生产之后,这样放的话,那跟明文也没有什么区别了。

所以发布的时候,password 的配置空着即可。通过jar包的启动命令,来设置秘钥。如下:

java 复制代码
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

相关推荐
IT_陈寒4 分钟前
Redis的SETNX并发问题让我加了三天班
前端·人工智能·后端
demo007x19 分钟前
Docling 文档转换以及技术架构分析
前端·后端·程序员
NE_STOP2 小时前
Vide Coding--AI编程工具的选择
java
袋鱼不重2 小时前
我的神奇同事,AI 用多了居然写了个 Open In Codex
前端·后端·ai编程
用户8356290780512 小时前
使用 Python 操作 Word 内容控件
后端·python
像我这样帅的人丶你还2 小时前
啥? 前端也要会干Java?🛵🛵🛵
后端
Hommy882 小时前
【剪映小助手】添加贴纸接口(Add Sticker)
后端·github·剪映小助手·视频剪辑自动化·剪映api
码云数智-园园2 小时前
C++20 Modules 模块详解
java·开发语言·spring
程序员黑豆2 小时前
JDK 下载安装与配置详细教程
java·前端·ai编程
霸道流氓气质2 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务