联系我们
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;