解决 MariaDB/MySQL 客户端 TLS/SSL 错误:ERROR 2026 (HY000)
问题描述
当使用 MariaDB 11(或兼容的 MySQL 客户端)连接 MariaDB 10.4 或更旧的服务器时,可能出现以下错误:
bash
ERROR 2026 (HY000): TLS/SSL error: SSL is required, but the server does not support it
该错误通常在以下场景出现:
- 使用高版本客户端(MariaDB 11+)连接旧版服务器(如 MariaDB 10.4)
- 客户端默认启用了 SSL/TLS 加密要求
- 服务器端未配置或未启用 TLS 支持
错误的核心矛盾:客户端强制要求加密连接,但服务器未提供 TLS 支持。
原因分析
出现此错误的根本原因在于版本兼容性变化:
- MariaDB 11 及更新版本的命令行客户端默认启用 SSL/TLS 强制要求(通过
--ssl
参数) - MariaDB 10.4 及以下版本默认不启用 TLS 支持
- MariaDB 10.4 已结束生命周期(EOL),默认配置中缺乏新客户端的必需安全特性
解决方案
方法一:客户端临时禁用 SSL(命令行方案)
在连接命令中明确禁用 SSL 校验:
bash
# 使用 --ssl=0 参数
mariadb --host=服务器地址 --user=用户名 --password --ssl=0
# 或使用等效的 --skip-ssl
mariadb --host=服务器地址 --user=用户名 --password --skip-ssl
说明
此方案:
- ✅ 适用于单次临时连接
- ✅ 无需服务器配置变更
- ❌ 网络传输数据未加密
- ❌ 每次连接都需添加参数
方法二:客户端永久禁用 SSL(配置文件方案)
编辑用户主目录下的客户端配置文件 ~/.my.cnf
:
ini
[client]
skip-ssl = true # 永久禁用SSL校验
配置后所有客户端连接自动生效,无需额外参数:
bash
mariadb --host=服务器地址 --user=用户名 --password
注意
- 此配置对该用户的所有连接生效
- 适用于开发环境或内网安全环境
- 生产环境不推荐禁用加密
方法三:服务器端启用 TLS(推荐长期方案)
在数据库服务器上启用 TLS 支持(需管理员权限):
- 生成服务器证书(若未存在):
bash
sudo openssl genrsa -out /etc/mysql/server-key.pem 2048
sudo openssl req -new -key /etc/mysql/server-key.pem -out /etc/mysql/server-req.pem
sudo openssl x509 -req -in /etc/mysql/server-req.pem -signkey /etc/mysql/server-key.pem -out /etc/mysql/server-cert.pem
- 修改 MariaDB 配置文件(
/etc/mysql/my.cnf
):
ini
[mysqld]
ssl-ca = /etc/mysql/ca.pem
ssl-cert = /etc/mysql/server-cert.pem
ssl-key = /etc/mysql/server-key.pem
- 重启服务后验证 TLS 状态:
sql
SHOW VARIABLES LIKE '%ssl%';
-- 应返回 have_ssl = YES
为什么推荐此方案?
- ✅ 保障数据传输安全
- ✅ 兼容新版本客户端强制要求
- ✅ 符合行业安全最佳实践
方法四:升级数据库服务器版本(根治方案)
MariaDB 10.4 已于 2024 年 6 月结束支持,建议升级到 LTS 版本:
升级优势:
- MariaDB 11.0+ 默认自动启用 TLS
- 获得安全更新和性能优化
- 避免客户端兼容性问题
官方升级指南:
bash# Ubuntu/Debian 示例 sudo apt update sudo apt install mariadb-server-11.0
升级后验证:
sqlSELECT VERSION(); -- 应返回 11.x 或更高版本
最佳实践建议
场景 | 推荐方案 | 优点 | 注意事项 |
---|---|---|---|
临时测试/调试 | 客户端 --ssl=0 | 快速免配置 | 传输数据未加密 |
长期开发环境 | 客户端配置 skip-ssl | 一次配置永久生效 | 需确保内网环境安全 |
生产环境 | 服务器端启用 TLS | 符合安全合规标准 | 需管理证书和密钥 |
老旧服务器迁移 | 升级到 MariaDB 11.x | 彻底解决问题+安全增强 | 需规划升级窗口期 |
关键知识点
版本兼容性:
- MariaDB ≥10.10.1:客户端默认强制 SSL
- MariaDB ≥11.4:服务器默认自动启用 TLS
配置优先级:
安全建议:
- 即使在内网环境也建议启用 TLS
- 老旧版本应尽快升级到支持周期内的版本
- 禁用加密仅作为临时解决方案
通过以上方案,可有效解决 TLS/SSL 兼容性问题,并根据实际场景选择最适合的解决路径。生产环境强烈建议采用服务器端 TLS 启用或版本升级方案。