Требуется SSL, но сервер его не поддерживает (Django)
Я работал над тестовым проектом в качестве практики, и когда я попытался перенести его в базу данных (MariaDB PhpMyAdmin), я получил эту ошибку «django.db.utils.OperationalError: (2026, „TLS/SSL error: SSL is required, but the server does not support it“)»
Вот как я написал это в settings.py
:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'schooldb',
'USER': 'root',
'PASSWORD': '',
'HOST': '127.0.0.1',
'PORT': '3307',
# 'OPTIONS': {'init_command': "SET SQL_MODE='STRICT_TRANS_TABLES'"},
}
}
У меня уже установлен mysqlclient.
Во-первых, о чем говорит ошибка: ваш сервер mariaDB требует ssl-соединений, но настройки вашего приложения django не настроены на использование ssl.
Вам необходимо перенастроить ваш сервер mariaDB на поддержку ssl, изменив ваш файл .cnf
или .ini
.
[mysqld]
ssl-ca = /path-to-ca-cert.pem
ssl-cert = /path-to-server-cert.pem
ssl-key = /path-to-server-key.pem
и в вашем django-приложении добавьте 'OPTIONS'
поле.
DATABASES = {
...
'OPTIONS' : {
'ssl': {
'ca': '/path-to-ca-cert.pem',
'cert': '/path-to-server-cert.pem',
'key': '/path-to-server-key.pem',
}
}
...
Если вы не хотите, чтобы ssl был включен, вы можете настроить mariaDB на разрешение не-ssl соединений. Просто измените ваш .cnf
файл.
[mysqld]
require_secure_transport = OFF
и перезапустите сервер mariaDB командой sudo systemctl restart mariadb
.
Дополнительно проверьте наличие необходимых пакетов python для поддержки ssl, например - mysqlclient
или PyMySQL
Если вы хотите подключиться без защищенного протокола,
В документации заявлено:
ssl_mode Если присутствует, укажите параметры безопасности для соединения с сервером. Дополнительную информацию о ssl_mode можно найти в документации MySQL. Может быть указано только одно из значений 'DISABLED', 'PREFERRED', 'REQUIRED', 'VERIFY_CA', 'VERIFY_IDENTITY'.
Если он отсутствует, режим ssl_mode сессии будет неизменным, но в версии 5.7 и более поздних по умолчанию используется режим PREFERRED.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'schooldb',
'USER': 'root',
'PASSWORD': '',
'HOST': '127.0.0.1',
'PORT': '3307',
'OPTIONS': {'ssl_mode': 'DISABLED'},
}
}
Я думаю, что проблема связана с mysqliclient==2.2.5
Попробуйте установить
pip install mysqlclient==2.2.4
Я могу воспроизвести эту проблему и отправил сообщение об ошибке https://github.com/PyMySQL/mysqlclient/discussions/740
В python 3.13 & django 5.1.3 mysqlclient==2.2.4 не работает поэтому мне пришлось установить mysqlclient==2.2.5
Решение 01 «Я вручную обновил mariadb в xampp с **10.4 до 11.**5, и ошибка SSL была исправлена. [введите описание изображения здесь][1]
Решение 02 в settings.py
**"OPTION": {
'ssl': {'ca': None},
}**