6.3 Использование защищенных соединений
При незащищенном соединении между клиентом MySQL и сервером любой, имеющий доступ к сети, может просматривать весь ваш трафик и просматривать данные, отправляемые или получаемые между клиентом и сервером.
Когда необходимо передавать информацию по сети безопасным способом, незащищенное соединение неприемлемо. Для того, чтобы сделать любые данные нечитаемыми, используйте шифрование. Алгоритмы шифрования должны включать элементы безопасности, чтобы противостоять многим известным атакам, таким как изменение порядка зашифрованных сообщений или повторное воспроизведение данных дважды.
MySQL поддерживает защищенные соединения между клиентами и сервером с использованием протокола TLS (Transport Layer Security). TLS иногда называют SSL (Secure Sockets Layer), но MySQL на самом деле не использует протокол SSL для защищенных соединений, поскольку его шифрование слабое (см. Раздел 6.3.2, «Протоколы и шифры TLS защищенных соединений»).
TLS использует алгоритмы шифрования для обеспечения того, что данные, полученные по общедоступной сети, можно доверять. Он имеет механизмы для обнаружения изменений, потерь или повторного воспроизведения данных. TLS также включает алгоритмы, которые обеспечивают проверку подлинности с использованием стандарта X.509.
X.509 позволяет идентифицировать человека в Интернете. В общих чертах, должен быть какой-то субъект, называемый «Центром сертификации» (или ЦС), который выдает электронные сертификаты всем, кто в них нуждается. Сертификаты полагаются на асимметричные алгоритмы шифрования, имеющие два ключа шифрования (открытый ключ и закрытый ключ). Владелец сертификата может представить сертификат другой стороне в качестве доказательства своей личности. Сертификат содержит открытый ключ его владельца. Любые данные, зашифрованные с помощью этого открытого ключа, можно расшифровать только с помощью соответствующего закрытого ключа, который хранится у владельца сертификата.
MySQL может быть скомпилирован для поддержки защищенных соединений с использованием OpenSSL или yaSSL. Для сравнения двух пакетов см. Раздел 6.3.4, «Возможности, зависящие от библиотек SSL». Сведения о протоколах и шифрах шифрования, поддерживаемых каждым пакетом, см. в Разделе 6.3.2, «Протоколы и шифры TLS защищенных соединений».
MySQL можно скомпилировать с использованием yaSSL в качестве альтернативы OpenSSL только до MySQL 5.7.28. Начиная с MySQL 5.7.28, поддержка yaSSL удалена, и все сборки MySQL используют OpenSSL.
По умолчанию программы MySQL пытаются подключиться с использованием шифрования, если сервер поддерживает защищенные соединения, возвращаясь к незащищенному соединению, если защищенное соединение не может быть установлено. Сведения об опциях, влияющих на использование защищенных соединений, см. в Разделе 6.3.1, «Настройка MySQL для использования защищенных соединений» и Параметрах командной строки для защищенных соединений.
MySQL выполняет шифрование на основе каждого соединения, и использование шифрования для данного пользователя может быть необязательным или обязательным. Это позволяет выбирать защищенное или незащищенное соединение в зависимости от требований отдельных приложений. Сведения о том, как потребовать от пользователей использования защищенных соединений, см. в обсуждении пункта REQUIRE в CREATE USER операторе в Разделе 13.7.1.2, «Оператор CREATE USER». См. также описание системной переменной require_secure_transport в Разделе 5.1.7, «Системные переменные сервера».
Защищенные соединения могут использоваться между серверами источника и реплики. См. Раздел 16.3.8, «Настройка репликации для использования защищенных соединений».
Сведения об использовании защищенных соединений из API MySQL C см.
Также можно подключиться с использованием шифрования из соединения SSH с хостом сервера MySQL. Пример см. в Разделе 6.3.5, «Подключение к MySQL удаленно из Windows с помощью SSH».
В MySQL 5.7 были внесены несколько улучшений в поддержку защищенных соединений. Следующая временная шкала обобщает изменения:
5.7.3: На стороне клиента явный параметр
--sslбольше не рекомендательный, а обязательный. При наличии на сервере возможности поддержки зашифрованных соединений, программа-клиент может потребовать зашифрованное соединение, указав только параметр--ssl. (Ранее клиенту необходимо было указать либо параметр--ssl-ca, либо все три параметра--ssl-ca,--ssl-keyи--ssl-cert.) Попытка подключения завершается ошибкой, если зашифрованное соединение невозможно установить. Другие--ssl-параметры на стороне клиента носят рекомендательный характер в отсутствиеxxx--ssl: клиент пытается подключиться с шифрованием, но переходит к незашифрованному соединению, если зашифрованное установить не удается.-
5.7.5: Значение параметра
--sslна стороне сервера включено по умолчанию.Для серверов, скомпилированных с использованием OpenSSL, доступны системные переменные
auto_generate_certsиsha256_password_auto_generate_rsa_keysдля автоматической генерации и обнаружения файлов сертификата и ключа SSL/RSA при запуске. Для автоматического обнаружения сертификата и ключа, если--sslвключено, и другие--ssl-параметры не заданы для явного конфигурирования зашифрованных соединений, сервер пытается автоматически включить поддержку зашифрованных соединений при запуске, если обнаружит необходимые файлы сертификата и ключа в каталоге данных.xxx -
5.7.6: Утилита mysql_ssl_rsa_setup доступна для облегчения ручного создания файлов сертификата и ключа SSL/RSA. Автообнаружение файлов SSL/RSA при запуске расширено для применения ко всем серверам, скомпилированным как с использованием OpenSSL, так и yaSSL. (Это означает, что
auto_generate_certsне нужно включать для автоматического обнаружения.)Если сервер обнаружит при запуске, что сертификат CA самозаверяемый, он запишет предупреждение в журнал ошибок. (Сертификат является самозаверяемым, если он был сгенерирован автоматически сервером или вручную с помощью mysql_ssl_rsa_setup.)
-
5.7.7: Библиотека C-клиента по умолчанию пытается установить зашифрованное соединение, если сервер поддерживает зашифрованные соединения. Это влияет на программы-клиенты следующим образом:
В отсутствие параметра
--sslклиенты пытаются подключиться с использованием шифрования, переходя к незашифрованному соединению, если зашифрованное невозможно установить.Наличие явного параметра
--sslили его синонима (--ssl=1,--enable-ssl) является обязательным: клиенты требуют зашифрованного соединения и прекращают работу, если его невозможно установить.С параметром
--ssl=0или его синонимом (--skip-ssl,--disable-ssl) клиенты используют незашифрованное соединение.
Это изменение также влияет на последующие версии MySQL Connectors, основанные на C-библиотеке: Connector/C++ и Connector/ODBC.
5.7.8: Системная переменная
require_secure_transportдоступна для управления требованием использования защищенного транспорта при подключении клиентов к серверу.5.7.10: Поддержка протокола TLS расширена от TLSv1 до включения TLSv1.1 и TLSv1.2. Системная переменная
tls_versionна стороне сервера и параметр--tls-versionна стороне клиента позволяют выбрать уровень поддержки. См. Раздел 6.3.2, «Протоколы и шифры TLS зашифрованного соединения».5.7.11: Программы-клиенты MySQL поддерживают параметр
--ssl-mode, который позволяет указать состояние безопасности соединения с сервером. Параметр--ssl-modeвключает возможности параметров--sslи--ssl-verify-server-certсо стороны клиента. Следовательно, параметры--sslи--ssl-verify-server-certустарели и удалены в MySQL 8.0.5.7.28: Поддержка yaSSL удалена. Все сборки MySQL используют OpenSSL.
5.7.35: Протоколы TLSv1 и TLSv1.1 устарели.
© 2025 Oracle
Licensed under the GPLv2 License.