1. 程式人生 > 其它 >配置公鑰_一文解決原始碼掃描漏洞:配置檔案中明文密碼改為密文密碼的方法...

配置公鑰_一文解決原始碼掃描漏洞:配置檔案中明文密碼改為密文密碼的方法...

技術標籤:配置公鑰

我們用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,如下圖所示

fb1461c9279440ae95dd388b16154dc5.png

獲取到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,只不過我的資料庫連線池就用的是阿里的,所以就直接用它的工具類啦。

搞定~

感想:要是被別人知道了配置檔案也就是知道了密文和公鑰,那也是很容易知道真實密碼的,所以這個其實在我認為是自欺欺人罷了,還不如把公鑰或者明文密碼在程式啟動的時候引數輸入。