Spec-Zone.ru › MySQL 8.4

8.3.2 Протоколы и шифры TLS защищённого соединения

MySQL поддерживает несколько протоколов и шифров TLS и позволяет настроить разрешённые протоколы и шифры для защищённых соединений. Также можно определить, какой протокол и шифр использует текущая сессия.

  • Поддерживаемые протоколы TLS

  • Отключение поддержки протоколов TLSv1 и TLSv1.1

  • Настройка протокола TLS соединения

  • Настройка шифра соединения

  • Переговоры о протоколе TLS соединения

  • Мониторинг текущего протокола и шифра TLS клиентской сессии

Поддерживаемые протоколы TLS

MySQL 8.4 поддерживает протоколы TLSv1.2 и TLSv1.3 для соединений. Чтобы использовать TLSv1.3, как сервер MySQL, так и приложение-клиент должны быть скомпилированы с использованием OpenSSL 1.1.1 или более поздней версии. Компонент Group Replication поддерживает TLSv1.3 начиная с MySQL 8.0.18 (подробнее см. Раздел 20.6.2, «Защита соединений групповой коммуникации с использованием Secure Socket Layer (SSL)»).

MySQL 8.4 не поддерживает устаревшие протоколы TLSv1 и TLSv1.1.

Разрешенные протоколы TLS могут быть настроены как на стороне сервера, так и на стороне клиента, чтобы включать только подмножество поддерживаемых протоколов TLS. На обеих сторонах конфигурация должна включать хотя бы один общий протокол, иначе попытки соединения не смогут договориться о протоколе. Подробнее см. Переговоры о протоколе TLS соединения.

Системная среда может допускать только определённые протоколы TLS, что означает, что MySQL соединения не смогут использовать протоколы, не разрешённые хостом, даже если MySQL их разрешает. Возможные решения этой проблемы включают следующие:

  • Измените системную конфигурацию хоста, чтобы разрешить дополнительные протоколы TLS. Обратитесь к документации вашей операционной системы за инструкциями. Например, ваша система может иметь файл /etc/ssl/openssl.cnf, содержащий эти строки для ограничения протоколов TLS до TLSv1.3 или более поздних версий:

    [system_default_sect]
    MinProtocol = TLSv1.3
    

    Изменение значения на более раннюю версию протокола или None делает систему более гибкой. Этот метод имеет недостаток, поскольку разрешение менее защищённых протоколов может иметь негативные последствия для безопасности.

  • Если вы не можете или не хотите изменять конфигурацию TLS системного хоста, измените приложения MySQL, чтобы использовать более новые (более безопасные) протоколы TLS, разрешённые системной средой. Это может быть невозможно для более старых версий MySQL, которые поддерживают только более ранние версии протоколов. Например, TLSv1 является единственным поддерживаемым протоколом до MySQL 5.6.46, поэтому попытки соединения с сервером до 5.6.46 завершатся неудачей, даже если клиент из более новой версии MySQL поддерживает более новые версии протоколов. В таких случаях может потребоваться обновление до версии MySQL, поддерживающей дополнительные версии TLS.

Системная конфигурация хоста
  • Если конфигурация MySQL разрешает TLSv1.2, а ваша конфигурация хоста разрешает только подключения, использующие TLSv1.2 или более поздние версии, вы можете установить соединения MySQL, используя только TLSv1.2.

  • Предположим, что конфигурация MySQL разрешает TLSv1.2, но ваша конфигурация хоста разрешает только подключения, использующие TLSv1.3 или более поздние версии. В таком случае вы не сможете установить соединения MySQL вообще, так как ни один из протоколов, разрешённых MySQL, не разрешён системой хоста.

Отключение поддержки протоколов TLSv1 и TLSv1.1

Поддержка протоколов соединения TLSv1 и TLSv1.1 была устарела и удалена в MySQL 8.0. Для получения дополнительной информации обратитесь к меморандуму IETF Deprecating TLSv1.0 and TLSv1.1. В MySQL 8.4 подключения можно устанавливать только с использованием более безопасных протоколов TLSv1.2 и TLSv1.3. TLSv1.3 требует, чтобы как сервер MySQL, так и приложение-клиент были скомпилированы с использованием OpenSSL 1.1.1.

Дополнительную информацию см. в Does MySQL 8.4 support TLS 1.0 and 1.1?

Настройка протокола TLS для защищённых подключений

На стороне сервера значение системной переменной tls_version определяет, какие протоколы TLS допускаются MySQL-сервером для защищённых подключений. Значение tls_version применяется к подключениям от клиентов, обычным подключениям репликации источника/реплики, где данный экземпляр сервера является источником, подключениям для групповой репликации и подключениям к распределённому восстановлению групповой репликации, где данный экземпляр сервера является донором. Интерфейс администрирования настроен аналогично, но использует системную переменную admin_tls_version (см. Раздел 7.1.12.2, «Управление администрирующими подключениями»). Это обсуждение также относится к admin_tls_version.

Значение tls_version представляет собой список одного или нескольких версий протокола TLS, разделённых запятыми, регистр не учитывается. По умолчанию эта переменная перечисляет все протоколы, поддерживаемые библиотекой SSL, используемой для компиляции MySQL, и релизом MySQL Server. Значения по умолчанию указаны в .

Чтобы определить значение tls_version во время выполнения, используйте следующее оператор:

mysql> SHOW GLOBAL VARIABLES LIKE 'tls_version';
+---------------+-----------------------+
| Variable_name | Value                 |
+---------------+-----------------------+
| tls_version   | TLSv1.2,TLSv1.3       |
+---------------+-----------------------+

Чтобы изменить значение tls_version, установите его при запуске сервера. Например, чтобы разрешить подключения, использующие протокол TLSv1.2 или TLSv1.3, но запретить подключения, использующие другие протоколы, используйте эти строки в файле конфигурации сервера my.cnf:

[mysqld]
tls_version=TLSv1.2,TLSv1.3

Чтобы ещё более ограничить и разрешить только подключения TLSv1.3, установите tls_version следующим образом:

[mysqld]
tls_version=TLSv1.3

tls_version можно изменить во время выполнения. См. Настройка и мониторинг на стороне сервера для защищённых подключений.

На стороне клиента опция --tls-version определяет, какие протоколы TLS клиентское приложение допускает для подключения к серверу. Формат значения опции такой же, как у системной переменной tls_version, описанной ранее (список одного или нескольких версий протоколов, разделённых запятыми).

Для подключений репликации источника/реплики, где этот экземпляр сервера является репликой, опция SOURCE_TLS_VERSION для оператора CHANGE REPLICATION SOURCE TO определяет, какие протоколы TLS реплика допускает для подключений к источнику. Формат значения опции такой же, как у системной переменной tls_version, описанной ранее. См. Раздел 19.3.1, «Настройка репликации для использования защищённых подключений».

Протоколы, которые могут быть указаны для SOURCE_TLS_VERSION, зависят от используемой библиотеки SSL. Эта опция независима от и не зависит от значения серверной переменной tls_version. Например, сервер, который действует как реплика, может быть настроен с tls_version, установленным на TLSv1.3, чтобы разрешать только входящие подключения, использующие TLSv1.3, но также настроен с SOURCE_TLS_VERSION, установленным на TLSv1.2, чтобы разрешить только TLSv1.2 для исходящих подключений реплики к источнику.

Для подключений к распределённому восстановлению групповой репликации, где этот экземпляр сервера является присоединяемым участником, инициирующим распределённое восстановление (то есть клиентом), системная переменная group_replication_recovery_tls_version определяет, какие протоколы допускаются клиентом. Опять же, эта опция независима от и не зависит от значения серверной переменной tls_version, которое применяется, когда этот экземпляр сервера является донором. Сервер групповой репликации обычно участвует в распределённом восстановлении как донором, так и присоединяющимся участником в течение своего членства в группе, поэтому оба эти системных переменных должны быть установлены. См. Раздел 20.6.2, «Защита подключений групповой связи с помощью Secure Socket Layer (SSL)».

Настройка протокола TLS влияет на протокол, используемый конкретным подключением, как описано в Переговоры о протоколе подключения TLS.

Выбранные протоколы должны быть выбраны так, чтобы не оставлять «дыр» в списке. Например, эти значения конфигурации сервера не содержат «дыр»:

tls_version=TLSv1.2,TLSv1.3
tls_version=TLSv1.3

Запрет на «дыры» также применяется в других контекстах конфигурации, например, для клиентов или реплик.

Если вы не планируете отключать защищённые подключения, список разрешённых протоколов не должен быть пустым. Если вы установите параметр версии TLS в пустую строку, защищённые подключения не могут быть установлены:

  • tls_version: Сервер не разрешает входящие защищённые подключения.

  • --tls-version: Клиент не разрешает исходящие защищённые подключения к серверу.

  • SOURCE_TLS_VERSION: Реплика не разрешает исходящие защищённые подключения к источнику.

  • group_replication_recovery_tls_version: Присоединяющийся участник не разрешает защищённые подключения к соединению распределённого восстановления.

Настройка шифров для подключений с шифрованием

Для зашифрованных подключений используется набор стандартных шифров, который можно переопределить, явно указав разрешённые шифры. Во время установления соединения обе стороны должны поддерживать хотя бы один общий шифр; в противном случае соединение будет прервано. Из разрешённых шифров, общих для обеих сторон, библиотека SSL выбирает тот, который поддерживается предоставленным сертификатом и имеет наивысший приоритет.

Для указания шифров, применимых для зашифрованных подключений, использующих TLSv1.2:

  • Установите системную переменную ssl_cipher на стороне сервера и используйте параметр --ssl-cipher для клиентских программ.

  • Для обычных подключений репликации источника/реплики, где этот экземпляр сервера является источником, установите системную переменную ssl_cipher. Где этот экземпляр сервера является репликой, используйте параметр SOURCE_SSL_CIPHER для оператора CHANGE REPLICATION SOURCE TO. См. Раздел 19.3.1, «Настройка репликации с использованием зашифрованных подключений».

  • Для участника группы Group Replication, для подключений к группе Group Replication и также для подключений к распределённому восстановлению Group Replication, где этот экземпляр сервера является донором, установите системную переменную ssl_cipher. Для подключений к распределённому восстановлению Group Replication, где этот экземпляр сервера является присоединяющимся членом, используйте системную переменную group_replication_recovery_ssl_cipher. См. Раздел 20.6.2, «Защита подключений к группе с использованием Secure Socket Layer (SSL)».

Для зашифрованных подключений, использующих TLSv1.3, OpenSSL 1.1.1 и выше поддерживают следующие наборы шифров, все из которых включены по умолчанию для использования с системными переменными сервера --tls-ciphersuites или --admin-tls-ciphersuites:

TLS_AES_128_GCM_SHA256
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_128_CCM_SHA256
Примечание

В MySQL 8.4 использование TLS_AES_128_CCM_8_SHA256 с системными переменными сервера --tls-ciphersuites или --admin-tls-ciphersuites генерирует предупреждение о устаревании.

Для явного конфигурирования разрешённых наборов шифров TLSv1.3 установите следующие параметры. В каждом случае значение конфигурации — список нуля или более имён наборов шифров, разделённых двоеточием.

  • На стороне сервера используйте системную переменную tls_ciphersuites. Если эта переменная не установлена, её значение по умолчанию — NULL, что означает, что сервер разрешает набор стандартных наборов шифров. Если переменная установлена на пустую строку, ни один набор шифров не активирован, и зашифрованные подключения не могут быть установлены.

  • На стороне клиента используйте параметр --tls-ciphersuites. Если этот параметр не задан, клиент разрешает стандартный набор наборов шифров. Если параметр установлен на пустую строку, ни один набор шифров не активирован, и зашифрованные подключения не могут быть установлены.

  • Для обычных подключений репликации источника/реплики, где этот экземпляр сервера является источником, используйте системную переменную tls_ciphersuites. Где этот экземпляр сервера является репликой, используйте параметр SOURCE_TLS_CIPHERSUITES для оператора CHANGE REPLICATION SOURCE TO. См. Раздел 19.3.1, «Настройка репликации с использованием зашифрованных подключений».

  • Для участника группы Group Replication, для подключений к группе Group Replication и также для подключений к распределённому восстановлению Group Replication, где этот экземпляр сервера является донором, используйте системную переменную tls_ciphersuites. Для подключений к распределённому восстановлению Group Replication, где этот экземпляр сервера является присоединяющимся членом, используйте системную переменную group_replication_recovery_tls_ciphersuites. См. Раздел 20.6.2, «Защита подключений к группе с использованием Secure Socket Layer (SSL)».

Поддержка наборов шифров требует, чтобы как MySQL сервер, так и клиентское приложение были скомпилированы с использованием OpenSSL 1.1.1 или более поздней версии.

Данный шифр может работать только с определёнными протоколами TLS, что влияет на процесс согласования протокола TLS. См. Согласование протокола TLS соединения.

Чтобы определить, какие шифры поддерживает данный сервер, проверьте значение сессии переменной состояния Ssl_cipher_list:

SHOW SESSION STATUS LIKE 'Ssl_cipher_list';

Переменная состояния Ssl_cipher_list перечисляет возможные шифры SSL (пустая строка для подключений без SSL). Если MySQL поддерживает TLSv1.3, значение включает возможные наборы шифров TLSv1.3.

Примечание

Шифры ECDSA работают только в сочетании с сертификатом SSL, использующим ECDSA для цифрового подписи, и не работают с сертификатами, использующими RSA. Автоматический процесс генерации сертификатов SSL MySQL Server генерирует только сертификаты с подписью RSA, а не ECDSA. Не выбирайте шифры ECDSA, если у вас нет доступного сертификата ECDSA.

Для зашифрованных подключений, использующих TLSv1.3, MySQL использует стандартный список наборов шифров библиотеки SSL.

Для зашифрованных подключений, использующих TLSv1.2, MySQL передаёт следующий стандартный список шифров в библиотеку SSL, когда используется с системными переменными сервера --ssl-cipher и --admin-ssl-cipher.

ECDHE-ECDSA-AES128-GCM-SHA256
ECDHE-ECDSA-AES256-GCM-SHA384
ECDHE-RSA-AES128-GCM-SHA256
ECDHE-RSA-AES256-GCM-SHA384
ECDHE-ECDSA-CHACHA20-POLY1305
ECDHE-RSA-CHACHA20-POLY1305
ECDHE-ECDSA-AES256-CCM
ECDHE-ECDSA-AES128-CCM
DHE-RSA-AES128-GCM-SHA256
DHE-RSA-AES256-GCM-SHA384
DHE-RSA-AES256-CCM
DHE-RSA-AES128-CCM
DHE-RSA-CHACHA20-POLY1305

Эти ограничения по шифрам следующие:

  • Следующие шифры устарели и вызывают предупреждение при использовании с системными переменными сервера --ssl-cipher и --admin-ssl-cipher:

    ECDHE-ECDSA-AES128-SHA256
    ECDHE-RSA-AES128-SHA256
    ECDHE-ECDSA-AES256-SHA384
    ECDHE-RSA-AES256-SHA384
    DHE-DSS-AES128-GCM-SHA256
    DHE-RSA-AES128-SHA256
    DHE-DSS-AES128-SHA256
    DHE-DSS-AES256-GCM-SHA384
    DHE-RSA-AES256-SHA256
    DHE-DSS-AES256-SHA256
    ECDHE-RSA-AES128-SHA
    ECDHE-ECDSA-AES128-SHA
    ECDHE-RSA-AES256-SHA
    ECDHE-ECDSA-AES256-SHA
    DHE-DSS-AES128-SHA
    DHE-RSA-AES128-SHA
    TLS_DHE_DSS_WITH_AES_256_CBC_SHA
    DHE-RSA-AES256-SHA
    AES128-GCM-SHA256
    DH-DSS-AES128-GCM-SHA256
    ECDH-ECDSA-AES128-GCM-SHA256
    AES256-GCM-SHA384
    DH-DSS-AES256-GCM-SHA384
    ECDH-ECDSA-AES256-GCM-SHA384
    AES128-SHA256
    DH-DSS-AES128-SHA256
    ECDH-ECDSA-AES128-SHA256
    AES256-SHA256
    DH-DSS-AES256-SHA256
    ECDH-ECDSA-AES256-SHA384
    AES128-SHA
    DH-DSS-AES128-SHA
    ECDH-ECDSA-AES128-SHA
    AES256-SHA
    DH-DSS-AES256-SHA
    ECDH-ECDSA-AES256-SHA
    DH-RSA-AES128-GCM-SHA256
    ECDH-RSA-AES128-GCM-SHA256
    DH-RSA-AES256-GCM-SHA384
    ECDH-RSA-AES256-GCM-SHA384
    DH-RSA-AES128-SHA256
    ECDH-RSA-AES128-SHA256
    DH-RSA-AES256-SHA256
    ECDH-RSA-AES256-SHA384
    ECDHE-RSA-AES128-SHA
    ECDHE-ECDSA-AES128-SHA
    ECDHE-RSA-AES256-SHA
    ECDHE-ECDSA-AES256-SHA
    DHE-DSS-AES128-SHA
    DHE-RSA-AES128-SHA
    TLS_DHE_DSS_WITH_AES_256_CBC_SHA
    DHE-RSA-AES256-SHA
    AES128-SHA
    DH-DSS-AES128-SHA
    ECDH-ECDSA-AES128-SHA
    AES256-SHA
    DH-DSS-AES256-SHA
    ECDH-ECDSA-AES256-SHA
    DH-RSA-AES128-SHA
    ECDH-RSA-AES128-SHA
    DH-RSA-AES256-SHA
    ECDH-RSA-AES256-SHA
    DES-CBC3-SHA
    
  • Следующие шифры навсегда заблокированы:

    !DHE-DSS-DES-CBC3-SHA
    !DHE-RSA-DES-CBC3-SHA
    !ECDH-RSA-DES-CBC3-SHA
    !ECDH-ECDSA-DES-CBC3-SHA
    !ECDHE-RSA-DES-CBC3-SHA
    !ECDHE-ECDSA-DES-CBC3-SHA
    
  • Следующие категории шифров навсегда заблокированы:

    !aNULL
    !eNULL
    !EXPORT
    !LOW
    !MD5
    !DES
    !RC2
    !RC4
    !PSK
    !SSLv3
    

Если сервер запускается с системной переменной ssl_cert, установленной на сертификат, использующий любой из вышеперечисленных заблокированных шифров или категорий шифров, сервер запускается с отключенной поддержкой зашифрованных подключений.

Переговоры о протоколе TLS соединения

При попытке подключения к MySQL происходит согласование использования наиболее подходящей версии протокола TLS, доступной для обеих сторон, для которой также доступен совместимый шифр шифрования. Процесс согласования зависит от факторов, таких как используемая на сервере и клиенте библиотека SSL, конфигурации протокола TLS и шифра шифрования, а также от размера используемого ключа:

  • Для успешного подключения, конфигурации TLS сервера и клиента должны допускать какой-либо общий протокол.

  • Аналогично, конфигурация шифра шифрования сервера и клиента должна допускать какой-либо общий шифр. Данный шифр может работать только с определёнными протоколами TLS, поэтому доступный для согласования протокол не выбирается, если нет совместимого шифра.

  • Если доступен TLSv1.3, он используется, если возможно. (Это означает, что конфигурация сервера и клиента должна допускать TLSv1.3, и обе стороны должны также допускать какой-либо совместимый с TLSv1.3 шифр шифрования.) В противном случае MySQL продолжает перебирать список доступных протоколов, используя TLSv1.2, если это возможно, и так далее. Переговоры происходят от более безопасных протоколов к менее безопасным. Порядок переговоров не зависит от порядка конфигурации протоколов. Например, порядок переговоров одинаков независимо от того, имеет ли tls_version значение TLSv1.2,TLSv1.3 или TLSv1.3,TLSv1.2.

  • Для повышения безопасности используйте сертификат с размером ключа RSA не менее 2048 бит.

Если у сервера и клиента нет общего разрешённого протокола и совместимого шифра, сервер прерывает запрос подключения.

MySQL позволяет указать список поддерживаемых протоколов. Этот список передаётся непосредственно в подлежащую библиотеку SSL, и в конечном итоге эта библиотека сама определяет, какие протоколы из предоставленного списка она фактически активирует. Сведения о том, как библиотека SSL обрабатывает это, см. в исходном коде MySQL и документации OpenSSL SSL_CTX_new().

Мониторинг текущего протокола и шифра TLS сессии клиента

Чтобы определить, какой протокол шифрования TLS и какой шифр использует текущая сессия клиента, проверьте значения сессии для переменных состояния Ssl_version и Ssl_cipher:

mysql> SELECT * FROM performance_schema.session_status
       WHERE VARIABLE_NAME IN ('Ssl_version','Ssl_cipher');
+---------------+---------------------------+
| VARIABLE_NAME | VARIABLE_VALUE            |
+---------------+---------------------------+
| Ssl_cipher    | DHE-RSA-AES128-GCM-SHA256 |
| Ssl_version   | TLSv1.2                   |
+---------------+---------------------------+

Если подключение не зашифровано, оба значения переменных пусты.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/encrypted-connection-protocols-ciphers.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API