SpringBoot學習筆記——使用Druid爲數據庫密碼加密

一、前言

之前在項目的配置文件中看到關於數據庫的配置,總覺得將數據庫用戶名和密碼赤裸裸的展現他人面前非常不好。但是技術有限,見識有限,不知道該如何處理。同時所看到的項目都是這個樣子的,所以覺得就這個樣子吧。在集成Druid數據庫連接池時,在官網文檔中偶然發現可以在SpringBoot項目的配置文件中給數據庫密碼加密,正合心意。這次就記錄一下整個實現過程。

二、Druid的ConfigFilter

ConfigFilter的作用包括:

  • 從配置文件中讀取配置
  • 從遠程http文件中讀取配置
  • 爲數據庫密碼提供加密功能

前兩個讀取配置就直接貼原說明文檔了,重點是數據庫密碼加密實踐。

2.1 配置ConfigFilter

2.1.1 配置文件從本地文件系統中讀取

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
     init-method="init" destroy-method="close">
     <property name="filters" value="config" />
     <property name="connectionProperties" value="config.file=file:///home/admin/druid-pool.properties" />
 </bean>

2.1.2 配置文件從遠程http服務器中讀取

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
     init-method="init" destroy-method="close">
     <property name="filters" value="config" />
     <property name="connectionProperties" value="config.file=http://127.0.0.1/druid-pool.properties" />
 </bean>

這種配置方式,使得一個應用集羣中,多個實例可以從同一個地方讀取配置,集中配置,集中修改,部署更簡單。

2.1.3 通過jvm啓動參數來使用ConfigFilter

DruidDataSource支持jvm啓動參數配置filters,所以你可以:

java -Ddruid.filters=config ....

2.2 數據庫密碼加密

數據庫密碼直接寫在配置中,對運維安全來說,是一個很大的挑戰。Druid爲此提供一種數據庫密碼加密的手段ConfigFilter。

2.2.1 密碼加密

在命令行中執行如下命令:

java -cp druid-1.1.9.jar com.alibaba.druid.filter.config.ConfigTools 你的數據庫密碼

要執行上述命令,首先需要下載 druid-1.1.9.jar,我直接將 druid-1.1.9.jar 丟到了C:Users\liyaf 文件夾下,打開cmd,貼上命令,回車運行即可(紅框處是你的數據庫密碼,還有就是Java配置了系統環境變量)。我們可以得到公鑰,私鑰和加密後的密碼。
密碼加密

2.2.2 重新配置數據源

Druid數據源需要對數據庫密碼進行解密,有三種方式配置,springboot項目直接選擇第一種:

  • 可以在配置文件my.properties中指定config.decrypt=true
  • 也可以在DruidDataSource的ConnectionProperties中指定config.decrypt=true
  • 也可以在jvm啓動參數中指定-Ddruid.config.decrypt=true
# JDBC配置:
# JDBC驅動程序的完全限定名。默認情況下基於URL自動檢測
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
# 數據庫的JDBC URL
spring.datasource.druid.url=jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
# 數據庫登錄用戶名
spring.datasource.druid.username=root
# 數據庫登錄密碼(加密)
spring.datasource.druid.password=LWOFVDVOKzdH+PV/salzQTdpxApa7cXLNs07fvW/W7I4n1yZDndQz1FYQByzfr080tihAWRfY1bzy92EkvhxJg==
# 公鑰
publickey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJX0QGFbKReek0aoC2fP7z/z808L/rvfvBV+c/3hU56TjGGAR+Ezsa9afZ1+BBZ52H0SQdVuir4GWNEHGLDwZZMCAwEAAQ==
# 配置 connection-properties,啓用加密,配置公鑰。
spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=${publickey}
# 啓動ConfigFilter
spring.datasource.druid.filter.config.enabled=true

我們重啓項目正常,訪問Druid監控頁面正常。
Druid監控頁面

三、總結說明

整個流程實踐下來還是很簡單的。就兩個步驟:密碼加密和配置參數。



每天記錄一點點,每天進步一點點!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章