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

相关推荐
一嘴一个橘子20 分钟前
spring-aop 的 基础使用 - 4 - 环绕通知 @Around
java
小毅&Nora36 分钟前
【Java线程安全实战】⑨ CompletableFuture的高级用法:从基础到高阶,结合虚拟线程
java·线程安全·虚拟线程
冰冰菜的扣jio36 分钟前
Redis缓存中三大问题——穿透、击穿、雪崩
java·redis·缓存
小璐猪头1 小时前
专为 Spring Boot 设计的 Elasticsearch 日志收集 Starter
java
韩师傅1 小时前
前端开发消亡史:AI也无法掩盖没有设计创造力的真相
前端·人工智能·后端
ps酷教程1 小时前
HttpPostRequestDecoder源码浅析
java·http·netty
闲人编程1 小时前
消息通知系统实现:构建高可用、可扩展的企业级通知服务
java·服务器·网络·python·消息队列·异步处理·分发器
栈与堆1 小时前
LeetCode-1-两数之和
java·数据结构·后端·python·算法·leetcode·rust
superman超哥2 小时前
双端迭代器(DoubleEndedIterator):Rust双向遍历的优雅实现
开发语言·后端·rust·双端迭代器·rust双向遍历
1二山似2 小时前
crmeb多商户启动swoole时报‘加密文件丢失’
后端·swoole