Репликация с защищенными подключениями
Термины мастер и слейв исторически использовались в репликации, но теперь предпочтительнее термины первичный и реплика. Старые термины всё ещё используются в некоторых частях документации и в командах MariaDB, хотя MariaDB 10.5 начала процесс переименования. Процесс документирования продолжается. Следите за прогрессом этого усилия на странице MariaDB 10.5 и MDEV-18777.
По умолчанию MariaDB реплицирует данные между мастерами и слейвами без шифрования. Это обычно приемлемо, когда мастер и слейв работают в сетях, где безопасность гарантируется другими средствами. Однако в тех случаях, когда мастер и слейв находятся в разных сетях или в сети с высоким риском, отсутствие шифрования создаёт проблемы безопасности, поскольку злоумышленник может потенциально перехватывать трафик при его передаче между ними по сети.
Чтобы снизить эту проблему, MariaDB позволяет шифровать реплицируемые данные в процессе передачи между мастерами и слейвами с использованием протокола Transport Layer Security (TLS). TLS ранее назывался Secure Socket Layer (SSL), но строго говоря, SSL является предшественником TLS, и этот вариант протокола сейчас считается небезопасным. В документации часто используется термин SSL, и по причинам совместимости переменные системы и статуса, связанные с TLS, до сих пор используют префикс ssl_, но внутри MariaDB поддерживаются только его более безопасные последователи.
Для обеспечения безопасности соединений между мастером и слейвом необходимо убедиться, что оба сервера были скомпилированы с поддержкой TLS. См. Обзор безопасных соединений, чтобы узнать, как проверить, был ли сервер скомпилирован с поддержкой TLS.
Вам также понадобится сертификат X509, закрытый ключ и цепочка сертификатов Центра сертификации (CA) для проверки сертификата X509 для мастера. Если вы хотите использовать двухсторонний TLS, то вам также потребуется сертификат X509, закрытый ключ и цепочка сертификатов Центра сертификации (CA) для проверки сертификата X509 для слейва. Если вы хотите использовать самозаверяющие сертификаты, созданные с помощью OpenSSL, см. Создание сертификатов с помощью OpenSSL для получения информации о создании таких сертификатов.
Защита трафика репликации
Для защиты трафика репликации необходимо убедиться, что TLS включен на мастере. Если вы хотите использовать двухсторонний TLS, необходимо также убедиться, что TLS включен на слейве. См. Обеспечение безопасности соединений для клиента и сервера для получения информации об этом.
Например, чтобы установить переменные системы TLS для каждого сервера, добавьте их в соответствующую группу опций сервера в файле опций на каждом сервере:
[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 для шифрования реплицируемых данных в процессе передачи. Доступны два метода:
- Выполнение команды
CHANGE MASTERдля установки соответствующих параметров TLS. - Настройка параметров клиента TLS в файле опций.
Выполнение CHANGE MASTER
TLS можно включить на реплицируемом слейве, выполнив команду CHANGE MASTER. Для этого необходимо установить ряд параметров. Конкретные параметры зависят от того, нужен ли вам односторонний или двухсторонний TLS, и нужно ли вам проверять сертификат сервера.
Включение двухстороннего TLS с помощью CHANGE MASTER
Двухсторонний TLS означает, что и клиент, и сервер предоставляют закрытый ключ и сертификат X509. Он называется «двухсторонним» TLS, потому что и клиент, и сервер могут быть аутентифицированы. В данном случае «клиентом» является слейв. Для настройки двухстороннего TLS вам потребуется установить следующие параметры:
- Необходимо установить путь к сертификату сервера, установив параметр
MASTER_SSL_CERT. - Необходимо установить путь к закрытому ключу сервера, установив параметр
MASTER_SSL_KEY. - Необходимо установить путь к цепочке сертификатов центра сертификации (CA), которые могут проверить сертификат сервера, установив либо параметр
MASTER_SSL_CA, либо параметрMASTER_SSL_CAPATH. - Если требуется проверка сертификата сервера, необходимо также установить параметр
MASTER_SSL_VERIFY_SERVER_CERT. - Если необходимо ограничить сервер определёнными шифрами, нужно также установить параметр
MASTER_SSL_CIPHER.
Если потоки слейва в настоящее время работают, сначала необходимо остановить их, выполнив команду STOP SLAVE. Например:
STOP SLAVE;
Затем выполните команду CHANGE MASTER, чтобы настроить слейв для использования TLS. Например:
CHANGE MASTER TO MASTER_SSL_CERT = '/path/to/client-cert.pem', MASTER_SSL_KEY = '/path/to/client-key.pem', MASTER_SSL_CA = '/path/to/ca/ca.pem', MASTER_SSL_VERIFY_SERVER_CERT=1;
На этом этапе можно начать репликацию, выполнив команду START SLAVE. Например:
START SLAVE;
Теперь слейв использует TLS для шифрования данных в процессе передачи при репликации с мастера.
Включение одностороннего TLS с помощью CHANGE MASTER
Включение одностороннего TLS с помощью CHANGE MASTER с проверкой сертификата сервера
Односторонний TLS означает, что только сервер предоставляет закрытый ключ и сертификат X509. Когда TLS используется без сертификата клиента, это называется «односторонним» TLS, потому что только сервер может быть аутентифицирован, поэтому аутентификация возможна только в одном направлении. Однако шифрование всё ещё возможно в обоих направлениях. Проверка сертификата сервера означает, что клиент проверяет, принадлежит ли сертификат серверу. В данном случае «клиентом» является слейв. Для настройки одностороннего TLS необходимо установить следующие параметры:
- Необходимо установить путь к цепочке сертификатов центра сертификации (CA), которые могут проверить сертификат сервера, установив либо параметр
MASTER_SSL_CA, либо параметрMASTER_SSL_CAPATH. - Если требуется проверка сертификата сервера, необходимо также установить параметр
MASTER_SSL_VERIFY_SERVER_CERT. - Если необходимо ограничить сервер определёнными шифрами, нужно также установить параметр
MASTER_SSL_CIPHER.
Если потоки слейва в настоящее время работают, сначала необходимо остановить их, выполнив команду STOP SLAVE. Например:
STOP SLAVE;
Затем выполните команду CHANGE MASTER, чтобы настроить слейв для использования TLS. Например:
CHANGE MASTER TO MASTER_SSL_CA = '/path/to/ca/ca.pem', MASTER_SSL_VERIFY_SERVER_CERT=1;
На этом этапе можно начать репликацию, выполнив команду START SLAVE. Например:
START SLAVE;
Теперь слейв использует TLS для шифрования данных в процессе передачи при репликации с мастера.
Включение одностороннего TLS с помощью CHANGE MASTER без проверки сертификата сервера
Односторонний TLS означает, что только сервер предоставляет закрытый ключ и сертификат X509. Когда TLS используется без сертификата клиента, это называется «односторонним» TLS, потому что только сервер может быть аутентифицирован, поэтому аутентификация возможна только в одном направлении. Однако шифрование всё ещё возможно в обоих направлениях. В данном случае «клиентом» является слейв. Для настройки двухстороннего TLS без проверки сертификата сервера вам потребуется установить следующие параметры:
- Необходимо настроить слейв для использования TLS, установив параметр
MASTER_SSL. - Если необходимо ограничить сервер определёнными шифрами, нужно также установить параметр
MASTER_SSL_CIPHER.
Если потоки слейва в настоящее время работают, сначала необходимо остановить их, выполнив команду STOP SLAVE. Например:
STOP SLAVE;
Затем выполните команду CHANGE MASTER, чтобы настроить слейв для использования TLS. Например:
CHANGE MASTER TO MASTER_SSL=1;
На этом этапе можно начать репликацию, выполнив команду START SLAVE. Например:
START SLAVE;
Теперь слейв использует TLS для шифрования данных в процессе передачи при репликации с мастера.
Настройка параметров клиента TLS в файле опций
В тех случаях, когда вы не против перезапуска сервера или настраиваете сервер с нуля впервые, вам может быть удобнее настроить параметры TLS для репликации через файл опций. Это делается так же, как и для других клиентов. Конкретные параметры, которые вам потребуются, зависят от того, нужен ли вам односторонний или двухсторонний TLS, и нужно ли вам проверять сертификат сервера. См. Обеспечение безопасности соединений для клиента и сервера: включение 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 ssl-verify-server-cert
Перед перезапуском сервера вы также можете установить параметр --skip-slave-start в группе опций сервера в файле опций. Этот параметр предотвращает автоматический перезапуск потоков слейва при запуске сервера. Вместо этого их необходимо перезапустить вручную.
После внесения этих изменений можно перезапустить сервер.
После того как сервер снова заработает, установите параметр MASTER_SSL с помощью команды CHANGE MASTER. Это включит TLS. Например:
CHANGE MASTER TO MASTER_SSL=1;
Сертификат и ключи будут считаны из файла опций.
На этом этапе можно начать репликацию, выполнив команду START SLAVE.
START SLAVE;
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/replication-with-secure-connections/