使用Springboot對配置文件中的敏感信息加密
Springboot對配置文件的敏感信息加密
前言
最近公司對軟件的安全問題比較在意,要求對配置文件中的敏感信息如數(shù)據(jù)庫密碼等進(jìn)行加密。但是Springboot是一款高度集成的框架,如果僅僅是簡單的對數(shù)據(jù)庫密碼進(jìn)行加密了,由于連接數(shù)據(jù)庫的操作是框架自己完成的,這就會造成不小的麻煩。
經(jīng)過調(diào)研,找到了如下方式還比較方便。
項(xiàng)目配置
該項(xiàng)目用到了jasypt庫。原理很簡單,通過該庫提供的方法進(jìn)行敏感信息加密,生成密文xxxxx,然后將密文使用ENC()包裹起來。
添加依賴
<!-- jasypt場景啟動器依賴 --> <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) # 加密密碼所需要的鹽(隨便寫)。為了更加安全,這一行配置不要寫在配置文件中,可以寫在啟動參數(shù)中 jasypt.encryptor.password=nmyswls # 指定使用的算法 # 可選算法有:PBEWITHHMACSHA512ANDAES_256、PBEWITHHMACSHA512ANDAES_128、PBEWithMD5AndDES jasypt.encryptor.algorithm=PBEWithMD5AndDES
生成加密字符串
加密過程中需要使用到鹽,鹽的設(shè)置不要太隨意,因?yàn)樵瓌t上鹽不能存儲又不能忘記,所以盡量遵循一定的命名規(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)
由于該方法是對稱加密方式,因此系統(tǒng)在解密的時候同樣需要此鹽,但是鹽一定不能對外暴露。因此在第二步配置文件中并沒有配置解密所需的鹽,而是改用在系統(tǒng)啟動時通過命令行傳參的方式傳入。
總結(jié)一下
- 本方案依賴jasypt庫,可以對配置文件中任意字符串進(jìn)行加密,不僅僅局限于密碼,更不僅僅局限于mysql密碼。
- 由于采用對稱加密算法,如果泄露了加密需要的鹽(上文提到的jasypt.encryptor.password參數(shù)),很容易對密碼進(jìn)行解密。因此加密用的鹽需要寫在配置文件外面,啟動參數(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是加密變量使用的特殊符號.
2、也可以把這些配置
到apollo中如果使用了apollo配置中心
代碼執(zhí)行的效果
參考:
https://github.com/ulisesbocchio/jasypt-spring-boot
https://github.com/ctripcorp/apollo-use-cases/tree/master/spring-boot-encrypt
本文目的是說明這個是springboot支持的 既支持普通boot項(xiàng)目 也可以用于apollo配置中心
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot 文件或圖片上傳與下載功能的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot 文件或圖片上傳與下載功能的實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02Java多線程實(shí)現(xiàn)之Executor詳解
這篇文章主要介紹了Java多線程實(shí)現(xiàn)之Executor詳解,Executor 給他一個 Runnable,他就能自動很安全的幫你把這個線程執(zhí)行完畢2023-08-08
Executor 通過創(chuàng)建線程池的方式來管理線程,需要的朋友可以參考下Struts2攔截器Interceptor的原理與配置實(shí)例詳解
攔截器是一種AOP(面向切面編程)思想的編程方式.它提供一種機(jī)制是開發(fā)者能夠把相對獨(dú)立的代碼抽離出來,配置到Action前后執(zhí)行。下面這篇文章主要給大家介紹了關(guān)于Struts2攔截器Interceptor的原理與配置的相關(guān)資料,需要的朋友可以參考下。2017-11-11Maven執(zhí)行單元(Execution)的精細(xì)化控制詳解
在持續(xù)集成與DevOps實(shí)踐中,構(gòu)建工具的精確定義能力往往決定著軟件交付的最終質(zhì)量,執(zhí)行單元(Execution)作為Maven生命周期與插件目標(biāo)之間的核心紐帶,承擔(dān)著連接抽象構(gòu)建階段與具體實(shí)施動作的關(guān)鍵職責(zé),本文將聚焦Execution的四個關(guān)鍵控制維度,需要的朋友可以參考下2025-05-05詳解spring applicationContext.xml 配置文件
本篇文章主要介紹了詳解spring applicationContext.xml 配置文件 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02