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

Настройка 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:

ХостIP-адрес
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> в файле config.xml сервера ClickHouse

    примечание

    Для производственных сред, рекомендуется использовать отдельный файл конфигурации .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

Настройки ниже настраиваются в файле config.xml сервера ClickHouse

  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Описание
    8443интерфейс https
    9010порт interserver https
    9281безопасный порт ClickHouse Keeper
    9440безопасный протокол Native TCP
    9444порт Raft ClickHouse Keeper
  3. Проверьте здоровье ClickHouse Keeper Типичные команды четырехбуквенного слова (4lW) не будут работать с использованием echo без TLS, вот как использовать команды с openssl.

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

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

    Настройка SSL
    примечание

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

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

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

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

Резюме

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