SpringBoot專案配置檔案加密

木马不是马發表於2024-07-01

前言

防止配置檔案敏感資訊洩露,去年公司出現過類似事件,也防止原始碼洩露,對專案中的配置檔案進行加密

引入方式

pom檔案引入以下依賴

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

引入maven外掛,可以更方便的將配置檔案加密

<build>
        <plugins>
            <plugin>
                <groupId>com.github.ulisesbocchio</groupId>
                <artifactId>jasypt-maven-plugin</artifactId>
                <version>3.0.3</version>
            </plugin>
        </plugins>
    </build>

應該是jasypt版本太低的問題,預設全域性批次替換為密文的時候是查詢的application.properties檔案,如果沒有這個檔案,可以新建,用完之後再刪除

將需要加密的字串用DEC()包起來,
然後執行命令,替換後面password為自己的秘鑰
mvn jasypt:encrypt -Djasypt.encryptor.password=password
可以將這個命令新增到常用的指令碼檔案,方便後續更改配置檔案的時候再次加密
執行完成,不出意外的話可以看到application.properties裡面的資訊已經換成ENC()包裹的密文了

然後將ENC()包裹的密文替換為現有配置裡面的資訊

最後一步,在jvm啟動命令新增 --jasypt.encryptor.password=password 或者-Djasypt.encryptor.password=password
其中-D表示系統屬性而--用於設定應用程式選項或引數,加完正常啟動專案就可以

注意事項
1、啟動專案可能會報錯,如果顯示security什麼的不存在,大機率是jdk版本過低,最好是在,1.8.0_4xx以上,如果是1.8.0_2xx大機率會出現這個問題
2、提前將jasypt.encryptor.password引數新增到啟動命令上,可以在上一版的時候加上驗證,檢查引數是否加上,一定要聯絡運維加對位置,這個引數不生效也會導致系統啟動失敗

public static void printProperty(String key) {
        String property = context.getEnvironment().getProperty(key);
        log.info("environment key:{},property:{}", key, property);
        String sysProperty = System.getProperty(key);
        log.info("jvm key:{},Property:{}", key, sysProperty);
    }

3、最後就是複製配置檔案屬性的時候別複製序列了

相關文章