Обзор защищённых соединений
По умолчанию MariaDB передаёт данные между сервером и клиентами без шифрования. Это обычно приемлемо, когда сервер и клиент работают на одном хосте или в сетях, где безопасность гарантируется другими средствами. Однако в тех случаях, когда сервер и клиент находятся в разных сетях или в сети с высоким риском, отсутствие шифрования вызывает проблемы безопасности, поскольку злоумышленник может потенциально перехватывать трафик во время передачи между ними по сети.
Чтобы минимизировать эту проблему, MariaDB позволяет шифровать данные в процессе передачи между сервером и клиентами с использованием протокола Transport Layer Security (TLS). Раньше TLS был известен как Secure Socket Layer (SSL), но строго говоря, протокол SSL является предшественником TLS, и сейчас эта версия протокола считается небезопасной. В документации часто используется термин SSL по соображениям совместимости, и переменные состояния и системные переменные, связанные с TLS, всё ещё используют префикс ssl_, но в MariaDB внутренне поддерживаются только его безопасные преемники.
Проверка поддержки TLS сервером MariaDB
Для использования TLS сервером MariaDB он должен быть скомпилирован с поддержкой TLS. Все пакеты MariaDB, распространяемые MariaDB Foundation и MariaDB Corporation, скомпилированы с поддержкой TLS.
Если вы не уверены, скомпилирован ли ваш бинарный файл сервера MariaDB с поддержкой TLS, вы можете проверить значение системной переменной have_ssl. Например:
SHOW GLOBAL VARIABLES LIKE 'have_ssl'; +---------------+----------+ | Variable_name | Value | +---------------+----------+ | have_ssl | DISABLED | +---------------+----------+
Возможные значения:
- Если это
DISABLED, значит сервер был скомпилирован с поддержкой TLS, но TLS не включен. - Если это
YES, значит сервер был скомпилирован с поддержкой TLS и TLS включен. - Если это
NO, значит сервер не был скомпилирован с поддержкой TLS.
Библиотеки TLS
Когда MariaDB компилируется с поддержкой TLS и криптографии, он обычно либо статически связан с объединённой библиотекой TLS и криптографии MariaDB, которая может быть wolfSSL или yaSSL, либо динамически связан с системной библиотекой TLS и криптографии, которая может быть OpenSSL, GnuTLS или Schannel.
Дополнительную информацию о используемых библиотеках на различных платформах см. в разделе Библиотеки TLS и криптографии, используемые MariaDB.
Версии протокола TLS
Существует 4 версии протокола TLS:
-
TLSv1.0 -
TLSv1.1 -
TLSv1.2 -
TLSv1.3
Включение определённых версий протокола TLS
Системная переменная tls_version была впервые представлена в MariaDB 10.4.6.
В некоторых случаях может быть целесообразно включить только определённые версии протокола TLS. Например, если вашей организации необходимо соблюдать определённый стандарт безопасности. Это также целесообразно, если в конкретной версии протокола TLS обнаружена уязвимость, и вы хотите убедиться, что ваш сервер не использует уязвимую версию протокола.
В PCI DSS v3.2 рекомендуется использовать минимальную версию протокола TLSv1.2.
На стороне сервера пользователи могут включить определённые версии протокола TLS, установив системную переменную tls_version. Эта системная переменная принимает список версий протокола TLS, разделённых запятыми. Версия протокола TLS будет включена только в том случае, если она присутствует в этом списке. Все остальные версии протокола TLS не будут разрешены. Эту системную переменную можно указать в качестве аргумента командной строки для mysqld или в соответствующей группе опций сервера в файле опций в группе опций в файле опций. Например:
[mariadb] ... tls_version = TLSv1.2,TLSv1.3
Вы можете проверить, какие версии протокола TLS включены на сервере, выполнив команду SHOW GLOBAL VARIABLES. Например:
SHOW GLOBAL VARIABLES LIKE 'tls_version';
На стороне клиента пользователи могут включить определённые версии протокола TLS, установив опцию --tls-version. Эта опция принимает список версий протокола TLS, разделённых запятыми. Версия протокола TLS будет включена только в том случае, если она присутствует в этом списке. Все остальные версии протокола TLS не будут разрешены. Например, чтобы указать эту опцию в соответствующей группе опций клиента в файле опций в группе опций в файле опций, можно установить следующее:
[client-mariadb] ... tls_version = TLSv1.2,TLSv1.3
Или, если вы хотите указать её в командной строке с клиентом mariadb, вы можете выполнить что-то вроде этого:
$ mariadb -u myuser -p -h myserver.mydomain.com \ --ssl \ --tls-version="TLSv1.2,TLSv1.3"
Поддержка версий протокола TLS
Поддерживаемые версии протокола TLS зависят от используемой базовой библиотеки TLS для конкретного бинарного файла MariaDB.
| Библиотека TLS | Поддерживаемые версии протокола TLS |
|---|---|
| openSSL | TLSv1, TLSv1.1, TLSv1.2, TLSv1.3 |
| wolfSSL | TLSv1, TLSv1.1, TLSv1.2, TLSv1.3 |
| yaSSL | TLSv1, TLSv1.1 |
| Schannel | TLSv1, TLSv1.1, TLSv1.2 |
| GnuTLS | TLSv1, TLSv1.1, TLSv1.2, TLSv1.3 |
Дополнительную информацию о используемых библиотеках на различных платформах см. в разделе Библиотеки TLS и криптографии, используемые MariaDB.
Поддержка версий протокола TLS в OpenSSL
Бинарные файлы MariaDB, построенные с библиотекой OpenSSL (OpenSSL 1.0.1 или более поздней версии), поддерживают TLSv1.1 и TLSv1.2 начиная с MariaDB 5.5.41, MariaDB 10.0.15 и MariaDB 10.1.4.
Бинарные файлы MariaDB, построенные с библиотекой OpenSSL (OpenSSL 1.1.1 или более поздней версии), поддерживают TLSv1.3 начиная с MariaDB 10.2.16 и MariaDB 10.3.8.
Если ваш бинарный файл сервера MariaDB построен с OpenSSL, вы можете установить системную переменную ssl_cipher на значения, такие как SSLv3 или TLSv1.2, чтобы разрешить все шифры SSLv3.0 или все шифры TLSv1.2. Однако это не обязательно ограничивает версию протокола TLSv1.2. Более подробную информацию см. в MDEV-14101.
Обратите внимание, что шифры TLSv1.3 нельзя исключить при использовании OpenSSL, даже с помощью системной переменной ssl_cipher. Подробности см. в Использование TLSv1.3.
SSLv3.0 известен уязвимостью к атаке POODLE, поэтому его не следует использовать. SSLv2.0 и SSLv3.0 отключены для бинарных файлов сервера MariaDB, связанных с OpenSSL, начиная с MariaDB 5.5.41, MariaDB 10.0.15 и MariaDB 10.1.4. Если вы используете версию MariaDB, более раннюю чем эта, и не можете обновиться, см. раздел «Защита от отката SSL 3.0» в OpenSSL Security Advisory - 15 Oct 2014.
Поддержка версий протокола TLS в wolfSSL
Бинарные файлы MariaDB, построенные с объединённой библиотекой wolfSSL, поддерживают TLSv1.0, TLSv1.1, TLSv1.2 и TLSv1.3.
Поддержка версий протокола TLS в yaSSL
Бинарные файлы MariaDB, построенные с объединённой библиотекой yaSSL, поддерживают SSLv3.0, TLSv1.0 и TLSv1.1.
SSLv3.0 известен уязвимостью к атаке POODLE, поэтому его не следует использовать. SSLv2.0 и SSLv3.0 отключены для бинарных файлов сервера MariaDB, связанных с yaSSL, начиная с MariaDB 5.5.41, MariaDB 10.0.15 и MariaDB 10.1.4.
Поддержка версий протокола TLS в Schannel
Бинарные файлы MariaDB, построенные с библиотекой Schannel, поддерживают различные версии TLS на различных версиях Windows. См. документацию Microsoft Protocols in TLS/SSL (Schannel SSP) для определения поддерживаемых версий TLS на каждой версии Windows.
Поддержка версий протокола TLS в GnuTLS
Бинарные файлы MariaDB, построенные с библиотекой GnuTLS, поддерживают TLSv1.0, TLSv1.1, TLSv1.2 и TLSv1.3.
Включение TLS
См. Защита соединений для клиента и сервера для получения информации о включении TLS на клиенте и сервере.
Проверка сертификатов
Проверка сертификатов — это способ, с помощью которого TLS аутентифицирует соединения, проверяя, что он взаимодействует с тем, кто себя представляет.
- Был ли сертификат подписан доверенным центром сертификации (ЦС)?
- Истек ли сертификат?
- Находится ли сертификат в моём списке отозванных сертификатов (CRL)?
- Принадлежит ли сертификат тому, с кем, как мне кажется, я общаюсь?
Центры сертификации (ЦС)
Центры сертификации (ЦС) — это сущности, которым вы доверяете для подписания сертификатов TLS. Ваша организация может иметь собственный внутренний ЦС или использовать доверенные ЦС третьих сторон.
ЦС указываются на сервере и клиенте с помощью опций ssl_ca и ssl_capath.
Опция ssl_ca определяет путь к файлу PEM, который должен содержать один или несколько сертификатов X509 для доверенных центров сертификации (ЦС). Эта опция требует указания абсолютного, а не относительного пути.
Опция ssl_capath определяет путь к каталогу, содержащему один или несколько файлов PEM, каждый из которых должен содержать один сертификат X509 для доверенного центра сертификации (ЦС). Эта опция требует указания абсолютного, а не относительного пути. Опция ssl_capath поддерживается только в том случае, если сервер или клиент был построен с использованием OpenSSL, wolfSSL или yaSSL. Если клиент был построен с использованием GnuTLS или Schannel, то опция ssl_capath не поддерживается.
См. TLS и библиотеки криптографии, используемые MariaDB для получения дополнительной информации о том, какие библиотеки используются на каких платформах.
Каталог, указанный в ssl_capath, необходимо обработать с помощью команды openssl rehash. Например, если настроено следующее:
ssl_capath=/etc/my.cnf.d/certificates/ca/
Тогда необходимо выполнить следующее:
openssl rehash /etc/my.cnf.d/certificates/ca/
Требование к конкретному центру сертификации (ЦС)
Сервер может потребовать конкретный центр сертификации (ЦС) для клиента, если учетная запись пользователя клиента была определена с помощью REQUIRE ISSUER. См. Защита соединений для клиента и сервера: Требование TLS для получения дополнительной информации.
Списки отозванных сертификатов (CRL)
Списки отозванных сертификатов (CRL) — это списки сертификатов, которые были отозваны центром сертификации (ЦС) до их истечения срока действия.
CRL указываются на сервере и клиенте с помощью опций ssl_crl и ssl_crlpath.
Опция ssl_crl определяет путь к файлу PEM, который должен содержать один или несколько отозванных сертификатов X509. Эта опция требует указания абсолютного, а не относительного пути. Для серверов опция ssl_crl допустима только в случае, если сервер был построен с использованием OpenSSL. Если сервер был построен с использованием wolfSSL или yaSSL, то опция ssl_crl не поддерживается. Для клиентов опция ssl_crl допустима только в случае, если клиент был построен с использованием OpenSSL или Schannel. Аналогично, если клиент был построен с использованием GnuTLS, wolfSSL или yaSSL, то опция ssl_crl не поддерживается.
Опция ssl_crlpath определяет путь к каталогу, содержащему один или несколько файлов PEM, каждый из которых должен содержать один отозванный сертификат X509. Эта опция требует указания абсолютного, а не относительного пути. Опция ssl_crlpath поддерживается только в случае, если сервер или клиент был построен с использованием OpenSSL. Если сервер был построен с использованием wolfSSL или yaSSL, то опция ssl_crlpath не поддерживается. Аналогично, если клиент был построен с использованием GnuTLS, Schannel, wolfSSL или yaSSL, то опция ssl_crlpath не поддерживается.
См. TLS и библиотеки криптографии, используемые MariaDB для получения дополнительной информации о том, какие библиотеки используются на каких платформах.
Каталог, указанный в ssl_crlpath, необходимо обработать с помощью команды openssl rehash. Например, если настроено следующее:
ssl_crlpath=/etc/my.cnf.d/certificates/crl/
Тогда необходимо выполнить следующее:
openssl rehash /etc/my.cnf.d/certificates/crl/
Проверка сертификата сервера
Клиенты и утилиты проверяют сертификат сервера, сравнивая имя хоста и IP-адрес сервера с определёнными атрибутами в сертификате. Для большинства клиентов и утилит проверка сертификата сервера отключена по умолчанию, и она включается только при указании опции, такой как ssl-verify-server-cert.
Для проверки сертификата сервера клиенты и утилиты проверяют атрибут общее имя (CN), расположенный в поле Subject сертификата, на соответствие имени хоста и IP-адресу сервера. Если общее имя (CN) совпадает с одним из них, то сертификат считается проверенным.
Проверка сертификата сервера с альтернативными именами субъекта (SAN)
Поле Альтернативное имя субъекта (SAN), которое является расширением X.509v3, также может использоваться для проверки сертификата сервера, если оно присутствует в сертификате сервера. Это поле иногда также называется subjectAltName. При использовании клиента или утилиты, поддерживающего проверку сертификата сервера с полями subjectAltName, если сертификат сервера содержит поля subjectAltName, то эти поля также будут проверены на соответствие имени хоста и IP-адресу сервера.
Поддержка проверки сертификата сервера с полями subjectAltName зависит от используемой библиотеки TLS, используемой клиентом или утилитой.
См. TLS и библиотеки криптографии, используемые MariaDB для получения дополнительной информации о том, какие библиотеки используются на каких платформах.
Поддержка SAN с OpenSSL, wolfSSL и yaSSL
Для клиентов и утилит, построенных с использованием OpenSSL (OpenSSL 1.0.2 или более поздних версий), поддержка проверки сертификата сервера с полями subjectAltName, содержащими имя хоста сервера, была добавлена в MariaDB 10.1.23 и MariaDB 10.2.6. См. MDEV-10594 для получения дополнительной информации.
Для клиентов и утилит, построенных с использованием OpenSSL (OpenSSL 1.0.2 или более поздних версий), поддержка проверки сертификата сервера с полями subjectAltName, содержащими IP-адрес сервера, была добавлена в MariaDB 10.1.39, MariaDB 10.2.24, MariaDB 10.3.15 и MariaDB 10.4.5. См. MDEV-18131 для получения дополнительной информации.
Эта поддержка также применима к другим библиотекам TLS, которые используют API OpenSSL. В API OpenSSL проверка сертификата сервера с полями subjectAltName зависит от функций X509_check_host и X509_check_ip. Эти функции поддерживаются в следующих библиотеках TLS:
И они не поддерживаются в следующих библиотеках TLS:
Пакеты MariaDB RPM были построены с использованием OpenSSL 1.0.1 на RHEL 7 и CentOS 7, даже после того, как OpenSSL 1.0.2 стал доступен на этих дистрибутивах. Вследствие этого, клиенты и утилиты, входящие в состав этих пакетов, не поддерживали проверку сертификата сервера с полем subjectAltName, даже если пакеты были установлены на системе, на которой был установлен OpenSSL 1.0.2. Начиная с MariaDB MariaDB 10.1.39, MariaDB 10.2.23, MariaDB 10.3.14 и MariaDB 10.4.4, пакеты MariaDB RPM на RHEL 7 и CentOS 7 построены с использованием OpenSSL 1.0.2. См. MDEV-18277 для получения дополнительной информации.
Поддержка SAN с Schannel
Для клиентов и утилит, связанных с Schannel, поддержка проверки сертификата сервера с полями subjectAltName была добавлена в MariaDB Connector/C 3.0.2. См. CONC-250 для получения дополнительной информации.
Поддержка SAN с GnuTLS
Для клиентов и утилит с использованием GnuTLS, поддержка проверки сертификата сервера с полями subjectAltName была добавлена в MariaDB Connector/C 3.0.0. Дополнительную информацию см. в CONC-250.
Проверка сертификата клиента
Сервер проверяет сертификат клиента, сравнивая известные SUBJECT клиента с атрибутом Subject в сертификате клиента. Это выполняется только для учетных записей пользователей, которые были определены с помощью REQUIRE SUBJECT. Дополнительную информацию см. в Безопасность подключений для клиента и сервера: Требование TLS.
См. также
- Безопасность подключений для клиента и сервера
- Использование TLSv1.3
- Создание сертификатов с OpenSSL
- Репликация с защищенными подключениями
- Защита коммуникаций в кластере Galera
- Переменные системы SSL/TLS
- Шифрование данных в состоянии покоя
- Учебник Cyberciti: Настройка MariaDB SSL и безопасных подключений от клиентов
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/secure-connections-overview/