You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django连接远程MariaDB时出现SSL格式错误求助

Django连接远程MariaDB的SSL错误排查与解决

问题场景

搭建Django环境时,使用如下数据库配置连接远程MariaDB:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'xx',
        'HOST': 'xx',
        'PASSWORD': 'xx',
        'NAME': 'xx',
        'PORT': '',
        'OPTIONS': {'ssl': True},
    }
}

出现错误:

django.db.utils.OperationalError: (2026, 'SSL connection error: The message received was unexpected or badly formatted')

环境信息

MariaDB服务器状态

MariaDB [(none)]> status
--------------
C:\Program Files\MariaDB 11.2\bin\mysql.exe from 11.2.2-MariaDB, client 15.2 for Win64 (AMD64), source revision 929532a9426d085111c24c63de9c23cc54382259

Connection id:          98
Current database:
Current user:           mads@85.81.43.174
SSL:                    Cipher in use is ECDHE-RSA-AES256-GCM-SHA384
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server:                 MariaDB
Server version:         10.5.22-MariaDB MariaDB Server
Protocol version:       10
Connection:             eccentric.dk via TCP/IP
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
TCP port:               3306
Uptime:                 2 hours 24 min 5 sec

数据库SSL配置

MariaDB [(none)]>  SHOW VARIABLES LIKE '%ssl%';
+---------------------+----------------------------------+
| Variable_name       | Value                            |
+---------------------+----------------------------------+
| have_openssl        | YES                              |
| have_ssl            | YES                              |
| ssl_ca              | /etc/mariadb/chain.pem           |
| ssl_capath          |                                  |
| ssl_cert            | /etc/mariadb/fullchain.pem       |
| ssl_cipher          |                                  |
| ssl_crl             |                                  |
| ssl_crlpath         |                                  |
| ssl_key             | /etc/mariadb/privkey.pem         |
| version_ssl_library | OpenSSL 1.1.1k  FIPS 25 Mar 2021 |
+---------------------+----------------------------------+
10 rows in set (0.036 sec)

TLS版本设置

MariaDB [(none)]>  SHOW VARIABLES LIKE '%tls%';
+---------------+-------------------------+
| Variable_name | Value                   |
+---------------+-------------------------+
| tls_version   | TLSv1.1,TLSv1.2,TLSv1.3 |
+---------------+-------------------------+

虚拟环境已安装包

Package                Version
---------------------- -------
asgiref                3.7.2
Cython                 3.0.6
Django                 5.0
mariadb                1.1.8
mysql-connector-python 8.2.0
mysqlclient            2.2.0
packaging              23.2
pip                    23.3.1
protobuf               4.21.12
sqlparse               0.4.4
tzdata                 2023.3
wheel                  0.42.0

解决方案

针对该SSL连接错误,可尝试以下修复方式:

  • 指定CA证书路径
    仅设置ssl: True可能导致客户端无法正确验证服务器证书,需明确指定本地下载的服务器chain.pem文件路径:

    DATABASES = {
        'default': {
            # 保留其他原有配置
            'OPTIONS': {
                'ssl': {
                    'ca': '/path/to/local/chain.pem'
                }
            },
        }
    }
    
  • 限制TLS版本
    服务器支持TLSv1.1至TLSv1.3,部分客户端驱动可能与高版本TLS存在兼容性问题,尝试指定兼容版本:

    DATABASES = {
        'default': {
            # 保留其他原有配置
            'OPTIONS': {
                'ssl': True,
                'tls_versions': ['TLSv1.2', 'TLSv1.3']
            },
        }
    }
    

    注:不同驱动参数名有差异,mysqlclient用tls_versions,mysql-connector-python可能需用ssl_verify_cert等参数。

  • 切换数据库驱动
    当前安装了多套MySQL/MariaDB驱动,尝试切换到mariadb引擎:

    DATABASES = {
        'default': {
            'ENGINE': 'mariadb',
            # 保留其他原有配置
            'OPTIONS': {'ssl': True},
        }
    }
    

    确保mariadb驱动版本与服务器兼容。

  • 修正端口配置
    将PORT字段从空值改为明确的'3306',同时检查服务器防火墙是否允许客户端IP访问3306端口。

  • 验证证书有效性
    确认本地CA证书未过期、格式正确,且与服务器chain.pem一致,可通过以下命令验证:

    openssl s_client -connect eccentric.dk:3306 -CAfile /path/to/local/chain.pem
    

内容的提问来源于stack exchange,提问作者msx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 09:53:12