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

Настройка 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, сертификат узла и ключ, соответствующий каждому узлу, в новый каталог certs.

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

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

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

примечание

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

Для полного объяснения всех параметров посетите 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

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

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

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

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

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

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

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

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

    примечание

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

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

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

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

Резюме

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