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時記得刪掉密鑰!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM