SpringBoot項(xiàng)目application配置文件數(shù)據(jù)庫密碼上傳git暴露問題解決方案
問題
問題:
項(xiàng)目中含有配置文件,配置文件中含有數(shù)據(jù)庫的用戶名和密碼,上傳git直接對(duì)外網(wǎng)開放。那后果會(huì)怎樣可想而知。
jasypt 加解密
jasypt(Java Simplified Encryption)是一個(gè)簡(jiǎn)化的開源 Java 加密工具庫
Springboot引入jasypt
<!-- Java Simplified Encryption-->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.4</version>
</dependency>
加解密測(cè)試
@Test
public void test1(){
// 參考 https://github.com/ulisesbocchio/jasypt-spring-boot
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
// 加密密碼
config.setPassword("123456");
// 默認(rèn)值
// 加密算法
config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");
// 設(shè)置密鑰獲取迭代次數(shù)。在生成加密密鑰時(shí),會(huì)對(duì)密碼進(jìn)行多次迭代操作,以增加密鑰的復(fù)雜度。
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);
String encrypt = encryptor.encrypt("hello ...");
System.out.println("加密后: " + encrypt);
String decrypt = encryptor.decrypt(encrypt);
System.out.println("解密后: " + decrypt);
}
輸出
加密后: nOvch7+afYNA0xcbPQq1yzmK0yLj7GmCQR6YpVFH61IkMnTEULVgJz2b2yU3DKbs
解密后: hello ...
springboot使用jasypt
使用很簡(jiǎn)單,只需要引入jasypt-spring-boot-starter依賴,然后將配置文件中的明文換成"ENC(密文即可)“,例如密碼為"hello …”,加密密碼為"123456",加密之后的密碼為"nOvch7+afYNA0xcbPQq1yzmK0yLj7GmCQR6YpVFH61IkMnTEULVgJz2b2yU3DKbs"
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/scott?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
username: root
password: ENC(nOvch7+afYNA0xcbPQq1yzmK0yLj7GmCQR6YpVFH61IkMnTEULVgJz2b2yU3DKbs)
項(xiàng)目啟動(dòng)時(shí)添加啟動(dòng)參數(shù)"-Djasypt.encryptor.password=123456"
原理簡(jiǎn)單解析
拿到配置信息>判斷配置信息是否以"ENC(“開頭并且以”)"結(jié)尾,如果是就拿到提取出密文>獲取到加解密key>使用jasypt解密密文>將密文替換為明文文章來源:http://www.zghlxwxcb.cn/news/detail-851380.html
注意:在運(yùn)行環(huán)境是可以拿到明文的,例如通過@Value(“${spring.datasource.password}”)拿到的依然是明文,但在源碼級(jí)別是看不到明文的,而且加解密密碼是通過環(huán)境變量提供的,所以即便別人看到密文也解不開,也訪問不了我們的數(shù)據(jù)庫.文章來源地址http://www.zghlxwxcb.cn/news/detail-851380.html
到了這里,關(guān)于SpringBoot項(xiàng)目application配置文件數(shù)據(jù)庫密碼上傳git暴露問題解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!