配置公鑰_一文解決原始碼掃描漏洞:配置檔案中明文密碼改為密文密碼的方法...
阿新 • • 發佈:2021-01-24
技術標籤:配置公鑰
我們用java連結資料庫,不管是web專案還是小程式,都需要把資料庫密碼寫在配置檔案中(當然你要寫死在程式裡也沒有辦法),或者資料庫中,通常原始碼漏洞掃描都會告訴你不能有明文密碼,那麼有什麼辦法可以變為密文呢?
一、思路如下
寫一個非對稱加密的工具類,用私鑰加密明文,然後把公鑰和得到的密文放在配置檔案中,程式碼中讀取密碼的時候就把公鑰和密文讀取進來解密後給程式用。
很簡單吧!
二、一個實現
這裡就舉一個實現的例子,直接借用druid提供的工具類來,畢竟我現在的專案資料庫連線池都是用阿里的Druid.
1、在pom.xml加入如下依賴
com.alibaba druid-spring-boot-starter 1.1.9
當然可能老專案的話沒有用maven就直接新增如下jar即可;
druid-1.1.9.jar
2、寫一個如下工具類
/** * druid資料庫連線池中的密碼進行非對稱加密,使用方式 * 1、在cmd中執行:java -cp druid-1.1.9.jar com.alibaba.druid.filter.config.ConfigTools 要加密的串 * 2、獲取公鑰和加密串放到配置檔案中(cmd獲取方法右鍵標記,左鍵選取,按enter就複製到貼上板了) * 3、使用的時候,獲取公鑰和加密串後呼叫下面的decrypt方法進行解密 * @author lwh * */public class DruidEncryptDecrypt { public static String decrypt(String publicKey,String encryptPassword) { try { return ConfigTools.decrypt(publicKey,encryptPassword); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return ""; }}
當然,你也可以直接使用ConfigTools就可以了,不過我這個方便寫祕鑰生成步驟,你也可以直接用預設的祕鑰但是不建議。
2、按工具類中的步驟生成公鑰和KEY,如下圖所示
獲取到publicKey和passwd替換配置檔案中的明文密碼.
3、修改以前的資料庫連線資訊讀取類,對密碼呼叫DruidEncryptDecrypt進行解密,如下所示:
public String getPassword() { //這裡直接返回解密資料 return DruidEncryptDecrypt.decrypt(publicKey, password); }
這一步驟可能有人會問了,我在哪裡加這個程式碼,我用spring都是直接在application.xml中加上去的,調用不了java程式碼啊?
親,這裡有兩種辦法解決
辦法1、如果你是springboot專案,那麼你可以百度下springboot整合druid密碼加密,那裡有整合的,這個不多說。
辦法2、你看application.xml中其實就是一個dataSource的bean,你直接抽取出來寫成一個配置類即可,可以參考如下我的博文:點選更多找到我的部落格:IT行者然後springboot標籤下面的(SpringBoot2.0整合C3P0、Druid資料庫連線池)文章。
當然,辦法二是很通用的,所以我這裡一般選擇辦法2.
4、大家也可以自己實現一個RSA工具類來做加密解密,就不需要一下子引用Druid,只不過我的資料庫連線池就用的是阿里的,所以就直接用它的工具類啦。
搞定~
感想:要是被別人知道了配置檔案也就是知道了密文和公鑰,那也是很容易知道真實密碼的,所以這個其實在我認為是自欺欺人罷了,還不如把公鑰或者明文密碼在程式啟動的時候引數輸入。