Настройка SSL-TLS
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-адрес |
---|---|
chnode1 | 192.168.1.221 |
chnode2 | 192.168.1.222 |
chnode3 | 192.168.1.223 |
Посмотрите Быстрый старт для получения дополнительной информации о том, как установить ClickHouse.
2. Создание SSL-сертификатов
Использование самоподписанных сертификатов предназначено только для демонстрационных целей и не должно использоваться в производственной среде. Запросы на сертификаты должны быть созданы для подписи организацией и подтверждены с использованием цепочки CA, которая будет настроена в параметрах. Тем не менее, эти шаги можно использовать для настройки и тестирования параметров, которые затем могут быть заменены фактическими сертификатами, которые будут использоваться.
-
Генерируйте ключ, который будет использоваться для нового CA:
-
Создайте новый самоподписанный сертификат CA. Следующее создаст новый сертификат, который будет использоваться для подписи других сертификатов с помощью ключа CA:
примечаниеСделайте резервную копию ключа и сертификата CA в безопасном месте вне кластера. После генерации сертификатов узлов ключ должен быть удален с узлов кластера.
-
Проверьте содержимое нового сертификата CA:
-
Создайте запрос на сертификат (CSR) и сгенерируйте ключ для каждого узла:
-
Используя CSR и CA, создайте новые пары сертификатов и ключей:
-
Проверьте сертификаты по субъекту и эмитенту:
-
Проверьте, что новые сертификаты подтверждаются сертификатом CA:
3. Создание и настройка каталога для хранения сертификатов и ключей.
Это необходимо сделать на каждом узле. Используйте соответствующие сертификаты и ключи на каждом хосте.
-
Создайте папку в директории, доступной ClickHouse на каждом узле. Рекомендуем использовать папку по умолчанию (например,
/etc/clickhouse-server
): -
Скопируйте сертификат CA, сертификат узла и ключ, соответствующие каждому узлу, в новый каталог certs.
-
Обновите владельца и права доступа, чтобы позволить ClickHouse читать сертификаты:
4. Настройка окружения с базовыми кластерами, используя ClickHouse Keeper
Для этой среды развертывания используются следующие настройки ClickHouse Keeper на каждом узле. Каждый сервер будет иметь свой собственный <server_id>
. (Например, <server_id>1</server_id>
для узла chnode1
и так далее.)
Рекомендуемый порт для ClickHouse Keeper — 9281
. Однако порт является настраиваемым и может быть установлен, если этот порт уже используется другим приложением в среде.
Для полного объяснения всех параметров посетите https://clickhouse.com/docs/operations/clickhouse-keeper/
-
Добавьте следующее внутри тега
<clickhouse>
в файлconfig.xml
сервера ClickHouseпримечаниеДля производственных сред рекомендуется использовать отдельный
.xml
файл конфигурации в директорииconfig.d
. Для получения дополнительной информации посетите https://clickhouse.com/docs/operations/configuration-files/ -
Удалите комментарии и обновите настройки keeper на всех узлах, установив флаг
<secure>
в 1: -
Обновите и добавьте следующие настройки кластера для
chnode1
иchnode2
.chnode3
будет использоваться для кворума ClickHouse Keeper.примечаниеДля этой конфигурации настроен только один пример кластера. Тестовые образцы кластеров должны быть либо удалены, либо закомментированы, или если существует существующий кластер, который тестируется, то порт должен быть обновлен, а опция
<secure>
должна быть добавлена.<user>
и<password>
должны быть установлены, если для пользователяdefault
изначально была настроена пароль в установке или в файлеusers.xml
.Следующее создает кластер с одним репликой на двух серверах (по одной на каждом узле).
-
Определите значения макросов, чтобы можно было создать таблицу ReplicatedMergeTree для тестирования. На
chnode1
:На
chnode2
:
5. Настройка интерфейсов SSL-TLS на узлах ClickHouse
Настройки ниже конфигурируются в файле config.xml
сервера ClickHouse
-
Установите отображаемое имя для развертывания (необязательно):
-
Установите ClickHouse для прослушивания на внешних портах:
-
Настройте порт
https
и отключите портhttp
на каждом узле: -
Настройте защищенный порт TCP ClickHouse и отключите стандартный незащищенный порт на каждом узле:
-
Настройте порт
interserver https
и отключите стандартный незащищенный порт на каждом узле: -
Настройте OpenSSL с сертификатами и путями
примечаниеКаждый файл и путь должны быть обновлены, чтобы соответствовать узлу, который настраивается. Например, обновите запись
<certificateFile>
наchnode2.crt
, когда настраиваете на узлеchnode2
.Для получения дополнительной информации посетите https://clickhouse.com/docs/operations/server-configuration-parameters/settings/#server_configuration_parameters-openssl
-
Настройте gRPC для SSL на каждом узле:
Для получения дополнительной информации посетите https://clickhouse.com/docs/interfaces/grpc/
-
Настройте клиент ClickHouse на как минимум одном из узлов для использования SSL для соединений в его собственном
config.xml
файле (по умолчанию в/etc/clickhouse-client/
): -
Отключите стандартные порты эмуляции для MySQL и PostgreSQL:
6. Тестирование
-
Запустите все узлы, один за другим:
-
Проверьте, что защищенные порты работают и слушают, они должны выглядеть примерно так на каждом узле:
Порт ClickHouse Описание 8443 интерфейс https 9010 interserver https порт 9281 ClickHouse Keeper защищенный порт 9440 защищенный протокол Native TCP 9444 ClickHouse Keeper Raft порт -
Проверьте здоровье ClickHouse Keeper Типичные команды четырехбуквенных слов (4lW) не будут работать с использованием
echo
без TLS, вот как использовать команды сopenssl
.- Запустите интерактивную сессию с
openssl
- Запустите интерактивную сессию с
- Отправьте команды 4LW в сессии openssl
-
Запустите клиент ClickHouse с использованием флага
--secure
и SSL порта: -
Войдите в Play UI, используя интерфейс
https
по адресуhttps://chnode1.marsnet.local:8443/play
.примечаниебраузер покажет незаслуживающий доверия сертификат, так как к нему обращаются с рабочего места, и сертификаты не находятся в хранилищах корневых CA на клиентской машине. При использовании сертификатов, выданных публичным органом или корпоративным CA, он должен отображаться как доверенный.
-
Создайте реплицированную таблицу:
-
Добавьте несколько строк на
chnode1
: -
Проверьте репликацию, просматривая строки на
chnode2
:
Резюме
В этой статье мы сосредоточились на настройке окружения ClickHouse с SSL/TLS. Настройки будут отличаться в зависимости от различных требований в производственных средах; например, уровни проверки сертификатов, протоколы, шифры и т. д. Но теперь у вас должно быть хорошее понимание шагов, связанных с конфигурацией и реализацией защищенных соединений.