Перейти к содержимому
Последнее обновление

Защищённая передача данных MySQL

В этом документе описано, как включить шифрование SSL/TLS для обмена данными между Apache Doris и клиентами MySQL. Рассматриваются быстрое включение шифрования, способы подключения клиентов, взаимная аутентификация mTLS, настройка собственных сертификатов и создание сертификатов.

Сценарии применения​

СценарийРекомендуемый подход
Шифрование передаваемых данных для обычных бизнес-задачВключить одностороннюю аутентификацию (по умолчанию)
Соблюдение нормативных требований, например в финансовом секторе, государственных организациях и на предприятияхВключить взаимную аутентификацию mTLS
Использование сертификатов, выданных внутренним корпоративным CAНастроить собственные сертификаты
Быстрая проверка только в средах PoC или разработкиИспользовать встроенные сертификаты Doris по умолчанию

Предварительные требования​

  • Кластер Apache Doris развёрнут и работает нормально
  • Версия клиента MySQL >= 5.7.11 (в более ранних версиях клиента используется другой синтаксис параметров SSL)
  • Поддерживаемые на данный момент версии протокола TLS: TLS 1.2 и TLS 1.3
  • У вас есть права на изменение conf/fe.conf на узлах FE и на перезапуск FE

Общий порядок действий​

  1. Включите SSL в конфигурации FE (при повышенных требованиях к безопасности также включите mTLS)
  2. Перезапустите FE, чтобы применить конфигурацию
  3. Установите зашифрованное соединение с помощью клиента MySQL, указав параметр --ssl-mode
  4. (Необязательно) Замените сертификаты по умолчанию собственными сертификатами

Сравнение режимов аутентификации SSL​

Doris предоставляет два режима аутентификации SSL. Выберите режим в соответствии с требованиями безопасности:

Режим аутентификацииОписаниеСценарий применения
Односторонняя аутентификация (по умолчанию)Проверяется только сертификат сервераСтандартные требования безопасности
Взаимная аутентификация (mTLS)Проверяются сертификаты сервера и клиентаПовышенные требования безопасности

Быстрый старт: включение зашифрованного соединения SSL​

Doris поставляется с файлами ключей и сертификатов по умолчанию, поэтому SSL можно включить без создания дополнительных сертификатов. Весь процесс состоит всего из двух шагов:

Шаг 1: включите SSL на FE​

Добавьте следующую настройку в конфигурационный файл FE conf/fe.conf и перезапустите FE:

enable_ssl = true

Шаг 2: подключитесь с помощью клиента MySQL​

mysql --ssl-mode=REQUIRED -uroot -P9030 -h127.0.0.1

Режимы SSL-соединения клиента​

Клиент MySQL управляет подключением с помощью параметра --ssl-mode. Доступны следующие режимы:

Режим SSLОписаниеПример команды
PREFERRED (по умолчанию)Сначала пытается установить SSL-соединение, а при неудаче переходит к нешифрованному соединениюmysql -uroot -P9030 -h127.0.0.1
DISABLEОтключает SSL и использует нешифрованное соединениеmysql --ssl-mode=DISABLE -uroot -P9030 -h127.0.0.1
REQUIREDТребует использования SSL-соединенияmysql --ssl-mode=REQUIRED -uroot -P9030 -h127.0.0.1
VERIFY_CAТребует использования SSL и проверяет CA сертификата сервера (используется в сценариях mTLS)См. раздел Настройка взаимной аутентификации (mTLS)
Примечание

Параметр --ssl-mode появился в MySQL 5.7.11. Для клиентов MySQL более ранних версий см. официальную документацию MySQL.

Настройка взаимной аутентификации (mTLS)​

При использовании mTLS сервер проверяет подлинность клиента, а клиент проверяет сертификат сервера. Этот режим подходит для сценариев со строгими требованиями к проверке подлинности подключающейся стороны.

Шаг 1: включите mTLS​

Добавьте следующие настройки в конфигурационный файл FE conf/fe.conf и перезапустите FE:

enable_ssl = true
ssl_force_client_auth = true

Шаг 2: подключитесь с клиента, используя сертификаты​

При подключении с использованием mTLS клиент должен указать сертификат CA, сертификат клиента и закрытый ключ:

mysql --ssl-mode=VERIFY_CA -uroot -P9030 -h127.0.0.1 \
--tls-version=TLSv1.2 \
--ssl-ca=/path/to/your/ca.pem \
--ssl-cert=/path/to/your/client-cert.pem \
--ssl-key=/path/to/your/client-key.pem

Сертификаты клиента по умолчанию​

Doris предоставляет файлы сертификатов клиента по умолчанию в каталоге Doris/conf/mysql_ssl_default_certificate/client_certificate/:

Имя файлаОписание
ca.pemСертификат CA
client-cert.pemСертификат клиента
client-key.pemЗакрытый ключ клиента

Подробное описание настройки сертификатов​

Чтобы включить SSL в Doris, необходимо настроить ключ и сертификат CA, а также ключ и сертификат сервера. Для включения взаимной аутентификации необходимо дополнительно настроить ключ и сертификат клиента.

Сертификаты по умолчанию​

Doris поставляется с файлами сертификатов по умолчанию, которые можно использовать сразу:

Тип сертификатаПуть по умолчаниюПароль по умолчанию
Сертификат CADoris/fe/mysql_ssl_default_certificate/ca_certificate.p12doris
Сертификат сервераDoris/fe/mysql_ssl_default_certificate/server_certificate.p12doris
Сертификат клиентаDoris/fe/mysql_ssl_default_certificate/client_certificate/-

Собственные сертификаты​

Чтобы использовать собственные сертификаты, добавьте следующие настройки в конфигурационный файл FE conf/fe.conf.

Настройка сертификата CA

mysql_ssl_default_ca_certificate = /path/to/your/ca_certificate.p12
mysql_ssl_default_ca_certificate_password = your_password

Настройка сертификата сервера

mysql_ssl_default_server_certificate = /path/to/your/server_certificate.p12
mysql_ssl_default_server_certificate_password = your_password
Совет

Другие форматы сертификатов можно указать, изменив параметр ssl_trust_store_type в conf/fe.conf. Значение по умолчанию: PKCS12.

Создание собственных сертификатов​

Если вам нужны собственные сертификаты, их можно создать с помощью OpenSSL. Полный набор команд приведён в официальной документации MySQL: создание сертификатов SSL.

Шаг 1: создайте ключи и сертификаты для CA, сервера и клиента​

# Generate the CA certificate
openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 3600 \
-key ca-key.pem -out ca.pem

# Generate the server-side certificate and sign it with the CA above
# server-cert.pem = public key, server-key.pem = private key
openssl req -newkey rsa:2048 -days 3600 \
-nodes -keyout server-key.pem -out server-req.pem
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -in server-req.pem -days 3600 \
-CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

# Generate the client-side certificate and sign it with the CA above
# client-cert.pem = public key, client-key.pem = private key
openssl req -newkey rsa:2048 -days 3600 \
-nodes -keyout client-key.pem -out client-req.pem
openssl rsa -in client-key.pem -out client-key.pem
openssl x509 -req -in client-req.pem -days 3600 \
-CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem

Шаг 2: проверьте сертификаты​

openssl verify -CAfile ca.pem server-cert.pem client-cert.pem

Шаг 3: упакуйте в формат PKCS#12​

Объедините ключ и сертификат CA, а также ключ и сертификат сервера в отдельные файлы формата PKCS#12 (P12), чтобы Doris мог их использовать:

# Package the CA key and certificate
openssl pkcs12 -inkey ca-key.pem -in ca.pem -export -out ca_certificate.p12

# Package the server-side key and certificate
openssl pkcs12 -inkey server-key.pem -in server-cert.pem -export -out server_certificate.p12
Дополнительная информация

Подробнее о создании самоподписанных сертификатов с помощью OpenSSL см. в официальной документации IBM.

Часто задаваемые вопросы​

Вопрос: клиент сообщает, что параметр --ssl-mode не распознан.​

Версия клиента MySQL ниже 5.7.11. Обновите клиент MySQL или найдите соответствующие параметры подключения в документации MySQL Connector/J.

Вопрос: после включения enable_ssl=true клиент по-прежнему устанавливает нешифрованное соединение.​

По умолчанию клиент использует режим PREFERRED, который не требует обязательного использования SSL. Укажите на клиенте --ssl-mode=REQUIRED или VERIFY_CA.

Вопрос: не удаётся подключиться в режиме mTLS.​

Не указан сертификат клиента, сертификат CA или закрытый ключ либо неверно задан путь. Убедитесь, что --ssl-ca, --ssl-cert и --ssl-key указывают на правильные файлы сертификатов.

Вопрос: не удаётся загрузить собственный сертификат.​

Формат сертификата не соответствует ssl_trust_store_type или указан неверный пароль. Проверьте, имеет ли сертификат формат PKCS12, либо явно задайте ssl_trust_store_type и проверьте пароль.

На этой странице