我正在尝试设置 Django,但每当 Django 尝试使用这些 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 连接错误:收到的消息意外或格式错误')
我的 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: [email protected]
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 |
+---------------+-------------------------+
我已将这些软件包安装在我的 VEnv 中:
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 True 连接,您还需要提供密钥。
示例代码
'OPTIONS': {'ssl': {'key': '/map/to/ca-cert.pem'}}