上一期我們講了關於 OceanBase 安全審計的《身份鑑別》和《用户管理與訪問控制》 兩個部分,OceanBase 的安全機制介紹其支持傳輸加密,今天我們主要來實踐一下如何配置傳輸加密以及驗證是否真的加密。
作者:金長龍
愛可生測試工程師,負責 DMP 產品的測試工作。
作者:陳慧明
愛可生測試工程師,主要參與 DMP 和 DBLE 自動化測試項目。
本文來源:原創投稿
* 愛可生開源社區出品,原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。
OceanBase 的安全機制介紹其支持傳輸加密,今天我們主要來實踐一下如何配置傳輸加密以及驗證是否真的加密。
環境準備
- 企業版 OceanBase 4.1 集羣(3 節點) + OBProxy
- 配置 CA、服務端、客户端證書
OceanBase 社區版也可以實現。
OBServer 傳輸加密
2.1 開啓加密
OceanBase 傳輸加密的開啓通過多個配置項配合使用。
通過 root 用户登錄 sys 租户
指定私鑰/證書/CA 證書的獲取方式
alter system set ssl_external_kms_info = '
{
"ssl_mode":"file"
}';
配置 MySQL 端口 SSL 通信
alter system set ssl_client_authentication = 'TRUE';
# 配置為 TRUE 後,MySQL 通信 SSL 即時開啓。
配置 RPC 通信的 SSL 白名單
由於 OBServer 之間 TCP 連接都是長連接,因此需要重啓 OBServer 後 RPC SSL 加密通信才能開啓。
# RPC 通信 SSL 需要配置白名單。
# 整個集羣都開啓。
alter system set _ob_ssl_invited_nodes='ALL';
# 指定 IP 的 OBServer 開啓 SSL。
alter system set _ob_ssl_invited_nodes='135.xxx.xx.xx, 128.xxx.xx.xx';
2.2 驗證加密
MySQL 端口(2881)
通過 \s 查看。
抓包。
RPC 端口(2882)
日誌檢索 rpc connection accept,查看 use_ssl 的值是 True 還是 False。
抓包。
ODP 傳輸加密
使用了 OBProxy 之後,客户端跟 OceanBase 建立加密連接,實際是跟 OBProxy 建立加密連接,然後 OBProxy 跟 OBServer 再建立加密連接。 按照這個理解,前面服務端 OceanBase 集羣開啓 SSL 客户端認證也是個必要的前提了。
3.1 開啓加密
- 使用 OBProxy 的
root@proxysys賬號登錄。 - 設置證書、公鑰、私鑰。
UPDATE proxyconfig.security_config SET CONFIG_VAL= '{"sourceType" : "FILE", "CA" : "certs/ca.pem", "publicKey" : "certs/client-cert.pem", "privateKey" : "certs/client-key.pem"}' WHERE APP_NAME = 'obproxy' and VERSION = '1';
注意:這裏配置的公鑰和私鑰,是前面生成的 Client 端證書,而不是 Server 端的。因為 OBProxy 作為客户端和服務端鏈路中間重要的一環,是客户端的“服務端”,同時也是 OceanBase 服務端的“客户端”。
檢查是否設置成功。
配置客户端和 OBProxy 開啓 SSL 連接。
alter proxyconfig set enable_client_ssl=true;
配置 OBProxy 和 OBServer 開啓 SSL 連接。
alter proxyconfig set enable_server_ssl=true;
用業務租户的管理員賬户登錄,設置 SSL 白名單。
alter system set ob_ssl_invited_common_names="obclient";
# 這個參數是租户級別的,需要在要連接的租户裏設置,立即生效,不需要重啓實例或者集羣。
注意:ob_ssl_invited_common_names的值要設置成和 Client 端證書 subject 中的cn(common name)字段一致。
3.2 驗證加密
客户端和 OBProxy 的連接
OBProxy 和 OBServer 的連接
總結
實際配置和驗證的過程也踩了幾個坑,還是要結合文檔多加理解和消化。