跳到主要内容

MySQL 安全传输

本文档介绍如何为 Apache Doris 与 MySQL 客户端之间的通信启用 SSL/TLS 加密,包含快速启用、客户端连接方式、mTLS 双向认证、自定义证书配置以及证书生成等完整流程。

适用场景

场景推荐方案
一般业务的数据传输加密启用单向认证(默认)
金融、政企等合规场景启用 mTLS 双向认证
需要使用企业内部 CA 颁发的证书配置自定义证书
仅在 PoC 或开发环境快速验证使用 Doris 内置默认证书

前置条件

  • Apache Doris 集群已部署并正常运行
  • MySQL 客户端版本 ≥ 5.7.11(低版本客户端 SSL 参数语法不同)
  • 当前支持的 TLS 协议版本:TLS 1.2 和 TLS 1.3
  • 拥有 FE 节点 conf/fe.conf 的修改权限以及重启 FE 的运维权限

流程总览

  1. 在 FE 配置中启用 SSL(如需更高安全级别,再启用 mTLS)
  2. 重启 FE 使配置生效
  3. 使用 MySQL 客户端通过指定的 --ssl-mode 参数发起加密连接
  4. (可选)替换默认证书为自定义证书

SSL 认证模式对比

Doris 提供两种 SSL 认证模式,可按安全需求选择:

认证模式说明适用场景
单向认证(默认)仅验证服务端证书一般安全需求场景
双向认证(mTLS)同时验证服务端和客户端证书高安全需求场景

快速开始:启用 SSL 加密连接

Doris 内置了默认的密钥证书文件,无需额外生成证书即可启用 SSL。整体只需两步:

步骤 1:开启 FE 的 SSL 功能

修改 FE 配置文件 conf/fe.conf,添加以下配置后重启 FE:

enable_ssl = true

步骤 2:使用 MySQL 客户端连接

mysql --ssl-mode=REQUIRED -uroot -P9030 -h127.0.0.1

客户端 SSL 连接模式

MySQL 客户端通过 --ssl-mode 参数控制连接行为,可选模式如下:

SSL 模式说明命令示例
PREFERRED(默认)优先尝试 SSL 连接,失败则回退到普通连接mysql -uroot -P9030 -h127.0.0.1
DISABLE禁用 SSL,使用普通连接mysql --ssl-mode=DISABLE -uroot -P9030 -h127.0.0.1
REQUIRED强制使用 SSL 连接mysql --ssl-mode=REQUIRED -uroot -P9030 -h127.0.0.1
VERIFY_CA强制 SSL 并校验服务端证书的 CA(mTLS 场景使用)参考 配置双向认证(mTLS)
注意

--ssl-mode 参数是 MySQL 5.7.11 版本引入的,低于此版本的 MySQL 客户端请参考 MySQL 官方文档

配置双向认证(mTLS)

mTLS 在服务端验证客户端身份的同时,要求客户端也校验服务端证书,适用于对接入方有严格身份要求的场景。

步骤 1:开启 mTLS

修改 FE 配置文件 conf/fe.conf,添加以下配置后重启 FE:

enable_ssl = true
ssl_force_client_auth = true

步骤 2:客户端使用证书连接

使用 mTLS 连接时,客户端需要指定 CA 证书、客户端证书和私钥:

mysql --ssl-mode=VERIFY_CA -uroot -P9030 -h127.0.0.1 \
--tls-version=TLSv1.2 \
--ssl-ca=/path/to/your/ca.pem \
--ssl-cert=/path/to/your/client-cert.pem \
--ssl-key=/path/to/your/client-key.pem

默认客户端证书

Doris 提供了默认的客户端证书文件,位于 Doris/conf/mysql_ssl_default_certificate/client_certificate/ 目录下:

文件名说明
ca.pemCA 证书
client-cert.pem客户端证书
client-key.pem客户端私钥

证书配置详解

Doris 开启 SSL 功能需要配置 CA 密钥证书和 Server 端密钥证书;如需开启双向认证,还需配置 Client 端密钥证书。

默认证书

Doris 内置了默认的证书文件,可直接使用:

证书类型默认路径默认密码
CA 证书Doris/fe/mysql_ssl_default_certificate/ca_certificate.p12doris
Server 端证书Doris/fe/mysql_ssl_default_certificate/server_certificate.p12doris
Client 端证书Doris/fe/mysql_ssl_default_certificate/client_certificate/-

自定义证书

如需使用自定义证书,可在 FE 配置文件 conf/fe.conf 中添加以下配置。

CA 证书配置

mysql_ssl_default_ca_certificate = /path/to/your/ca_certificate.p12
mysql_ssl_default_ca_certificate_password = your_password

Server 端证书配置

mysql_ssl_default_server_certificate = /path/to/your/server_certificate.p12
mysql_ssl_default_server_certificate_password = your_password
提示

通过修改 conf/fe.conf 中的 ssl_trust_store_type 参数可以指定其他证书格式,默认为 PKCS12

生成自定义证书

如果需要使用自己的证书,可通过 OpenSSL 生成。完整命令参考 MySQL 官方文档:生成 SSL 证书

步骤 1:生成 CA、Server 端和 Client 端的密钥和证书

# 生成 CA 证书
openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 3600 \
-key ca-key.pem -out ca.pem

# 生成 Server 端证书,并用上述 CA 签名
# server-cert.pem = public key, server-key.pem = private key
openssl req -newkey rsa:2048 -days 3600 \
-nodes -keyout server-key.pem -out server-req.pem
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -in server-req.pem -days 3600 \
-CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

# 生成 Client 端证书,并用上述 CA 签名
# client-cert.pem = public key, client-key.pem = private key
openssl req -newkey rsa:2048 -days 3600 \
-nodes -keyout client-key.pem -out client-req.pem
openssl rsa -in client-key.pem -out client-key.pem
openssl x509 -req -in client-req.pem -days 3600 \
-CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem

步骤 2:验证证书

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

步骤 3:打包为 PKCS#12 格式

将 CA 密钥和证书、Server 端密钥和证书分别合并为 PKCS#12(P12)格式,以便 Doris 使用:

# 打包 CA 密钥和证书
openssl pkcs12 -inkey ca-key.pem -in ca.pem -export -out ca_certificate.p12

# 打包 Server 端密钥和证书
openssl pkcs12 -inkey server-key.pem -in server-cert.pem -export -out server_certificate.p12
更多信息

关于使用 OpenSSL 生成自签名证书的更多信息,请参考 IBM 官方文档

常见问题

Q: 客户端连接报 --ssl-mode 参数不识别?

MySQL 客户端版本低于 5.7.11。升级 MySQL 客户端,或参考 MySQL Connector/J 文档使用对应连接参数。

Q: 启用 enable_ssl=true 后客户端仍以普通连接接入?

客户端默认使用 PREFERRED 模式,未强制要求 SSL。客户端使用 --ssl-mode=REQUIREDVERIFY_CA

Q: mTLS 模式下连接失败?

未提供客户端证书 / CA 证书 / 私钥,或路径错误。确认 --ssl-ca--ssl-cert--ssl-key 三个参数均已正确指向证书文件。

Q: 自定义证书加载失败?

证书格式与 ssl_trust_store_type 不一致,或密码错误。检查证书是否为 PKCS12 格式,或显式设置 ssl_trust_store_type 并核对密码。