使用Springboot對(duì)配置文件中的敏感信息加密
Springboot對(duì)配置文件的敏感信息加密
前言
最近公司對(duì)軟件的安全問題比較在意,要求對(duì)配置文件中的敏感信息如數(shù)據(jù)庫密碼等進(jìn)行加密。但是Springboot是一款高度集成的框架,如果僅僅是簡(jiǎn)單的對(duì)數(shù)據(jù)庫密碼進(jìn)行加密了,由于連接數(shù)據(jù)庫的操作是框架自己完成的,這就會(huì)造成不小的麻煩。
經(jīng)過調(diào)研,找到了如下方式還比較方便。
項(xiàng)目配置
該項(xiàng)目用到了jasypt庫。原理很簡(jiǎn)單,通過該庫提供的方法進(jìn)行敏感信息加密,生成密文xxxxx,然后將密文使用ENC()包裹起來。
添加依賴
<!-- jasypt場(chǎng)景啟動(dòng)器依賴 -->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
修改明文密碼
配置文件中密碼將原來的明文密碼改為ENC(密文密碼)的樣子,如下:
# 原MySQL密碼,刪掉不用 #spring.datasource.password=xxxx # 加密后的MySQL密碼 spring.datasource.password=ENC(BSYVaS0K9UEIIZACPLduGUumokOpB44c==) # 如果是其他需要加密的密碼,比如es密碼es123456 es.password=ENC(xxxxxxx) # 加密密碼所需要的鹽(隨便寫)。為了更加安全,這一行配置不要寫在配置文件中,可以寫在啟動(dòng)參數(shù)中 jasypt.encryptor.password=nmyswls # 指定使用的算法 # 可選算法有:PBEWITHHMACSHA512ANDAES_256、PBEWITHHMACSHA512ANDAES_128、PBEWithMD5AndDES jasypt.encryptor.algorithm=PBEWithMD5AndDES
生成加密字符串
加密過程中需要使用到鹽,鹽的設(shè)置不要太隨意,因?yàn)樵瓌t上鹽不能存儲(chǔ)又不能忘記,所以盡量遵循一定的命名規(guī)則,供內(nèi)部人員依據(jù)規(guī)則判斷鹽是什么。
# 其中下面運(yùn)行的jar包為上面maven依賴中所指定的jar包,input參數(shù)為需要加密的字符串,password參數(shù)為加密所需的鹽。 java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="str" password="salt" algorithm=PBEWithMD5AndDES
上述jar包可以從maven中央倉庫中下載。
注意事項(xiàng)
由于該方法是對(duì)稱加密方式,因此系統(tǒng)在解密的時(shí)候同樣需要此鹽,但是鹽一定不能對(duì)外暴露。因此在第二步配置文件中并沒有配置解密所需的鹽,而是改用在系統(tǒng)啟動(dòng)時(shí)通過命令行傳參的方式傳入。
總結(jié)一下
- 本方案依賴jasypt庫,可以對(duì)配置文件中任意字符串進(jìn)行加密,不僅僅局限于密碼,更不僅僅局限于mysql密碼。
- 由于采用對(duì)稱加密算法,如果泄露了加密需要的鹽(上文提到的jasypt.encryptor.password參數(shù)),很容易對(duì)密碼進(jìn)行解密。因此加密用的鹽需要寫在配置文件外面,啟動(dòng)參數(shù)中。
springboot使用加密的配置屬性
依賴:
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>1.16</version>
</dependency>
1、加密屬性配置
在application.properties或者相應(yīng)的proffile的properties文件

其中
jasypt.encryptor.password = klklklklklklklkl 是加解密的鹽
enc是加密變量使用的特殊符號(hào).
2、也可以把這些配置
到apollo中如果使用了apollo配置中心

代碼執(zhí)行的效果

參考:
https://github.com/ulisesbocchio/jasypt-spring-boot
https://github.com/ctripcorp/apollo-use-cases/tree/master/spring-boot-encrypt
本文目的是說明這個(gè)是springboot支持的 既支持普通boot項(xiàng)目 也可以用于apollo配置中心
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java底層基于鏈表實(shí)現(xiàn)集合和映射--集合Set操作詳解
這篇文章主要介紹了Java底層基于鏈表實(shí)現(xiàn)集合和映射集合Set操作,結(jié)合實(shí)例形式詳細(xì)分析了Java使用鏈表實(shí)現(xiàn)集合和映射相關(guān)原理、操作技巧與注意事項(xiàng),需要的朋友可以參考下2020-03-03
java thread start()和run()方法簡(jiǎn)析
本文以java中thread的start()和run()的區(qū)別做詳細(xì)介紹, 需要了解跟多的朋友可以參考下2012-11-11
微信公眾號(hào)模板消息接口開發(fā)Java實(shí)現(xiàn)方法代碼
這篇文章主要介紹了微信公眾號(hào)模板消息接口開發(fā)Java實(shí)現(xiàn)的相關(guān)資料,,該接口可以用于向關(guān)注公眾號(hào)的用戶推送消息,包括群發(fā)和指定用戶發(fā)送消息,文章詳細(xì)介紹了如何獲取公眾號(hào)的測(cè)試信息、配置接口信息和獲取access_token,需要的朋友可以參考下2024-12-12
Springboot+MybatisPlus+Oracle實(shí)現(xiàn)主鍵自增的示例代碼
這篇文章主要介紹了Springboot+MybatisPlus+Oracle實(shí)現(xiàn)主鍵自增的示例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
Java實(shí)現(xiàn)域名解析的示例詳解(附帶源碼)
這篇文章將從理論到實(shí)踐和從代碼到測(cè)試,全方位地講解如何利用?Java?實(shí)現(xiàn)一個(gè)簡(jiǎn)單的域名解析器,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-03-03
maven profile實(shí)現(xiàn)多環(huán)境配置的示例
這篇文章主要介紹了maven profile實(shí)現(xiàn)多環(huán)境配置的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
idea編譯時(shí)不提示任何錯(cuò)誤信息的問題及解決
這篇文章主要介紹了idea編譯時(shí)不提示任何錯(cuò)誤信息的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12

