Требуется 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},
            }**
Вернуться на верх