1 場(chǎng)景
SpringBoot的項(xiàng)目發(fā)布時(shí)参淹,線上配置文件
通常會(huì)采用spring.profiles.active
參數(shù)的形式指定醉锄。
這種方式,線上配置文件浙值,需要配置到源碼
中恳不,密碼等敏感信息
會(huì)暴露
出來。
雖然數(shù)據(jù)庫可以限制訪問的IP
來杜絕密碼泄露出去后代碼的非法訪問問題开呐。但是有些外部郵箱密碼
烟勋、第三方訪問接口
密鑰等不可控的外部接口
,無法限制訪問者的IP筐付,仍然有安全問題卵惦。
2 加密方式
這里采用jasypt
對(duì)SpringBoot中的配置文件信息進(jìn)行加密。
配置文件中的密碼信息為加密后的字符串
瓦戚,通過在啟動(dòng)時(shí)指定jasypt私鑰
沮尿,來進(jìn)行自動(dòng)解密
。運(yùn)維人員保管維護(hù)解密的私鑰
较解。
加密步驟:
(1)配置jasypt密鑰
畜疾,對(duì)密碼進(jìn)行加密
(2)將加密后的字符串以ENC(xxxx)
的格式配置在配置文件中
(3)啟動(dòng)jar后,在參數(shù)中加上--jasypt.encryptor.password
指定jasypt密鑰
3 加密過程
3.1 maven依賴
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
3.2 配置加密密鑰
這里設(shè)置加密密鑰為:abcd_123
3.2.1 開發(fā)環(huán)境
開發(fā)環(huán)境可在配置文件yml
中配置
jasypt:
encryptor:
password: abcd_123
3.2.2 生產(chǎn)環(huán)境
生產(chǎn)環(huán)境采用啟動(dòng)參數(shù)
的形式傳入:--jasypt.encryptor.password=abcd_123
如:
java -jar xxx.jar --jasypt.encryptor.password=abcd_123
3.3 加密
對(duì)字符串rootPwd進(jìn)行加密:
@Autowired
private StringEncryptor encryptor;
@Test
public void encrypt(){
System.out.println(encryptor.encrypt("rootPwd"));
}
rootPwd加密后的內(nèi)容如下:
yCu0xHHOTfl8evdE0bR1Fg==
3.4 配置密文
將密碼加密后生成的密文
印衔,以ENC(xxxx)
的形式配置在配置文件中啡捶。
如下:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://xxx.xxx.xxx.xxx:xxx/xxx
username: root
password: ENC(yCu0xHHOTfl8evdE0bR1Fg==)