Skip to content

解决 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 支持

原因分析

出现此错误的根本原因在于版本兼容性变化:

  1. MariaDB 11 及更新版本的命令行客户端默认启用 SSL/TLS 强制要求(通过 --ssl 参数)
  2. MariaDB 10.4 及以下版本默认不启用 TLS 支持
  3. 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 支持(需管理员权限):

  1. 生成服务器证书(若未存在):
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
  1. 修改 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
  1. 重启服务后验证 TLS 状态:
sql
SHOW VARIABLES LIKE '%ssl%';
-- 应返回 have_ssl = YES

为什么推荐此方案?

  • ✅ 保障数据传输安全
  • ✅ 兼容新版本客户端强制要求
  • ✅ 符合行业安全最佳实践

方法四:升级数据库服务器版本(根治方案)

MariaDB 10.4 已于 2024 年 6 月结束支持,建议升级到 LTS 版本:

  1. 升级优势

    • MariaDB 11.0+ 默认自动启用 TLS
    • 获得安全更新和性能优化
    • 避免客户端兼容性问题
  2. 官方升级指南:

    bash
    # Ubuntu/Debian 示例
    sudo apt update
    sudo apt install mariadb-server-11.0
  3. 升级后验证:

    sql
    SELECT VERSION();
    -- 应返回 11.x 或更高版本

最佳实践建议

场景推荐方案优点注意事项
临时测试/调试客户端 --ssl=0快速免配置传输数据未加密
长期开发环境客户端配置 skip-ssl一次配置永久生效需确保内网环境安全
生产环境服务器端启用 TLS符合安全合规标准需管理证书和密钥
老旧服务器迁移升级到 MariaDB 11.x彻底解决问题+安全增强需规划升级窗口期

关键知识点

  1. 版本兼容性

    • MariaDB ≥10.10.1:客户端默认强制 SSL
    • MariaDB ≥11.4:服务器默认自动启用 TLS
  2. 配置优先级

  3. 安全建议

    • 即使在内网环境也建议启用 TLS
    • 老旧版本应尽快升级到支持周期内的版本
    • 禁用加密仅作为临时解决方案

通过以上方案,可有效解决 TLS/SSL 兼容性问题,并根据实际场景选择最适合的解决路径。生产环境强烈建议采用服务器端 TLS 启用或版本升级方案。