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

Настройка SSL-TLS

Not supported in ClickHouse Cloud
примечание

Эта страница не применима к ClickHouse Cloud. Процедура, задокументированная здесь, автоматизирована в службах ClickHouse Cloud.

Этот гид предоставляет простые и минимальные настройки для конфигурации ClickHouse с использованием сертификатов OpenSSL для проверки соединений. Для этой демонстрации был создан самоподписанный сертификат центра сертификации (CA) и ключ с использованием сертификатов узлов для установления соединений с соответствующими настройками.

примечание

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

Просмотрите этот базовый учебник по использованию сертификатов для получения вводного обзора.

1. Создайте развертывание ClickHouse

Этот гид был написан с использованием Ubuntu 20.04 и ClickHouse, установленного на следующих хостах с использованием пакета DEB (с использованием apt). Домен: marsnet.local:

HostIP Address
chnode1192.168.1.221
chnode2192.168.1.222
chnode3192.168.1.223
примечание

Просмотрите Быстрый старт для получения дополнительных сведений о том, как установить ClickHouse.

2. Создайте SSL сертификаты

примечание

Использование самоподписанных сертификатов предназначено только для демонстрационных целей и не должно использоваться в производстве. Запросы на сертификаты должны быть созданы для подписания организацией и проверены с использованием цепочки CA, которая будет настроена в настройках. Тем не менее, эти шаги могут быть использованы для настройки и тестирования параметров, после чего они могут быть заменены фактическими сертификатами, которые будут использоваться.

  1. Сгенерируйте ключ, который будет использоваться для нового CA:

  2. Сгенерируйте новый самоподписанный сертификат CA. Следующая команда создаст новый сертификат, который будет использоваться для подписи других сертификатов с помощью ключа CA:

    примечание

    Создайте резервную копию ключа и сертификата CA в безопасном месте, не в кластере. После генерации сертификатов узлов, ключ следует удалить с узлов кластера.

  3. Проверьте содержимое нового сертификата CA:

  4. Создайте запрос на сертификат (CSR) и сгенерируйте ключ для каждого узла:

  5. Используя CSR и CA, создайте новые сертификаты и пары ключей:

  6. Проверьте сертификаты на предмет субъекта и издателя:

  7. Убедитесь, что новые сертификаты подтверждаются сертификатом CA:

3. Создайте и настройте директорию для хранения сертификатов и ключей.

примечание

Это необходимо сделать на каждом узле. Используйте соответствующие сертификаты и ключи на каждом хосте.

  1. Создайте папку в директории, доступной для ClickHouse, на каждом узле. Мы рекомендуем использовать директорию по умолчанию (например, /etc/clickhouse-server):

  2. Скопируйте сертификат CA, сертификат узла и ключ, соответствующий каждому узлу, в новую директорию сертификатов.

  3. Обновите владельца и права доступа, чтобы разрешить ClickHouse читать сертификаты:

4. Настройте окружение с базовыми кластерами с использованием ClickHouse Keeper

Для этого развертывания на каждом узле используются следующие параметры ClickHouse Keeper. Каждый сервер будет иметь свой собственный <server_id>. (Например, <server_id>1</server_id> для узла chnode1 и так далее.)

примечание

Рекомендуемый порт для ClickHouse Keeper — 9281. Однако порт можно настроить и изменить, если этот порт уже используется другим приложением в вашей среде.

Для полного объяснения всех параметров посетите https://clickhouse.com/docs/operations/clickhouse-keeper/

  1. Добавьте следующее внутрь тега <clickhouse> в конфигурации сервера ClickHouse config.xml

    примечание

    Для производственных сред рекомендуется использовать отдельный файл конфигурации .xml в директории config.d. Для получения дополнительной информации посетите https://clickhouse.com/docs/operations/configuration-files/

  2. Раскомментируйте и обновите настройки keeper на всех узлах, установив флаг <secure> в значение 1:

  3. Обновите и добавьте следующие параметры кластера к chnode1 и chnode2. chnode3 будет использоваться для кворума ClickHouse Keeper.

    примечание

    Для этой конфигурации настроен только один пример кластера. Примеры тестовых кластеров должны быть либо удалены, либо закомментированы, или, если существует существующий кластер для тестирования, то порт должен быть обновлен, а опция <secure> должна быть добавлена. <user> и <password> должны быть установлены, если пользователь default был изначально настроен на использование пароля во время установки или в файле users.xml.

    Следующий код создает кластер с одной репликой шардов на двух серверах (по одной на каждом узле).

  4. Определите значения макросов, чтобы иметь возможность создать таблицу ReplicatedMergeTree для тестирования. На chnode1:

    На chnode2:

5. Настройте интерфейсы SSL-TLS на узлах ClickHouse

Ниже приведены настройки, которые конфигурируются в файле конфигурации ClickHouse config.xml.

  1. Установите отображаемое имя для развертывания (по желанию):

  2. Установите ClickHouse на прослушивание внешних портов:

  3. Настройте порт https и отключите порт http на каждом узле:

  4. Настройте безопасный TCP порт ClickHouse Native и отключите порт по умолчанию без шифрования на каждом узле:

  5. Настройте порт interserver https и отключите порт по умолчанию без шифрования на каждом узле:

  6. Настройте OpenSSL с сертификатами и путями.

    примечание

    Каждый файл и путь должны быть обновлены, чтобы соответствовать узлу, на котором они настраиваются. Например, обновите запись <certificateFile> на chnode2.crt, когда настраиваетесь на хосте chnode2.

    Для получения дополнительной информации посетите https://clickhouse.com/docs/operations/server-configuration-parameters/settings/#server_configuration_parameters-openssl

  7. Настройте gRPC для SSL на каждом узле:

    Для получения дополнительной информации посетите https://clickhouse.com/docs/interfaces/grpc/

  8. Настройте клиент ClickHouse на как минимум одном из узлов для использования SSL при соединениях в своем config.xml файле (по умолчанию в /etc/clickhouse-client/):

  9. Отключите порты эмуляции по умолчанию для MySQL и PostgreSQL:

6. Тестирование

  1. Запустите все узлы по одному:

  2. Убедитесь, что защищенные порты запущены и слушают; они должны выглядеть примерно так на каждом узле:

    ClickHouse PortОписание
    8443интерфейс https
    9010порт interserver https
    9281защищенный порт ClickHouse Keeper
    9440защищенный протокол Native TCP
    9444порт Raft ClickHouse Keeper
  3. Проверьте состояние ClickHouse Keeper Типичные команды 4 буквы (4lW) не будут работать с использованием echo без TLS; вот как использовать команды с openssl.

    • Начните интерактивную сессию с openssl
  • Отправьте команды 4LW в сессии openssl
  1. Запустите клиент ClickHouse, используя флаг --secure и порт SSL:

  2. Войдите в Play UI, используя интерфейс https по адресу https://chnode1.marsnet.local:8443/play.

    примечание

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

  3. Создайте реплицированную таблицу:

  4. Добавьте несколько строк на chnode1:

  5. Проверьте репликацию, просмотрев строки на chnode2:

Вывод

Эта статья сосредоточена на настройке окружения ClickHouse с SSL/TLS. Настройки будут отличаться в зависимости от различных требований в производственных средах; например, уровни проверки сертификатов, протоколы, шифры и т. д. Но теперь у вас должно быть хорошее понимание шагов, связанных с настройкой и реализацией безопасных соединений.