DWS支持SSL標準協議,SSL協議是安全性更高的協議標準,它們加入了數字簽名和數字證書來實現客戶端和服務器的雙向身份驗證,保證了通信雙方更加安全的數據傳輸。為支持SSL連接方式,DWS已經從CA認證中心申請到正式的服務器、客戶端的證書和密鑰(假設服務器的私鑰為server.key,證書為server.crt,客戶端的私鑰為client.key,證書為client.crt,CA根證書名稱為cacert.pem)。
SSL連接方式的安全性高于普通模式,集群默認開啟SSL功能允許來自客戶端的SSL連接或非SSL連接,從安全性考慮,建議用戶在客戶端使用SSL連接方式。并且DWS服務器端的證書、私鑰以及根證書已經默認配置完成。如果要強制使用SSL連接,需要在集群“安全設置”頁面開啟“服務器端是否強制使用SSL連接”,操作詳情可參見下方“設置SSL連接”章節,客戶端和服務器端SSL連接參數組合情況可請見客戶端和服務器端SSL連接參數組合情況。
客戶端或JDBC/ODBC應用程序使用SSL連接方式,用戶必須在客戶端或應用程序代碼中配置相關的SSL連接參數。DWS管理控制臺提供了客戶端所需的SSL證書,該SSL證書包含了客戶端所需的默認證書、私鑰、根證書以及私鑰密碼加密文件。請將該SSL證書下載到客戶端所在的主機上,然后在客戶端中指定證書所在的路徑,操作詳情請參見下方“在gsql客戶端配置SSL認證相關的數字證書參數”章節,SSL認證及客戶端參數介紹可參見下方“SSL認證方式及客戶端參數介紹”章節。

說明使用默認的證書可能存在安全風險,為了提高系統安全性,強烈建議用戶定期更換證書以避免被破解的風險。如果需要更換證書,請聯系數據庫客服。
設置SSL連接
前提條件
- 修改安全配置參數并保存生效可能需要重啟集群,將導致集群暫時不可用。
- 修改集群安全配置必須同時滿足以下兩個條件:
?集群狀態為“可用”或“非均衡”。
?任務信息不能處于“創建快照中”、“節點擴容”、“配置中”或“重啟中”。
操作步驟
- 登錄DWS 管理控制臺。
- 在左側導航樹中,單擊“集群管理”。
- 在集群列表中,單擊指定集群的名稱,然后單擊“安全設置”。
默認顯示“配置狀態”為“已同步”,表示頁面顯示的是數據庫當前最新結果。
- 在“SSL連接”區域中,單擊“服務器端是否強制使用SSL連接”的設置開關進行設置,建議開啟。
:開啟,設置參數require_ssl =1,表示服務器端強制要求SSL連接。
:關閉,設置參數require_ssl =0,表示服務器端對是否通過SSL連接不作強制要求,默認為關閉。設置require_ssl參數詳情請參見下方“客戶端和服務器端SSL連接參數組合情況”章節中的“?require_ssl(服務器)”。
說明
如果使用DWS提供的gsql客戶端或ODBC驅動,DWS支持的SSL協議為TLSv1.2。
如果使用DWS提供的JDBC驅動,支持的SSL協議有SSLv3、TLSv1、TLSv1.1、TLSv1.2。客戶端與數據庫之間實際使用何種SSL協議,依賴客戶端使用的JDK(Java Development Kit)版本,一般JDK支持多個SSL協議。
- 單擊“應用”。
系統將自動應用保存SSL連接設置,在“安全設置”頁面,“配置狀態”顯示“應用中”。當“配置狀態”顯示為“已同步”,表示配置已保存生效。
在gsql客戶端配置SSL認證相關的數字證書參數
DWS 在集群部署完成后,默認已開啟SSL認證模式。服務器端證書,私鑰以及根證書已經默認配置完成。用戶需要配置客戶端的相關參數。
- 登錄DWS 管理控制臺,在左側導航欄中,進入“連接管理”頁面。
- 在“下載驅動程序”區域,單擊“下載SSL證書”進行下載。
- 使用文件傳輸工具(例如WinSCP工具)將SSL證書上傳到客戶端主機。
例如,將下載的證書“dws_ssl_cert.zip”存放到“/home/dbadmin/dws_ssl/”目錄下。
- 使用SSH遠程連接工具(例如PuTTY)登錄gsql客戶端主機,然后執行以下命令進入SSL證書的存放目錄,并解壓SSL證書:
cd /home/dbadmin/dws_ssl/
unzip dws_ssl_cert.zip
- 在gsql客戶端主機上,執行export命令,配置SSL認證相關的數字證書參數。
SSL認證有兩種認證方式:雙向認證和單向認證,認證方式不同用戶所需配置的客戶端環境變量也不同,詳細介紹請參見下方“SSL認證方式及客戶端參數介紹”章節。
雙向認證需配置如下參數:
export PGSSLCERT=" /home/dbadmin/dws_ssl/sslcert/client.crt "
export PGSSLKEY=" /home/dbadmin/dws_ssl/sslcert/client.key "
export PGSSLMODE=" verify-ca "
export PGSSLROOTCERT=" /home/dbadmin/dws_ssl/sslcert/cacert.pem "
單向認證需要配置如下參數:
export PGSSLMODE="verify-ca"
export PGSSLROOTCERT=" /home/dbadmin/dws_ssl/sslcert/cacert.pem "
須知:
- 從安全性考慮,建議使用雙向認證方式。
- 配置客戶端環境變量,必須包含文件的絕對路徑。
- 修改客戶端密鑰的權限。
客戶端根證書,密鑰,證書以及密鑰密碼加密文件的權限,需保證權限為600。如果權限不滿足要求,則客戶端無法以SSL連接到集群。
chmod 600 client.key
chmod 600 client.crt
chmod 600 client.key.cipher
chmod 600 client.key.rand
chmod 600 cacert.pem
SSL認證方式及客戶端參數介紹
SSL認證有兩種認證方式,如下表所示。從安全性考慮,建議使用雙向認證方式。
認證方式
| 認證方式 | 含義 | 配置客戶端環境變量 | 維護建議 |
|---|---|---|---|
| 雙向認證(推薦) | 客戶端驗證服務器證書的有效性,同時服務器端也要驗證客戶端證書的有效性,只有認證成功,連接才能建立。 | 設置如下環境變量: PGSSLCERT PGSSLKEY PGSSLROOTCERT PGSSLMODE |
該方式應用于安全性要求較高的場景。使用此方式時,建議設置客戶端的PGSSLMODE變量為verify-ca。確保了網絡數據的安全性。 |
| 單向認證 | 客戶端只驗證服務器證書的有效性,而服務器端不驗證客戶端證書的有效性。服務器加載證書信息并發送給客戶端,客戶端使用根證書來驗證服務器端證書的有效性。 | 設置如下環境變量: PGSSLROOTCERT PGSSLMODE |
為防止基于TCP鏈接的欺騙,建議使用SSL證書認證功能。除配置客戶端根證書外,建議客戶端使用PGSSLMODE變量為verify-ca方式連接。 |
在客戶端配置SSL認證相關的環境變量,詳細信息請參見下表。
客戶端環境變量的路徑以“ /home/dbadmin /dws_ssl/”為例,在實際操作中請使用實際路徑進行替換。
客戶端參數
| 環境變量 | 描述 | 取值范圍 |
|---|---|---|
| PGSSLCERT | 指定客戶端證書文件,包含客戶端的公鑰。客戶端證書用以表明客戶端身份的合法性,公鑰將發送給對端用來對數據進行加密。 | 必須包含文件的絕對路徑,如: export PGSSLCERT='/home/dbadmin/dws_ssl/sslcert/client.crt ' 默認值 :空 |
| PGSSLKEY | 指定客戶端私鑰文件,用以數字簽名和對公鑰加密的數據進行解密。 | 必須包含文件的絕對路徑,如: export PGSSLKEY='/home/dbadmin/dws_ssl/sslcert/client.key ' 默認值 :空 |
| PGSSLMODE | 設置是否和服務器進行SSL連接協商,以及指定SSL連接的優先級。 | 取值及含義: disable:只嘗試非SSL連接。 allow:首先嘗試非SSL連接,如果連接失敗,再嘗試SSL連接。 prefer:首先嘗試SSL連接,如果連接失敗,將嘗試非SSL連接。 require:只嘗試SSL連接。如果存在CA文件,則按設置成verify-ca的方式驗證。 verify-ca:只嘗試SSL連接,并且驗證服務器是否具有由可信任的證書機構簽發的證書。 verify-full:DWS不支持此模式。 默認值:prefer 說明 若集群外訪問客戶端時,部分節點出現報錯:ssl SYSCALL error。則可執行export PGSSLMODE="allow"或export PGSSLMODE="prefer"。 |
| PGSSLROOTCERT | 指定為客戶端頒發證書的根證書文件,根證書用于驗證服務器證書的有效性。 | 必須包含文件的絕對路徑,如: export PGSSLROOTCERT='/home/dbadmin/dws_ssl/sslcert/certca.pem ' 默認值:空 |
| PGSSLCRL | 指定證書吊銷列表文件,用于驗證服務器證書是否在廢棄證書列表中,如果在,則服務器證書將會被視為無效證書。 | 必須包含文件的絕對路徑,如: export PGSSLCRL='/home/dbadmin/dws_ssl/sslcert/sslcrl-file.crl ' 默認值:空 |
客戶端和服務器端SSL連接參數組合情況
客戶端最終是否使用SSL加密連接方式、是否驗證服務器證書,取決于客戶端參數sslmode與服務器端(即DWS 集群側)參數ssl、require_ssl。參數說明如下:
- ssl (服務器)
ssl參數表示是否開啟SSL功能。on表示開啟,off表示關閉。
?默認為on,不支持在DWS 管理控制臺上設置。
- require_ssl (服務器)
require_ssl參數是設置服務器端是否強制要求SSL連接,該參數只有當ssl為on時才有效。on表示服務器端強制要求SSL連接。off表示服務器端對是否通過SSL連接不作強制要求。
?默認為off。require_ssl參數可通過DWS 管理控制臺上集群的“安全設置”頁面中的“服務器端是否強制使用SSL連接”進行設置。
- sslmode (客戶端)
可在SQL客戶端工具中進行設置。
?在gsql命令行客戶端中,為“PGSSLMODE”參數。
?在Data Studio客戶端中,為“SSL模式”參數。
客戶端參數sslmode與服務器端參數ssl、require_ssl配置組合結果如下:
客戶端與服務器端SSL參數組合結果
| ssl(服務器) | sslmode(客戶端) | require_ssl(服務器) | 結果 |
|---|---|---|---|
| on | disable | on | 由于服務器端要求使用SSL,但客戶端針對該連接禁用了SSL,因此無法建立連接。 |
| on | disable | off | 連接未加密。 |
| on | allow | on | 連接經過加密。 |
| on | allow | off | 連接未加密。 |
| on | prefer | on | 連接經過加密。 |
| on | prefer | off | 連接經過加密。 |
| on | require | on | 連接經過加密。 |
| on | require | off | 連接經過加密。 |
| on | verify-ca | on | 連接經過加密,且驗證了服務器證書。 |
| on | verify-ca | off | 連接經過加密,且驗證了服務器證書。 |
| off | disable | on | 連接未加密。 |
| off | disable | off | 連接未加密。 |
| off | allow | on | 連接未加密。 |
| off | allow | off | 連接未加密。 |
| off | prefer | on | 連接未加密。 |
| off | prefer | off | 連接未加密。 |
| off | require | on | 由于客戶端要求使用SSL,但服務器端禁用了SSL,因此無法建立連接。 |
| off | require | off | 由于客戶端要求使用SSL,但服務器端禁用了SSL,因此無法建立連接。 |
| off | verify-ca | on | 由于客戶端要求使用SSL,但服務器端禁用了SSL,因此無法建立連接。 |
| off | verify-ca | off | 由于客戶端要求使用SSL,但服務器端禁用了SSL,因此無法建立連接。 |