SpringBoot項(xiàng)目配置明文密碼泄露問(wèn)題的處理方式
項(xiàng)目配置明文密碼泄露問(wèn)題的處理
在項(xiàng)目開發(fā)過(guò)程中,需要配置數(shù)據(jù)庫(kù)連接密碼、Redis密碼、網(wǎng)盤上傳的AK/SK等敏感信息,都需要保存在配置文件里,或者配置中心。
這些信息如果泄露,還是會(huì)造成一定的困擾,這里介紹2種處理方案:
1、使用系統(tǒng)環(huán)境變量?jī)?chǔ)存密碼
比如K8S的環(huán)境變量、Windows的環(huán)境變量、Centos的環(huán)境變量等等,
然后在程序里使用 System.getenv()方法讀取。
這種方式的好處:只有運(yùn)維人員知道,連開發(fā)都不知道生產(chǎn)的密碼。
密碼變更也簡(jiǎn)單,運(yùn)維直接操作就好了。
缺點(diǎn)就是部署時(shí),容易遺漏,不過(guò)可以通過(guò)統(tǒng)一的環(huán)境鏡像來(lái)處理。
一般推薦這種方式
注:如果變更密碼,還是要考慮重啟一下服務(wù)器上的所有服務(wù),避免緩存了舊密碼,導(dǎo)致服務(wù)故障。
2、密碼還是寫在程序的配置文件里
或者nacos之類的配置中心, 但是不使用明文,而是使用加密后的串。 同時(shí)在啟動(dòng)命令行里,指定密碼參數(shù)。 下面介紹一下這種加密方式:
2.1、添加依賴,參考:https://github.com/ulisesbocchio/jasypt-spring-boot
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.4</version>
</dependency>2.2、對(duì)文本進(jìn)行加密,假設(shè)密碼為123456,加密代碼如下(建議部署一個(gè)加密后臺(tái),給開發(fā)用):
// 參考 https://github.com/ulisesbocchio/jasypt-spring-boot
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword("123456");
// 默認(rèn)值
config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
System.out.println("beinet 加密后: " + encryptor.encrypt(username));上面的代碼輸出:beinet 加密后: 8LJb3ICopErpPuEw1S/3rHc2fkk1qPScP0ODDbnmuSBjY6NJqN1oZcAxNDVl06qv
2.3、把加密后的文本,套上 ENC()函數(shù),寫入yml配置里:
pwdTest: ak: ENC(8LJb3ICopErpPuEw1S/3rHc2fkk1qPScP0ODDbnmuSBjY6NJqN1oZcAxNDVl06qv)
2.4、配置一下IDEA的Java啟動(dòng)命令行參數(shù):
點(diǎn)擊右上角 Edit Configurations… 在右側(cè)Configuration=>Environment=>VM options的右邊添加:
-Djasypt.encryptor.password=123456

2.5、運(yùn)行代碼驗(yàn)證一下:
@Value("${pwdTest.ak}")
private String ak;
@Override
public void run(String... args) throws Exception {
System.out.println(ak);
}可以看到,能成功打印出解密后的 beinet
給配置文件中用戶名密碼加密
原配置文件內(nèi)容

詳細(xì)操作步驟
1、在pom.xml文件中加依賴
<!--明文加密--> <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot</artifactId> <version>2.0.0</version> </dependency>
2、重新加載pom文件(因?yàn)榭赡軙?huì)出現(xiàn)新加的依賴maven不生效) 3、找到maven倉(cāng)庫(kù)中的上面的依賴的位置
eg:我的位置是這里,請(qǐng)注意自己的位置(肯定是在org路徑下)

4、打開PowerShell窗口(在jar包目錄中按住shift+鼠標(biāo)右鍵)

5、輸入命令,執(zhí)行jar包加密
java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=“Zhiradar@135” password=Zhiradar@135 algorithm=PBEWithMD5AndDES
注:input=" ",分號(hào)中的內(nèi)容為原配置文件中的需要加密的數(shù)據(jù),該數(shù)據(jù)必須在雙引號(hào)內(nèi)
eg: input=“Zhiradar@135”
password= ,沒(méi)有引號(hào),并且=號(hào)后面的值是你自己起的,叫啥都行(盡量復(fù)雜一點(diǎn),都是為了安全性)
eg1: password=sdkjfhkhs
eg2: password=woshinibaba@163
圖示:

- 綠色框里的為原配置文件用戶名和密碼
- 藍(lán)色框里的為鹽值(鹽值就是你自己起的那個(gè)加密數(shù)據(jù))
- 黃色框里的是執(zhí)行上述命令后生成的新配置文件中的用戶名和密碼
新配置文件內(nèi)容

jasypt.encryptor.password=${JASYPT_ENCRYPTOR_PASSWORD}
這個(gè)是服務(wù)啟動(dòng)時(shí)候需要給配置文件增加的環(huán)境變量參數(shù)(就是上面自己起的)
JASYPT_ENCRYPTOR_PASSWORD也是自己起的名字
要對(duì)應(yīng)啟動(dòng)jar包或者啟動(dòng)項(xiàng)目是配置的環(huán)境變量用的
jasypt.encryptor.algorithm=PBEWithMD5AndDES
這個(gè)是加密方式,其實(shí)默認(rèn)的就是這種
6、在啟動(dòng)類上面加上注解

@EnableEncryptableProperties
表示啟動(dòng)項(xiàng)目就開啟加密配置
7、啟動(dòng)項(xiàng)目驗(yàn)證配置正確不正確 1)打成jar包
執(zhí)行jar包形式
java -DJASYPT_ENCRYPTOR_PASSWORD=Zhiradar@135 -jar .\xxl-job-admin-2.0.2-SNAPSHOT.jar
JASYPT_ENCRYPTOR_PASSWORD=Zhiradar@135
JASYPT_ENCRYPTOR_PASSWORD自己在配置文件中配置的
Zhiradar@135 鹽值也是自己起的
2) 在IDEA中啟動(dòng)
run–>Edit Configuarations

以上為xxl-job框架中的admin模塊用戶名和密碼加密(涉及到啟動(dòng)項(xiàng)目后會(huì)在可視化平臺(tái)輸入用戶名和密碼)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)高并發(fā)秒殺的七種方式
本文主要介紹了Java實(shí)現(xiàn)高并發(fā)秒殺的六種方式,包括使用緩存、數(shù)據(jù)庫(kù)樂(lè)觀鎖、數(shù)據(jù)庫(kù)悲觀鎖、分布式鎖、隊(duì)列限流、令牌桶算法和限流器,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
基于Spring Boot DevTools實(shí)現(xiàn)開發(fā)過(guò)程優(yōu)化
這篇文章主要介紹了基于Spring Boot DevTools實(shí)現(xiàn)開發(fā)過(guò)程優(yōu)化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
Java實(shí)現(xiàn)的簡(jiǎn)單網(wǎng)頁(yè)截屏功能示例
這篇文章主要介紹了Java實(shí)現(xiàn)的簡(jiǎn)單網(wǎng)頁(yè)截屏功能,涉及java網(wǎng)頁(yè)打開及屏幕截圖功能相關(guān)操作技巧,需要的朋友可以參考下2017-12-12
PowerJob的CleanService清理服務(wù)流程
這篇文章主要為大家介紹了PowerJob的CleanService清理服務(wù)流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2024-02-02
spring boot攔截器注入不了java bean的原因
這篇文章主要介紹了spring boot攔截器注入不了java bean的原因,幫助大家更好的理解和學(xué)習(xí)spring boot框架,感興趣的朋友可以了解下2020-11-11

