跳到主要内容

seekdb 传输加密

seekdb 节点、liboblog、obadmin 等组件的底层通信均依赖 Libeasy 库,因此支持的私钥/证书加载方式均相同(本地文件模式),即将 CA 证书、用户证书、私钥放在 wallet 文件夹下,根据配置项开启时从该目录下读取加载。

开启方式

seekdb 传输加密的开启通过多个配置项配合使用。

  1. 使用 root 用户登录 seekdb。

  2. 指定私钥/证书/CA 证书的获取方式。

    ALTER SYSTEM SET ssl_external_kms_info = '
    {
    "ssl_mode":"file"
    }';
  3. 配置 MySQL 端口 SSL 通信。

    默认 MySQL 端口 SSL 通信是关闭的。先需要指定 SSL 协议的版本号后开启 SSL 通信,修改后实时生效。

    1. 可以通过配置项 sql_protocol_min_tls_version 指定 SSL 协议的版本号。目前支持的 SSL 协议的版本号包括 TLSv1、TLSv1.1、TLSv1.2 和 TLSv1.3,当指定版本号后,支持指定的版本号及其以上的版本协议。有关开启 SSL 连接的更多信息,请参见 sql_protocol_min_tls_version

      ALTER SYSTEM SET sql_protocol_min_tls_version = 'TLSv1.1';
    2. 可以通过配置项 ssl_client_authentication 开启 SSL 连接。有关开启 SSL 连接的更多信息,请参见 ssl_client_authentication

      --配置为 TRUE 后,MySQL 通信 SSL 即时开启
      ALTER SYSTEM SET ssl_client_authentication = 'TRUE';
  4. 配置 RPC 通信的 SSL 白名单,由于 seekdb 之间 TCP 连接都是长连接,因此需要重启 seekdb 后 RPC SSL 加密通信才能开启。

    --rpc 通信 ssl 需要配置白名单
    ALTER SYSTEM SET _ob_ssl_invited_nodes='ALL';
    --指定 ip
    ALTER SYSTEM SET _ob_ssl_invited_nodes='135.xxx.xx.xx';

seekdb 如何确定通信加密开启成功

最简单的方法是对 MySQL 端口和 RPC 端口进行抓包,查看是否开启加密,此外可以通过以下方式:

  • MySQL 客户端登录 seekdb,检索 oceanbase.GV$OB_SERVERS 视图的 ssl_cert_expired_time 字段确认是否开启。

  • 该字段记录当前 seekdb 开启 SSL 时,当前 seekdb 使用的 SSL 证书过期时间,utc 时间,单位微秒。

    select ssl_cert_expired_time, from_unixtime(ssl_cert_expired_time/1000000) from oceanbase.GV$OB_SERVERS;
    +----------------------+---------------------------------------------+
    | ssl_cert_expired_time | from_unixtime(ssl_key_expired_time/1000000) |
    +----------------------+---------------------------------------------+
    | 1871860075 | 2029-04-26 09:07:55 |
    +----------------------+---------------------------------------------+
    1 row in set (0.00 sec)

检查 MySQL 端口是否开启 SSL

通过 MySQL 客户端登录,执行\s查看 SSL 字段的示例如下:

\s
--------------
mysql Ver 15.1 Distrib 10.5.27-MariaDB, for Linux (x86_64) using readline 5.1

Connection id: 3221537922
Current database:
Current user: root@127.0.0.1
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server: MySQL
Server version: 5.7.25 OceanBase 4.3.5.3 SeekDB (r1.0.0.0) (Built 100000262025111218-5343637512e28c346f938516af53b7879d4d5974 Nov 12 2025)
Protocol version: 10
Connection: 127.0.0.1 via TCP/IP
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
TCP port: 2881
Active --------------

检查 RPC 端口是否开启 SSL

observer.log 中的日志,搜索关键字 "rpc connection accept" 查看 use_ssl 的值是 True 还是 False 来判定 RPC SSL 是否开启成功。

提示

对于 RPC 连接,目前重启 seekdb 才能生效,或者不重启 seekdb 断开已有 RPC 连接才生效。