新聞中心
環(huán)境:SpringBoot2.7.12 + SpringCloud2021.0.7 + JDK17

創(chuàng)新互聯(lián)服務緊隨時代發(fā)展步伐,進行技術(shù)革新和技術(shù)進步,經(jīng)過十年的發(fā)展和積累,已經(jīng)匯集了一批資深網(wǎng)站策劃師、設計師、專業(yè)的網(wǎng)站實施團隊以及高素質(zhì)售后服務人員,并且完全形成了一套成熟的業(yè)務流程,能夠完全依照客戶要求對網(wǎng)站進行網(wǎng)站建設、成都網(wǎng)站設計、建設、維護、更新和改版,實現(xiàn)客戶網(wǎng)站對外宣傳展示的首要目的,并為客戶企業(yè)品牌互聯(lián)網(wǎng)化提供全面的解決方案。
1. 簡介
在Spring Boot中,配置文件通常包含了應用程序的敏感信息,例如數(shù)據(jù)庫密碼、API密鑰、加密密鑰等。如果這些敏感信息未經(jīng)過加密處理,一旦配置文件被泄露或被不當訪問,可能會導致安全風險和潛在的惡意行為。因此,對Spring Boot配置文件中的敏感信息進行加密處理是非常必要的。
敏感信息加密的目的是保護數(shù)據(jù)的安全性和完整性,防止未經(jīng)授權(quán)的訪問和泄露。通過加密敏感信息,可以確保只有經(jīng)過授權(quán)的用戶或系統(tǒng)可以解密和訪問這些信息。即使配置文件被泄露,攻擊者也無法輕易地獲取敏感信息的真實內(nèi)容,從而降低了安全風險。
目前在項目中用的比較多的應該是Jasypt,Jasypt是一個Java加密工具包,它簡化了對密碼的哈希加密、對文本和二進制數(shù)據(jù)的對稱加解密等任務。在Spring Boot中,Jasypt可以用來對配置文件中的密鑰進行加密存儲,它支持基于標準的高安全性加密技術(shù),適用于單向和雙向加密。
本篇我們不會去介紹Jasypt如何使用。如果你的項目中已經(jīng)使用到了SpringCloud那么SpringCloud已經(jīng)為我們提供了配置文件內(nèi)容加解密的處理方法;即時你的項目中沒有用到,我們也只需要引入核心包即可使用它的這塊功能。接下來將以實例一步一步的交你如何使用。
2. 加解密配置
- 引入依賴
17
2021.0.7
org.springframework.cloud
spring-cloud-context
${spring-cloud.version}
- 配置密鑰信息
spring:
cloud:
bootstrap:
enabled: false # 這里必須是false,默認是false。
---
#加密配置
encrypt:
#密鑰
key: aaaabbbbccccdddd
#加密處理時的加鹽信息
salt: dead- 加密敏感信息
// 通過如下方式將我們需要加密的內(nèi)容進行加密,如:123123!@ 。進行加密處理
TextEncryptor textEncryptor = new EncryptorFactory("dead").create("aaaabbbbccccdddd") ;
System.out.println(textEncryptor.encrypt("123123!@")) ;- 配置文件中配置加密內(nèi)容
db:
password: '{cipher}6c05a3e62aa1f71b814fd283fc15197ec18a83b67d9da27dcb63c1b3925d68c1'注意:這里的前綴必須是:{cipher}
通過以上的配置,我們的配置也是完全可以正常工作的,測試如下:
public class SpringCloudComprehensiveApplication implements ApplicationRunner{
@Value("${db.password}")
private String pwd ;
public static void main(String[] args) {
SpringApplication.run(SpringCloudComprehensiveApplication.class, args);
}
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(pwd) ;
}
}輸出結(jié)果:
123123!@正確的輸出了結(jié)果。
到此配置文件敏感信息加密就完成了。但是發(fā)現(xiàn)我們非常重要的密鑰信息還是存在配置文件中,這樣還是和沒加密一樣啊,還是暴露了。我們可以通過命令行的方式來設置密鑰信息。
- 從配置文件中刪除配置的encrypt.key和encrypt.salt兩個配置。
- 啟動項目時指定命令行參數(shù),如下:
java -jar xxx.jar --encrypt.key=aaaabbbbccccdddd --encrypt.salt=dead通過這樣設置,我們的程序也將正常的運行。其實命令行參數(shù)在程序運行過程中會自動的將這些信息添加到Environment中。
3. 實現(xiàn)原理
spring cloud context中提供了下面一個配置類,該配置類配置了一個ApplicationInitializer應用程序初始化類,也就是ApplicationContext容器初始化前執(zhí)行的(Environment準備完之后)。
注意:這里是當我們項目中使用了配置中心,如使用了nacos的配置中心時
public class EncryptionBootstrapConfiguration {
@Bean
public EnvironmentDecryptApplicationInitializer environmentDecryptApplicationListener(
ConfigurableApplicationContext context, KeyProperties keyProperties) {
TextEncryptor encryptor;
try {
// 我們完全可以自定義一個TextEncryptor類型的Bean,自己來實現(xiàn)加解密邏輯
encryptor = context.getBean(TextEncryptor.class);
}
EnvironmentDecryptApplicationInitializer listener = new EnvironmentDecryptApplicationInitializer(encryptor);
return listener;
}
}EnvironmentDecryptApplicationInitializer 類會解密我們的配置信息
public class EnvironmentDecryptApplicationInitializer {
private TextEncryptor encryptor;
public EnvironmentDecryptApplicationInitializer(TextEncryptor encryptor) {
this.encryptor = encryptor;
}
public void initialize(ConfigurableApplicationContext applicationContext) {
MutablePropertySources propertySources = environment.getPropertySources();
// ...
// 解密配置文件
Map map = decrypt(this.encryptor, propertySources);
}
} 當我們項目中沒有啟用配置中心時,使用的是另外一個EnvironmentPostProcessor。
public class DecryptEnvironmentPostProcessor extends AbstractEnvironmentDecrypt
implements EnvironmentPostProcessor, Ordered {
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
// 如果啟用了,則該處理器不會生效。
if (bootstrapEnabled(environment) || useLegacyProcessing(environment) || !isEnabled(environment)) {
return;
}
MutablePropertySources propertySources = environment.getPropertySources();
// 解密配置文件
Map map = TextEncryptorUtils.decrypt(this, environment, propertySources);
}
} 了解了上面的源碼實現(xiàn),其實我們自己也可以借鑒它的實現(xiàn)方式來實現(xiàn)自己的配置文件處理。
注:配置文件的加解密也是支持RSA這種非對稱算法的,有興趣可以了解下,也是非常的簡單。
完畢?。。?/p>
分享題目:SpringCloud敏感信息配置揭秘,教你防止信息泄露!
文章位置:http://fisionsoft.com.cn/article/cdjiioj.html


咨詢
建站咨詢
