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

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

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

This page is not applicable to ClickHouse Cloud. The procedure documented here is automated in ClickHouse Cloud services.

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

  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 и отключите стандартный незащищенный порт на каждом узле:

  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
    9010interserver https порт
    9281ClickHouse Keeper защищенный порт
    9440защищенный протокол Native TCP
    9444ClickHouse Keeper Raft порт
  3. Проверьте здоровье ClickHouse Keeper Типичные команды четырехбуквенных слов (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. Настройки будут отличаться в зависимости от различных требований в производственных средах; например, уровни проверки сертификатов, протоколы, шифры и т. д. Но теперь у вас должно быть хорошее понимание шагов, связанных с конфигурацией и реализацией защищенных соединений.