---
title: "OBServer 传输加密 - OceanBase 数据库 V4.2.5 | OceanBase 文档中心"
description: OBServer 传输加密 OBServer 节点、liboblog、obadmin 等组件的底层通信均依赖 Libeasy 库，因此支持的私钥/证书加载方式均相同（本地文件模式），即将 CA 证书、用户证书、私钥放在 wallet 文件夹下，根据配置项开启时从该目录下读取加载。 开启方式 OBServer 传输加密…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.2.5 LTS

# OBServer 传输加密

更新时间：2026-04-16 13:09:50

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.2.5/zh-CN/600.manage/500.security-and-permissions/400.data-transfer-encryption/200.observer-in-transmission-encryption.md)  

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

## 开启方式

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

1. 使用 root 用户登录数据库的 sys 租户。
 2. 指定私钥/证书/CA 证书的获取方式。

   #### 说明

   OceanBase 数据库社区版在配置 OBServer 传输加密时请忽略该步骤。

   ```sql
   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](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001502211)。

        ```sql
        ALTER SYSTEM SET sql_protocol_min_tls_version = 'TLSv1.1';

        ```
      2. 可以通过配置项 `ssl_client_authentication` 开启 SSL 连接。有关开启 SSL 连接的更多信息，请参见 [ssl_client_authentication](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001502220)。

        ```sql
        --配置为 TRUE 后，MySQL 通信 SSL 即时开启
        ALTER SYSTEM SET ssl_client_authentication = 'TRUE';

        ```
 4. 配置 RPC 通信的 SSL 白名单，由于 OBServer 之间 TCP 连接都是长连接，因此需要重启 OBServer 后 RPC SSL 加密通信才能开启。

   ```sql
   --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';

   ```

### 配置 TLS 免密认证

在不需要验证 OBserver 身份的情况下，TLS 免密认证允许客户端不加载 CA 证书，否则需要加载 CA 证书。本节介绍如何配置和使用 TLS 免密认证。

#### 配置步骤

1. 配置证书

   确保 CA 证书文件（ca.pem）包含双方的证书信息。内容如下：

   ```shell
   CopyInsert
   // ca.pem 文件内容示例
   -----BEGIN CERTIFICATE-----
   // OBserver 的 CA 证书
   -----END CERTIFICATE-----
   -----BEGIN CERTIFICATE-----
   // 客户端的 CA 证书
   -----END CERTIFICATE-----

   ```

   示例：

   ```shell
   -----BEGIN CERTIFICATE-----
   MIIDpzCCAo+gAwIBAgIJALjo7NLQCbMwMA0GCSqGSIb3DQEBCwUAMGoxCzAJBgNV
   BAYTAkNOMRAwDgYDVQQIDAdCZWlqaW5nMRkwFwYDVQQHDBBIYWlkaWFuIERpc3Ry
   aWN0MQswCQYDVQQKDAJPQjEMMAoGA1UECwwDc3lzMRMwEQYDVQQDDAp3emhfY2Ff
   cGVtMB4X
   -----END CERTIFICATE-----
   -----BEGIN CERTIFICATE-----
   MIIDAzCCAeugAwIBAgIBATANBgkqhkiG9w0BAQsFADA8MTowOAYDVQQDDDFNeVNR
   TF9TZXJ2ZXJfNS43LjI0X0F1dG9fR2VuZXJhdGVkX0NBX0NlcnRpZmljYXRlMB4X
   DTE5MDQyOTA5MDc1NVoXDTI5MDQyNjA5MDc1NVowPDE6MDgGA1UEAwwxTXlTUUxf
   U2VydmVy
   -----END CERTIFICATE-----

   ```
 2. 提取证书信息

   提取证书的 `SUBJECT` 和 `ISSUER` 字段，格式化为文件路径样式。

   ```shell
   // SUBJECT
   $ openssl x509 -noout -subject -in client-cert.pem | sed 's/.\{8\}//'  | sed 's/, /\//g' | sed 's/ = /=/g' | sed 's/^/\//'
   /C=CN/ST=Beijing/L=Haidian District/O=OB/OU=sys/CN=client_pem
   // ISSUER
   $ openssl x509 -noout -issuer  -in client-cert.pem | sed 's/.\{7\}//'  | sed 's/, /\//g' | sed 's/ = /=/g' | sed 's/^/\//'
   /C=CN/ST=Beijing/L=Haidian District/O=OB/OU=sys/CN=ca_pem

   ```
 3. 创建用户

   连接数据库后，创建用户时使用 `REQUIRE` 字段指定证书。没有指定密码的情况下，默认密码为空。

   ```sql
   CREATE USER tony user tony require SUBJECT '/C=CN/ST=Beijing/L=Haidian District/O=OB/OU=sys/CN=client_pem';

   ```
 4. 使用证书登录

   ```shell
   $obclient -h100.88.109.171 -P28205 -uuser1@sys  --ssl-ca=/home/user1/wallet2/ca.pem --ssl-cert=/home/user1/wallet2/client-cert.pem --ssl-key=/home/user1/wallet2/client-key.pem

   ```

   返回结果如下：

   ```shell
   Welcome to the OceanBase monitor.  Commands end with ; or \g.
   Your OceanBase connection id is 3221503926
   Server version: 5.7.25 OceanBase 4.2.5.1 (r1-9e815083770a3f4a7c9bffd93493d96b58aea72f) (Built Nov 11 2024 11:52:31)

   Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved.

   Oracle is a registered trademark of Oracle Corporation and/or its
   affiliates. Other names may be trademarks of their respective
   owners.

   Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

   ```

#### 常见问题说明

1. 证书认证方式

- 双向认证：客户端指定 `--ssl-ca` 时，双方都需要验证对方的证书。
 - 单向认证：客户端不指定 `--ssl-ca` 时，只有 OBserver 验证客户端证书。

2. 可能的登录失败原因

- 空密码登录失败：TLS 免密认证必须使用证书。空密码登录会报错 `ERROR 1045 (42000): Access denied for user 'tony'@'xxx.xxx.xxx.xxx' (using password: NO)`。
 - 证书验证失败：
     - 客户端指定 `--ssl-ca` 进行双向认证时，OBserver 的 `ca.pem` 未包含客户端的 CA 证书，或客户端的 `ca.pem` 未包含 OBserver 的 CA 证书，会报错 `ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)`。
     - 证书格式不正确或已过期。

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

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

- OBClient/MySQL 客户端登录 OBServer，系统租户检索 `oceanbase.GV$OB_SERVERS` 视图的 `ssl_cert_expired_time` 字段确认是否开启。
 - 该字段记录当前 OBServer 开启 SSL 时，当前 OBServer 使用的 SSL 证书过期时间，utc 时间，单位微秒。

  ```shell
  obclient> select svr_ip, svr_port,zone, ssl_cert_expired_time, from_unixtime(ssl_cert_expired_time/1000000) from oceanbase.GV$OB_SERVERS;
  +--------------+----------+-------+----------------------+---------------------------------------------+
  | svr_ip       | svr_port | zone  | ssl_cert_expired_time | from_unixtime(ssl_key_expired_time/1000000) |
  +--------------+----------+-------+----------------------+---------------------------------------------+
  | 100.xx.xx.xx |    13212 | zone1 |           1871860075 | 2029-04-26 09:07:55                         |
  +--------------+----------+-------+----------------------+---------------------------------------------+
  1 row in set (0.00 sec)

  ```

### 检查 MySQL 端口是否开启 SSL

通过 MySQL 客户端/OBClient 登录，执行`\s`查看 SSL 字段的示例如下：

```shell
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.39
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 是否开启成功。

#### 说明

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

  上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
