前言
防止配置檔案敏感資訊洩露,去年公司出現過類似事件,也防止原始碼洩露,對專案中的配置檔案進行加密
引入方式
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、最後就是複製配置檔案屬性的時候別複製序列了