Spec-Zone.ru › MySQL 9.2

8.3.2 Протоколы и шифры TLS защищенных соединений

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

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

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

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

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

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

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

MySQL 9.2 поддерживает протоколы 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 9.2 не поддерживает старые протоколы 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, не разрешен системой.

Настройка протокола 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 9.2 использование 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.

Для шифрованных подключений, использующих 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-9.2-en/encrypted-connection-protocols-ciphers.html

Spec-Zone.ru

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