Spring Boot + jasypt 对配置文件加密

本文参考,请参考原文

SpringBoot进阶教程(六十三)Jasypt配置文件加密

背景

在开发过程中,直接把数据库连接信息等敏感信息以明文方式存储在配置文件中,会带来安全隐患。所以呢,我们需要对这些需要保密的敏感信息进行加密处理,这里就用到了Jasypt。通过jasypt-spring-boot 加密Spring Boot项目中配置文件的明文密码

Jasypt使用步骤

1.引入起步依赖

<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>    

2.在配置文件application.properties中配置密钥(这是为了第3步加密,加密后记得删掉!!!)

# 加密所需的salt(盐)
jasypt.encryptor.password=EbfYkitulv73I2p0mXI50JMXoaxZTKJ7TYO0987

jasypt.encryptor.password 是自定义秘钥,尽量复杂,但是要记得!不能放在代码和配置文件里面!不能泄漏!

3.生成密码(生成之后记得把测试代码删掉,不要提交,否则白加密!!!)

import org.jasypt.encryption.StringEncryptor;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class JasyptTest {

    @Autowired
    private StringEncryptor stringEncryptor;

    Logger logger = LoggerFactory.getLogger(JasyptTest .class);

    @Test
    public void getPass() {
        String url = stringEncryptor.encrypt("your jdbc url");
        String name = stringEncryptor.encrypt("your user name");
        String password = stringEncryptor.encrypt("your password");
        logger.info("url is : " + url);
        logger.info("name is : " + name);
        logger.info("password is : " + password);
    }
}

运行单元测试,记录下加密后的密文

url is : c57K1C9qZFf/Y30dGcauCVwip7lTcMIX35oWjkAN6MPi+xucxmDXmFmOvf8LOXIq
name is : kyMOHf2vr5LS2pjL2Z2YwJ73MvZ/Lgk0/uMTpTv5FpT39Sv06/dWDG7rRwKklHjh
password is : wUF4htaMVai14p6kxPQiQ3BbpSI7GCjt0uA8XeMe7m/HoMnfdhwFOjJSgevpFZnK

这一步有多种方式,目的就是通过自定义的复杂的密钥,来加密敏感信息,这里的敏感信息是数据连接url, username, password。

4.修改配置文件application.properties,删掉密钥,修改数据库连接配置

ENC(秘文)

spring.datasource.url=ENC(c57K1C9qZFf/Y30dGcauCVwip7lTcMIX35oWjkAN6MPi+xucxmDXmFmOvf8LOXIq) 
spring.datasource.username=ENC(kyMOHf2vr5LS2pjL2Z2YwJ73MvZ/Lgk0/uMTpTv5FpT39Sv06/dWDG7rRwKklHjh)
spring.datasource.password=ENC(wUF4htaMVai14p6kxPQiQ3BbpSI7GCjt0uA8XeMe7m/HoMnfdhwFOjJSgevpFZnK)
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect

5.再次启动Spring Boot项目时,需要以参数方式传入密钥,否则会报错

 启动Spring Boot项目时,传入参数如下

>mvn spring-boot:run -Dspring-boot.run.arguments=--jasypt.encryptor.password=EbfYkitulv73I2p0mXI50JMXoaxZTKJ7TYO0987

mvn 方式启动Spring Boot项目时,传入参数请参考 

Spring Boot Maven Plugin

Spring-Boot 2.3.1 -Dspring-boot.run.arguments not working

 6.在开发测试过程中,不删掉密钥,还是用 mvn spring-boot:run命令启动

在开发测试时,为了方便,不删掉密钥,还是用 mvn spring-boot:run命令启动,但是在上传到github时记得删掉密钥!!!

posted on 2021-02-02 19:34  dreamstar  阅读(815)  评论(0编辑  收藏  举报