首批通过分布式安全可靠测评,为关键业务系统打造
数据传输加密
更新时间:2026-04-07 20:57:20
安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。OceanBase 数据库在原有的 TCP 通信上扩展支持 SSL/TLS 协议,解决通信加密的问题。
OceanBase 数据库从产品架构层面可以分为以下三个基本部分。

其中采用两种协议进行通信:
MySQL 协议:驱动层 <=> 数据链路层,数据链路层 <=> DB 层之间的通信采用扩展的 MySQL 协议。
OB-RPC 协议:节点与节点之间或节点与 liboblog、ob_admin 等之间的通信采用节点自有的 RPC 协议通信。
其中数据链路层,DB 层的 OBServer 节点、liboblog、ob_admin 等组件均支持 SSL/TLS 加密通信,底层均依赖 OpenSSL 或者第三方的 SSL 库,为业务提供安全的加密传输服务。
支持的私钥/证书加载方式
OBServer 节点、liboblog、obadmin 等组件的底层通信均依赖 Libeasy 库,因此支持的私钥/证书加载方式均相同(本地文件模式),即将 CA 证书、用户证书、私钥放在 wallet 文件夹下,根据配置项开启时从该目录下读取加载。
开启方式
节点传输加密的开启通过多个配置项配合使用。
指定私钥/证书/CA 证书的获取方式。
本地文件模式
alter system set ssl_external_kms_info = ' { "ssl_mode":"file" }';配置对应协议的 SSL 使能。
alter system set ssl_client_authentication = 'TRUE'; 配置为TRUE后,mysql通信ssl即时开启配置 RPC 通信的 SSL 白名单,由于节点之间 TCP 连接都是长连接,因此需要重启节点后 RPC SSL 加密通信才能开启。
rpc通信ssl需要配置白名单 alter system set _ob_ssl_invited_nodes='ALL'; 整个集群都开启 alter system set _ob_ssl_invited_nodes='xx.xx.xx.xx, xx.xx.xx.xx'; 指定ip的observer开启 ssl
节点如何确定通信加密开启成功
最简单的方法是对 MySQL 端口和 RPC 端口进行抓包,查看是否开启加密,此外可以通过以下方式:
OBClient/MySQL 登录节点,系统租户检索
oceanbase.GV$OB_SERVERS表的ssl_key_expired_time字段确认是否开启。该字段记录当前节点开启 SSL 时,当前节点使用的 SSL 证书过期时间,utc 时间,单位微秒。
obclient> select svr_ip, svr_port,zone, ssl_key_expired_time, from_unixtime(ssl_key_expired_time/1000000) from oceanbase.GV$OB_SERVERS; +-----------------+----------+-------+----------------------+---------------------------------------------+ | svr_ip | svr_port | zone | ssl_key_expired_time | from_unixtime(ssl_key_expired_time/1000000) | +-----------------+----------+-------+----------------------+---------------------------------------------+ | xxx.xxx.xxx.xxx | 13212 | zone1 | 1871860075 | 2029-04-26 09:07:55 | +-----------------+----------+-------+----------------------+---------------------------------------------+ 1 row in set (0.00 sec)
检查 MySQL 端口是否开启 SSL
通过 MySQL/OBClient 登录,执行\s查看 SSL 字段的示例如下:
obclient> \s
--------------
obclient Ver 1.1.8 Distrib 5.7.24, for Linux (x86_64) using EditLine wrapper
Connection id: 3221506046
Current database: test
Current user: root@xx.xx.xx.xx
SSL: Cipher in use is DHE-RSA-AES128-GCM-SHA256
Current pager: less
Using outfile: ''
Using delimiter: ;
Server version: 5.7.25 OceanBase 2.2.60 (r1-63cbd3084a3283523f09d6ba20795f77b95e046b) (Built Jun 30 2020 10:10:29)
Protocol version: 10
Connection: xx.xx.xx.189 via TCP/IP
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
TCP port: 13213
Active --------------
检查 RPC 端口是否开启 SSL
在 OBServer.log 中的日志,搜索关键字 "rpc connection accept" 查看 use_ssl = True 还是 False 判定是否 RPC SSL 开启成功。