0
0
0
0
博客/.../

TiDB 客户端服务端间通信开启加密传输

 gary  发表于  2026-08-05

一、前言

在数据库系统的日常运维中,数据传输安全是保障业务稳健运行的关键一环。默认情况下,TiDB 服务端与客户端之间采用非加密连接,这意味着第三方如果能够监控信道流量,就可能获取双方发送和接收的数据,其中包括查询语句内容、查询结果等敏感信息。尤其当客户端通过公网连接到 TiDB 服务端时,非加密连接存在较大的信息泄露风险。为了有效应对这一安全挑战,TiDB 提供了基于 TLS 协议的加密连接支持。开启加密传输后,客户端与服务端之间的通信能够获得多重安全保障:流量明文会被加密以防止窃听,数据完整性得以保护以防止篡改,并且可选地进行双方身份验证,以有效规避中间人攻击。本文将系统介绍为 TiDB 客户端与服务端间通信开启加密传输的几种主要方法。

二、创建一个干净的目录来存放所有证书文件

mkdir -p ~/tls_certs && cd ~/tls_certs

三、生成 CA 私钥和证书

cd ~/tls_certs
openssl genrsa -out ca-key.pem 2048
openssl req -new -x509 -days 3650 -key ca-key.pem -out ca.pem -subj "/C=CN/ST=Guangdong/L=Guangzhou/O=TiDB/OU=DB/CN=TiDB CA"
ls -la ca*.pem

四、生成服务端私钥和证书签名请求

openssl genrsa -out server-key.pem 2048
openssl req -new -key server-key.pem -out server-req.pem -subj "/C=CN/ST=Guangdong/L=Guangzhou/O=TiDB/OU=DB/CN=192.168.2.80"

五、用 CA 签署服务端证书

openssl x509 -req -in server-req.pem -days 3650 -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem
ls -la server*.pem

六、生成客户端私钥和证书签名请求

openssl genrsa -out client-key.pem 2048
openssl req -new -key client-key.pem -out client-req.pem -subj "/C=CN/ST=Guangdong/L=Guangzhou/O=TiDB/OU=DB/CN=client"

七、用 CA 签署客户端证书

openssl x509 -req -in server-req.pem -days 3650 -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem
ls -la server*.pem

八、生成客户端私钥和证书签名请求

openssl genrsa -out client-key.pem 2048
openssl req -new -key client-key.pem -out client-req.pem -subj "/C=CN/ST=Guangdong/L=Guangzhou/O=TiDB/OU=DB/CN=client"

九、用 CA 签署客户端证书

openssl x509 -req -in client-req.pem -days 3650 -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out client-cert.pem
ls -la client*.pem

十、清理临时请求文件(保留证书和私钥)

rm -f server-req.pem client-req.pem ca.srl

十一、验证所有证书

openssl verify -CAfile ca.pem server-cert.pem
openssl verify -CAfile ca.pem client-cert.pem

十二、查看最终文件列表

[tidb@tidb80 tls_certs]$ ls -la
总用量 32
drwxrwxr-x   2 tidb tidb 4096 6月  24 17:13 .
drwx------. 11 tidb tidb 4096 6月  24 17:29 ..
-rw-rw-r--   1 tidb tidb 1679 6月  24 17:13 ca-key.pem
-rw-rw-r--   1 tidb tidb 1306 6月  24 17:13 ca.pem
-rw-rw-r--   1 tidb tidb 1188 6月  24 17:13 client-cert.pem
-rw-rw-r--   1 tidb tidb 1679 6月  24 17:13 client-key.pem
-rw-rw-r--   1 tidb tidb 1196 6月  24 17:13 server-cert.pem
-rw-rw-r--   1 tidb tidb 1679 6月  24 17:13 server-key.pem

十三、集群配置指定手动配置的证书

十四、重启tidb服务器,查看tidb日志输出 mysql protocol server secure connection is enabled

tiup cluster reload tidb-test -R tidb

十五、TiDB 服务端当前的 SSL 相关配置状态

十六、创建用户test1指定 REQUIRE SSL 要求指定用户必须使用 TLS 连接来连接 TiDB

CREATE USER 'test1'@'%' IDENTIFIED BY 'test1' REQUIRE SSL;
grant all privileges on *.* to 'test1'@'%' with grant option;
flush privileges;
mysql -h192.168.2.80 -P4000 -utest1 -ptest1  \
     --ssl-ca /home/tidb/tls_certs/ca.pem \
     --ssl-cert /home/tidb/tls_certs/client-cert.pem \
     --ssl-key /home/tidb/tls_certs/client-key.pem

十七、通过配置系统变量 require_secure_transport 要求所有用户必须使用加密连接来连接到 TiDB

set global require_secure_transport=on;
MySQL [(none)]> show global variables like 'require_secure_transport';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| require_secure_transport | ON    |
+--------------------------+-------+

mysql -h192.168.2.80 -P4000 -uroot -proot \
  --ssl-ca=/data/tidb-deploy/tidb-4000/tls/ca.crt \
  --ssl-cert=/data/tidb-deploy/tidb-4000/tls/tidb.crt \
  --ssl-key=/data/tidb-deploy/tidb-4000/tls/tidb.pem

十八、单向 TLS

十九、总结

手动配置证书是生产环境的首选方案。它要求运维人员提前通过权威 CA或内部 PKI 系统生成并配置 ssl-cert 和 ssl-key。虽然操作步骤相对复杂,但它提供了企业级的安全性,支持严格的证书生命周期管理,且能配合 ssl-ca 实现双向身份验证,有效防止中间人攻击。 相对而言,自动生成证书(auto-tls)则极大地降低了入门门槛。通过在配置文件中设置 auto-tls = true,TiDB 在启动时会自动生成自签名证书。此方法“开箱即用”,省去了繁琐的证书申请流程,非常适合开发测试环境或对初期安全要求不高的场景。但需要注意的是,由于不涉及客户端身份验证,其安全防护等级较手动方案有所不及。

0
0
0
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论