Настройка SSL-TLS
Эта страница не относится к ClickHouse Cloud. Описанная здесь процедура выполняется автоматически в сервисах ClickHouse Cloud.
В этом руководстве приведены простые и минимальные настройки для использования 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, создайте новые пары сертификат/ключ:
-
Проверьте значения полей subject и issuer в сертификате:
-
Убедитесь, что новые сертификаты успешно проходят проверку относительно сертификата 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на каждом узле: -
Настройте защищённый ClickHouse Native TCP‑порт и отключите небезопасный порт по умолчанию на каждом узле:
-
Настройте порт
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 Port Описание 8443 HTTPS-интерфейс 9010 межсерверский HTTPS-порт 9281 защищённый порт ClickHouse Keeper 9440 защищённый протокол Native TCP 9444 порт Raft для ClickHouse Keeper -
Проверьте работоспособность ClickHouse Keeper
Обычные команды 4 letter word (4lW) не будут работать с помощьюechoбез TLS. Ниже показано, как использовать эти команды сopenssl.- Запустите интерактивный сеанс с
openssl
- Запустите интерактивный сеанс с
-
Отправьте команды 4LW в сеансе openssl
-
Запустите клиент ClickHouse, используя флаг
--secureи SSL-порт: -
Войдите в Play UI, используя интерфейс
httpsпо адресуhttps://chnode1.marsnet.local:8443/play.
ПримечаниеБраузер отобразит недоверенный сертификат, так как доступ осуществляется с рабочей станции, а сертификаты отсутствуют в хранилищах корневых центров сертификации на клиентской машине. При использовании сертификатов, выданных публичным центром сертификации или корпоративным CA, сертификат будет отображаться как доверенный.
-
Создайте реплицируемую таблицу:
-
Добавьте пару строк на
chnode1: -
Проверьте репликацию, просмотрев строки на узле
chnode2:
Итоги
В этой статье основное внимание уделялось настройке среды ClickHouse с использованием SSL/TLS. В производственных средах параметры будут отличаться в зависимости от требований — например, уровни проверки сертификатов, протоколы, шифры и т. д. Теперь у вас должно быть чёткое представление о шагах, необходимых для настройки и реализации защищённых подключений.