Spec-Zone.ru › MariaDB

Обеспечение соединений для клиента и сервера

По умолчанию MariaDB передает данные между сервером и клиентами без шифрования. Это обычно приемлемо, когда сервер и клиент работают на одном хосте или в сетях, где безопасность гарантируется другими средствами. Однако в тех случаях, когда сервер и клиент находятся в разных сетях или в сети с высоким риском, отсутствие шифрования вызывает проблемы безопасности, так как злоумышленник может перехватывать трафик во время передачи его между ними по сети.

Для минимизации этой проблемы MariaDB позволяет шифровать данные в процессе передачи между сервером и клиентами с использованием протокола Transport Layer Security (TLS). TLS ранее был известен как Secure Socket Layer (SSL), но строго говоря, протокол SSL является предшественником TLS, и теперь эта версия протокола считается небезопасной. В документации часто используется термин SSL по соображениям совместимости, и переменные сервера и состояния, связанные с TLS, по-прежнему используют префикс ssl_, но в MariaDB внутренне поддерживаются только его более безопасные преемники.

Чтобы обеспечить безопасность соединений между сервером и клиентом, необходимо убедиться, что ваш сервер был скомпилирован с поддержкой TLS. См. Обзор безопасных соединений, чтобы узнать, как проверить, был ли сервер скомпилирован с поддержкой TLS.

Вам также нужен сертификат X509, закрытый ключ и цепочка сертификатов Удостоверяющего центра (УЦ) для проверки сертификата X509 сервера. Если вы хотите использовать двухсторонний TLS, то вам также потребуется сертификат X509, закрытый ключ и цепочка сертификатов УЦ для проверки сертификата X509 клиента. Если вы хотите использовать самозаверяющие сертификаты, созданные с помощью OpenSSL, см. Создание сертификатов с помощью OpenSSL для получения информации о том, как их создать.

Включение TLS

Включение TLS для сервера MariaDB

Для включения TLS на сервере MariaDB, скомпилированном с поддержкой TLS, необходимо установить ряд системных переменных, таких как:

  • Необходимо установить путь к сертификату X509 сервера, задав системную переменную ssl_cert.
  • Необходимо установить путь к закрытому ключу сервера, задав системную переменную ssl_key.
  • Необходимо установить путь к цепочке сертификатов Удостоверяющего центра (УЦ), которые могут проверять сертификат сервера, задав либо системную переменную ssl_ca, либо ssl_capath.
  • Если вы хотите ограничить сервер определенными алгоритмами шифрования, вам также необходимо установить системную переменную ssl_cipher.

Например, чтобы установить эти переменные для сервера, добавьте системные переменные в соответствующую группу опций сервера группы опций в файле файле опций:

[mariadb]
...
ssl_cert = /etc/my.cnf.d/certificates/server-cert.pem
ssl_key = /etc/my.cnf.d/certificates/server-key.pem
ssl_ca = /etc/my.cnf.d/certificates/ca.pem

Затем перезапустите сервер, чтобы изменения вступили в силу.

После перезапуска сервера можно проверить, что TLS включен, проверив значение системной переменной have_ssl. Например:

SHOW VARIABLES LIKE 'have_ssl';

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_ssl      | YES   |
+---------------+-------+

Динамическая перезагрузка сертификатов и ключей сервера

MariaDB начиная с 10.4

Команда FLUSH SSL была впервые добавлена в MariaDB 10.4.

В MariaDB 10.4 и более поздних версиях можно использовать команду FLUSH SSL для динамической повторной инициализации контекста TLS сервера.

См. FLUSH SSL для получения дополнительной информации.

Включение TLS для клиентов MariaDB

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

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

[client-mariadb]
...
ssl_cert = /etc/my.cnf.d/certificates/client-cert.pem
ssl_key = /etc/my.cnf.d/certificates/client-key.pem
ssl_ca = /etc/my.cnf.d/certificates/ca.pem

Конкретные параметры, которые вам нужно будет установить, зависят от того, хотите ли вы использовать односторонний или двухсторонний TLS, а также хотите ли вы проверить сертификат сервера.

Те же параметры также могут включить TLS для нестандартных клиентов и утилит, которые связаны с libmysqlclient или MariaDB Connector/C.

Включение двухстороннего TLS для клиентов MariaDB

Двухсторонний TLS означает, что как клиент, так и сервер предоставляют закрытый ключ и сертификат X509. Это называется "двухсторонним" TLS, потому что клиент и сервер могут быть аутентифицированы. Например, для указания этих параметров в соответствующей группе опций клиента группы опций в файле файле опций можно установить следующее:

[client-mariadb]
...
ssl_cert = /etc/my.cnf.d/certificates/client-cert.pem
ssl_key = /etc/my.cnf.d/certificates/client-key.pem
ssl_ca = /etc/my.cnf.d/certificates/ca.pem
ssl-verify-server-cert

Или, если вы хотите указать их в командной строке с клиентом mariadb, можно выполнить что-то вроде этого:

$ mariadb -u myuser -p -h myserver.mydomain.com \
   --ssl-cert=/etc/my.cnf.d/certificates/client-cert.pem \
   --ssl-key=/etc/my.cnf.d/certificates/client-key.pem \
   --ssl-ca=/etc/my.cnf.d/certificates/ca.pem \
   --ssl-verify-server-cert

Двухсторонний SSL требуется для учетной записи, если для учетной записи указаны параметры REQUIRE X509, REQUIRE SUBJECT, и/или REQUIRE ISSUER.

Включение одностороннего TLS для клиентов MariaDB

Включение одностороннего TLS для клиентов MariaDB с проверкой сертификата сервера

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

[client-mariadb]
...
ssl_ca = /etc/my.cnf.d/certificates/ca.pem
ssl-verify-server-cert

Или, если вы хотите указать их в командной строке с клиентом mariadb, можно выполнить что-то вроде этого:

$ mariadb -u myuser -p -h myserver.mydomain.com \
   --ssl-ca=/etc/my.cnf.d/certificates/ca.pem \
   --ssl-verify-server-cert
Включение одностороннего TLS для клиентов MariaDB без проверки сертификата сервера

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

[client-mariadb]
...
ssl

Или, если вы хотите указать их в командной строке с клиентом mariadb, можно выполнить что-то вроде этого:

$ mariadb -u myuser -p -h myserver.mydomain.com \
   --ssl

Включение TLS для клиентов MariaDB Connector/C

См. документацию по параметрам TLS параметры TLS MariaDB Connector/C для получения информации о том, как включить TLS для клиентов, использующих MariaDB Connector/C.

Включение TLS для клиентов MariaDB Connector/ODBC

См. документацию по параметрам TLS параметры TLS MariaDB Connector/ODBC для получения информации о том, как включить TLS для клиентов, использующих MariaDB Connector/ODBC.

Включение TLS для клиентов MariaDB Connector/J

См. документацию по использованию TLS/SSL с MariaDB Connector/J для получения информации о том, как включить TLS для клиентов, использующих MariaDB Connector/J.

Проверка того, что соединение использует TLS

Вы можете проверить, использует ли соединение TLS, проверив системную переменную состояния соединения Ssl_cipher. Если она не пуста, то соединение использует TLS. Например:

SHOW SESSION STATUS LIKE 'Ssl_cipher';
+---------------+---------------------------+
| Variable_name | Value                     |
+---------------+---------------------------+
| Ssl_cipher    | DHE-RSA-AES256-GCM-SHA384 |
+---------------+---------------------------+
1 row in set (0.00 sec)

Требование TLS

Начиная с MariaDB 10.5.2, доступна системная переменная require_secure_transport. Когда она установлена (по умолчанию выключена), попытки подключений с использованием небезопасного транспорта будут отклоняться. Безопасные типы транспорта — это SSL/TLS, сокеты Unix или именованные каналы. Обратите внимание, что требования, установленные для определённых учетных записей пользователей, будут иметь приоритет над этим параметром.

Требование TLS для определённых учетных записей пользователей

Вы можете установить определённые ограничения, связанные с TLS, для определённых учетных записей пользователей. Например, вы можете использовать это с учетными записями пользователей, которым нужен доступ к конфиденциальным данным при их передаче через сети, которыми вы не управляете. Эти ограничения можно включить для учётной записи пользователя с помощью инструкций CREATE USER, ALTER USER или GRANT. Например:

  • Учетная запись пользователя должна подключаться через TLS, если для учётной записи пользователя определён параметр REQUIRE SSL.
ALTER USER 'alice'@'%' 
   REQUIRE SSL;
  • Учетная запись пользователя должна подключаться через TLS с определённым алгоритмом шифрования, если для учётной записи пользователя определён параметр REQUIRE CIPHER.
ALTER USER 'alice'@'%' 
   REQUIRE CIPHER 'ECDH-RSA-AES256-SHA384';
  • Пользовательская учётная запись должна подключаться по протоколу TLS с действительным клиенским сертификатом, если учётная запись пользователя определена с помощью пункта REQUIRE X509.
ALTER USER 'alice'@'%' 
   REQUIRE X509;
  • Пользовательская учётная запись должна подключаться по протоколу TLS со специфическим клиенским сертификатом, если учётная запись пользователя определена с помощью пункта REQUIRE SUBJECT.
ALTER USER 'alice'@'%' 
   REQUIRE SUBJECT '/CN=alice/O=My Dom, Inc./C=US/ST=Oregon/L=Portland';
  • Пользовательская учётная запись должна подключаться по протоколу TLS с клиенским сертификатом, который должен быть подписан конкретным центром сертификации, если учётная запись пользователя определена с помощью пункта REQUIRE ISSUER.
ALTER USER 'alice'@'%' 
   REQUIRE SUBJECT '/CN=alice/O=My Dom, Inc./C=US/ST=Oregon/L=Portland'
   AND ISSUER '/C=FI/ST=Somewhere/L=City/ O=Some Company/CN=Peter Parker/emailAddress=p.parker@marvel.com';

Требование TLS для конкретных учётных записей пользователей с конкретных хостов

Учётная запись пользователя может иметь разные определения в зависимости от хоста, с которого пользователь входит в систему. Поэтому для одного имени пользователя могут быть разные требования к TLS для разных хостов. Например:

CREATE USER 'alice'@'localhost' 
   REQUIRE NONE;

CREATE USER 'alice'@'%'
   REQUIRE SUBJECT '/CN=alice/O=My Dom, Inc./C=US/ST=Oregon/L=Portland'
   AND ISSUER '/C=FI/ST=Somewhere/L=City/ O=Some Company/CN=Peter Parker/emailAddress=p.parker@marvel.com'
   AND CIPHER 'ECDHE-ECDSA-AES256-SHA384';

В приведенном примере учётная запись пользователя alice не требует TLS при входе с хоста localhost. Однако, когда учётная запись пользователя alice входит с любого другого хоста, она должна использовать TLS с указанным шифром и предоставить действительный клиенский сертификат с указанным субъектом, который должен быть подписан указанным издателем.

Содержимое, воспроизведённое на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проходит предварительной проверки 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/securing-connections-for-client-and-server/

Spec-Zone.ru

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