Spec-Zone.ru › MariaDB

Обзор защищённых соединений

По умолчанию 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

MariaDB начиная с 10.4

Системная переменная 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:

  • OpenSSL 1.0.2 или более поздних версий
  • wolfSSL

И они не поддерживаются в следующих библиотеках TLS:

  • yaSSL

Пакеты 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 и безопасных подключений от клиентов
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется предварительно компанией MariaDB. Мнения, информация и мнения, выраженные в данном контенте, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 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/

Spec-Zone.ru

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