文档说明
本文档适用于 OceanBase 4.x 全版本集群,覆盖 客户端链路 SSL 加密、集群节点 RPC 链路 SSL 加密、证书生成、权限配置、全流程验证、常见报错排错,为生产环境标准化 SSL 加密落地手册,可直接用于等保合规加固、生产安全整改、日常运维自查。
在分布式数据库生产架构中,客户端与节点、节点与节点之间存在大量网络传输报文,明文传输存在窃听、篡改、中间人攻击风险。OceanBase 原生支持 SSL/TLS 传输加密,完全满足 等保三级、GDPR、PCI DSS合规要求。
核心价值如下:
OceanBase SSL 加密基于 OpenSSL 库实现,工作在 TCP 传输层,分为 客户端访问链路加密与 集群节点 RPC 通信加密两部分。
采用三级信任链:CA 根证书 → 服务端证书 → 客户端校验信任,私有化部署统一采用 file 本地文件模式,读取本地 wallet 证书目录。
在集群任意一台 OBServer 节点执行证书生成,生成后统一分发至所有节点。
bash
mkdir -p /home/admin/oceanbase/wallet
cd /home/admin/oceanbase/wallet
bash
# 生成CA私钥
openssl genrsa -out ca.key 2048
# 生成CA根证书,有效期10年
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out
ca.pem -subj
"/CN=OceanBase CA"
bash
# 生成服务端私钥
openssl genrsa -out server-key.pem 2048
# 生成证书请求文件
openssl req -new -key server-key.pem -out server.csr -subj
"/
CN=OBServer"
# CA签发服务端证书
openssl x509 -req -
in server.csr -CA ca.pem -CAkey ca.key -
CAcreateserial -out server-cert.pem -days 3650 -sha256
如需开启 SSL双向身份认证(服务端校验客户端合法性),需基于同一CA根证书,单独生成客户端专属证书与私钥,保证整套证书信任链统一。所有命令在证书目录执行,证书有效期统一为10年。
bash
# 1. 生成客户端私钥
openssl genrsa -out client-key.pem 2048
# 2. 生成客户端证书签名请求文件
openssl req -new -key client-key.pem -out client.csr -subj
"/CN=OB_CLIENT"
# 3. 使用统一CA根证书签发客户端证书
openssl x509 -req -
in client.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out client-cert.pem -days 3650 -sha256
关键规范:客户端、服务端证书必须由 同一套CA根证书签发,否则双向认证校验失败。
客户端证书文件需严格管控权限,避免私钥泄露,生产环境权限配置如下:
bash
# 客户端私钥仅属主可读写
chmod 600 client-key.pem
# 客户端证书允许只读访问
chmod 644 client-cert.pem
# 如需分发至客户端服务器,统一归属运维用户
chown admin:admin client-*
证书生成后必须校验 私钥与证书匹配性,不匹配直接导致 SSL 启动失败。
bash
# 校验服务端证书、私钥MD5一致性
echo
"服务端证书MD5:" && openssl x509 -noout -modulus -
in server-cert.pem | openssl md5
echo
"服务端私钥MD5:" && openssl rsa -noout -modulus -
in server-key.pem | openssl md5
统一校验规范:证书与对应私钥的 MD5 模数哈希值必须完全一致,即可判定证书与私钥配对合法、无篡改、无文件混用问题,满足生产加载标准。
双向认证场景下,需单独校验客户端证书与私钥匹配性,避免客户端证书异常导致连接失败,校验命令如下:
bash
# 校验客户端证书、私钥MD5一致性
echo
"客户端证书MD5:" && openssl x509 -noout -modulus -
in client-cert.pem | openssl md5
echo
"客户端私钥MD5:" && openssl rsa -noout -modulus -
in client-key.pem | openssl md5
统一校验规范:客户端证书与客户端私钥 MD5 模数哈希值需完全一致,同时客户端证书需由集群统一 CA 根证书签发,信任链完整无异常,方可用于双向 SSL 认证场景。
可通过以下命令快速校验客户端证书是否被CA根证书合法授信,验证整条信任链无异常:
bash
# 校验客户端证书信任链合法性
openssl verify -CAfile ca.pem client-cert.pem
统一校验规范:命令输出
client-cert.pem: OK代表客户端证书授信正常、签发合法、未过期、信任链完整,完全符合生产 SSL 双向认证接入要求。
将 wallet 目录完整同步至集群所有 OBServer 节点,并严格配置权限,权限错误会导致 SSL 加载失败。
bash
# 统一属主为数据库启动用户
chown -R admin:admin /home/admin/oceanbase/wallet
# 私钥严格只读权限
chmod 600 /home/admin/oceanbase/wallet/ca.key /home/admin/oceanbase/wallet/server-key.pem
# 证书文件全局可读
chmod 644 /home/admin/oceanbase/wallet/ca.pem /home/admin/oceanbase/wallet/server-cert.pem
强制规范:生产环境禁止私钥赋予 666/777 权限,避免安全风险。
使用 root@sys 账号登录集群执行以下参数配置,客户端 SSL 配置动态生效、无需重启集群。
sql
-- 1、指定证书读取模式为本地file模式
ALTER SYSTEM SET ssl_external_kms_info =
'{"ssl_mode":"file"}';
-- 2、开启SSL客户端双向认证
ALTER SYSTEM SET ssl_client_authentication =
'TRUE';
OceanBase 节点间默认明文 RPC 通信,需手动开启 SSL 白名单并重启进程生效。
sql
-- 方式1:全集群节点开启RPC SSL加密(推荐生产)
ALTER SYSTEM SET _ob_ssl_invited_nodes=
'ALL';
-- 方式2:指定IP节点开启(多IP逗号分隔)
-- ALTER SYSTEM SET
_ob_ssl_invited_nodes=
'192.168.5.25,192.168.5.26,192.168.5.27';
使用 obclient/mysql 客户端连接后执行 \s,查看 SSL 字段:
出现 SSL: Cipher in use is ECDHE-RSA-AES256-GCM-SHA384 代表加密链路正常。
OceanBase 开启SSL加密后,客户端需携带证书参数连接,以下为标准化连接命令,支持 obclient、mysql 客户端,分为单向认证、双向认证两种场景。
1、单向SSL认证连接(仅校验服务端证书,常用)
bash
# 语法:obclient -h集群IP -P端口 -u用户名 -p密码 --ssl-ca=CA根证书路径
obclient -h127.0.0.1 -P2881 -uroot@sys -p******** \
--ssl-ca=/home/admin/oceanbase/wallet/ca.pem
2、双向SSL认证连接(客户端+服务端互验,满足高等级合规)
bash
# 需提前配置客户端专属证书文件,完整加密连接命令
obclient -h127.0.0.1 -P2881 -uroot@sys -p******** \
--ssl-ca=/home/admin/oceanbase/wallet/ca.pem \
--ssl-cert=/home/admin/oceanbase/wallet/client-cert.pem \
--ssl-key=/home/admin/oceanbase/wallet/client-key.pem
3、连接后手动校验SSL状态
sql
-- 客户端连接后执行,查看SSL加密状态
\s
-- 查看全局SSL开启状态
show global variables like
'%ssl%';
统一连接校验规范:
方式一:日志校验
检索 observer 日志
rpc connection accept,
use_ssl=True即加密生效。
方式二:抓包校验
节点间通信报文显示为 TLSv1.2/TLSv1.3 密文,无明文 SQL、报文,即为正常加密。
问题原因:证书私钥不匹配、文件名不规范、文件权限不足。
解决方法:
问题原因:新旧 CA 证书、私钥混用,文件残留导致不配对。
解决方法:清空所有旧证书文件,重新完整生成 CA+服务端证书链。
bash
rm -rf ca.* server.*
问题原因:ssl_external_kms_info 参数 JSON 格式错误、含空格、含多余字符。
解决方法:使用标准固定语句配置,不自定义多余参数。
问题原因:强制 SSL 开启后,旧客户端未携带 SSL 证书参数、直连端口不支持加密。
解决方法:
本文档覆盖 OceanBase SSL 原理、证书生成、权限配置、客户端加密、节点RPC加密、重启规范、验证手段、全量报错排错,是一套可直接用于生产安全加固、等保整改、日常运维的标准化落地手册,所有步骤经过生产验证,可直接复制执行。
如果在操作过程中遇到问题,欢迎在评论区留言交流,后续我们会持续分享更多实战运维干货,记得 关注不迷路 ,下次见~
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70047467/viewspace-3180898/ ,如需转载,请注明出处,否则将追究法律责任。