聯系我們
18591797788
hubin@rlctech.com
北京市海淀區中關村南大街乙12號院天作國際B座1708室
18681942657
lvyuan@rlctech.com
上海市浦東新區商城路660號樂凱大廈26c-1
18049488781
xieyi@rlctech.com
廣州市越秀區東風東路華宮大廈808號1608房
029-81109312
service@rlctech.com
西安市高新區天谷七路996號西安國家數字出版基地C座501
SSL(Secure Socket Layer)是基于 TCP/IP 傳輸通信協議實現的安全協議,采用公開密鑰技術,廣泛支持各類網絡,提供三種基礎安全服務。
為全面提升數據安全,OceanBase 全數據鏈路(Observer、Obproxy、JDBC 驅動層)均已全面支持 SSL 加密訪問。
| 參數名稱 | 默認值 | 描述 |
|---|---|---|
| disableSslHostnameVerification | false | 使用 SSL 時,驅動會校驗服務器證書中的主機名(備用名稱/證書 CN),防范中間人攻擊;該參數可關閉校驗,需配合 trustServerCertificate=true 使用 |
| useSSL | false | 強制啟用 SSL 連接 |
| trustStore | null | 信任庫文件路徑,等價于 Java 屬性 javax.net.ssl.trustStore |
| trustStorePassword | 無 | 信任庫密碼,等價于 Java 屬性 javax.net.ssl.trustStorePassword |
使用 SSL 功能需完成全鏈路 SSL 開啟 + 證書生成 兩步核心操作。
# 1. 生成 RSA 私鑰openssl genrsa 2048 > cakey.pem# 2. 創建 CA 證書openssl req -new -x509 -nodes -days 3600 -key cakey.pem -out ca.pem
# 1. 生成私鑰與證書請求文件openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem# 2. 寫入 RSAopenssl rsa -in server-key.pem -out server-key.pem# 3. CA 簽名(必須填寫 common name:observer)openssl x509 -req -in server-req.pem -days 3600 -CA ca.pem -CAkey cakey.pem -set_serial 01 -out server-cert.pem
# 1. 生成私鑰與證書請求文件openssl req -newkey rsa:2048 -days 3600 -nodes -keyout client-key.pem -out client-req.pem# 2. 寫入 RSAopenssl rsa -in client-key.pem -out client-key.pem# 3. CA 簽名(必須填寫 common name:obclient)openssl x509 -req -in client-req.pem -days 3600 -CA ca.pem -CAkey cakey.pem -set_serial 01 -out client-cert.pem
# 1. 生成私鑰與證書請求文件openssl req -newkey rsa:2048 -days 3600 -nodes -keyout proxy-key.pem -out proxy-req.pem# 2. 寫入 RSAopenssl rsa -in proxy-key.pem -out proxy-key.pem# 3. CA 簽名openssl x509 -req -in proxy-req.pem -days 3600 -CA ca.pem -CAkey cakey.pem -set_serial 01 -out proxy-cert.pem
# 1. 創建證書存放目錄mkdir /home/admin/oceanbase/wallet# 2. 拷貝證書文件至目錄cp ca.pem server-cert.pem server-key.pem /home/admin/oceanbase/wallet/
-- 3. 關閉 SSL(初始狀態)
alter system set ssl_client_authentication=FALSE;
-- 4. 設置 kms_info 為 file
alter system set ssl_external_kms_info = '{"ssl_mode":"file"}';
-- 5. 開啟客戶端 SSL 認證
alter system set ssl_client_authentication=TRUE;
-- 6. 設置 SSL 白名單(允許 obclient、obproxy 連接)
alter system set ob_ssl_invited_common_names='obclient,obproxy' tenant=all;
obclient 連接 Observerselect * from oceanbase.__all_virtual_processlist where ssl_cipher is not null;
# 1. 放置證書至 wallet 目錄cp ca.pem proxy-cert.pem proxy-key.pem /home/xuping.lz/ob9.proxy0/wallet/
-- 2. 連接 Obproxy(使用 proxysys 賬戶)
mysql -h 192.168.0.XX -P 1XX3 -u root@proxysys -paaAA11__
-- 3. 配置證書路徑
update proxyconfig.security_config set CONFIG_VAL= '{"sourceType" : "FILE", "CA" : "/home/xuping.lz/ob9.proxy0/wallet/ca.pem", "publicKey" : "/home/xuping.lz/ob9.proxy0/wallet/proxy-cert.pem", "privateKey" : "/home/xuping.lz/ob9.proxy0/wallet/proxy-key.pem"}' where APP_NAME = 'obprox ' and VERSION = '1';
-- 4. 開啟客戶端/服務端 SSL
alter proxyconfig set enable_client_ssl=true;
alter proxyconfig set enable_server_ssl=true;
-- 查看證書配置
select CONFIG_VAL from proxyconfig.security_config where APP_NAME = 'obproxy';
-- 查看 SSL 相關配置
show proxyconfig like '%ssl%';
-- 創建必須使用 SSL 連接的用戶
create user testssl identified by '123456' require ssl;
-- 授權
grant all on *.* to testssl@'%';
sudo /opt/taobao/java/jre/bin/keytool -import -alias mysqlServerCACert -file /home/xuping.lz/wallet/ca.pem -keystore test.jks# 輸入密碼:123456
openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -out client.p12 -name clientalias -CAfile ca-cert.pem# 輸入密碼:123456
keytool -importkeystore -deststorepass 123456 -destkeystore test.jks -srckeystore client.p12 -srcstoretype PKCS12 -srcstorepass 123456 -alias clientalias
String url = "jdbc:oceanbase://192.168.0.XX:1xxx1/sys?user=testssl&password=123456&pool=false&useSSL=true&disableSslHostnameVerification=true&trustStore=http://100.81.152.xx:7xx7/wallet/truststore.jks&trustStorePassword=123456";
// 方式1:連接串配置String url = "jdbc:oceanbase://192.168.0.XX:1xxx1/sys?user=testssl&password=123456&pool=false&useSSL=true&disableSslHostnameVerification=true";// 方式2:系統屬性配置System.setProperty("javax.net.ssl.trustStore", "/Users/lize/Downloads/test.jks");System.setProperty("javax.net.ssl.trustStorePassword", "123456");Class.forName("com.oceanbase.jdbc.Driver");Connection connection = DriverManager.getConnection(url);
common name;