Эта страница не применима к ClickHouse Cloud. Описанная здесь процедура в сервисах ClickHouse Cloud выполняется автоматически.
Реализация TLS сложна, и для обеспечения полностью безопасного и надежного развертывания нужно учитывать множество нюансов. Это базовое руководство с примерами настройки одностороннего TLS. Обратитесь к своей команде PKI/безопасности, чтобы сгенерировать сертификаты, подходящие для вашей организации.Для общего ознакомления см. это базовое руководство по использованию сертификатов.
Создайте развертывание 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 см. в руководстве Быстрый старт.
Создание TLS-сертификатов
Самоподписанные сертификаты используются только в демонстрационных целях и не должны применяться в продакшн. Запросы на сертификаты должны создаваться для подписи организацией и проверяться с использованием цепочки CA, которая будет настроена в параметрах. Однако эти шаги можно использовать для настройки и тестирования параметров, а затем заменить реальными сертификатами, которые будут использоваться в дальнейшем.
-
Сгенерируйте ключ, который будет использоваться для нового CA:
-
Сгенерируйте новый самоподписанный CA‑сертификат. Следующая команда создаст новый сертификат, который будет использоваться для подписи других сертификатов с помощью ключа CA:
Сохраните резервную копию ключа и CA‑сертификата в безопасном месте вне кластера. После генерации сертификатов узлов ключ следует удалить с узлов кластера.
-
Проверьте содержимое нового CA‑сертификата:
-
Создайте запрос на сертификат (CSR) и сгенерируйте ключ для каждого узла:
-
Используя CSR и CA, создайте новые пары сертификатов и ключей:
-
Проверьте сертификаты на наличие полей subject и issuer:
-
Убедитесь, что новые сертификаты проходят проверку по CA‑сертификату:
Создайте и настройте каталог для хранения сертификатов и ключей.
Это нужно сделать на каждом узле. На каждом хосте используйте соответствующие сертификаты и ключи.
-
Создайте папку в каталоге, доступном для ClickHouse, на каждом узле. Мы рекомендуем использовать каталог конфигурации по умолчанию (например,
/etc/clickhouse-server): -
Скопируйте CA‑сертификат, сертификат узла и соответствующий ему ключ в новый каталог
certsна каждом узле. -
Измените владельца и права доступа, чтобы ClickHouse мог читать сертификаты:
Настройка среды с базовыми кластерами на основе 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/Когда ClickHouse Keeper встроен в ClickHouse server (как показано выше), Keeper использует конфигурацию OpenSSL сервера, заданную в разделе OpenSSL статьи Настройка TLS‑интерфейсов на узлах ClickHouse. Если ClickHouse Keeper запущен как автономный процесс, необходимо добавить раздел
<openSSL> в конфигурационный файл Keeper с теми же настройками CA‑сертификата и сертификата/ключа узла. Подробности см. ниже в разделе Настройка OpenSSL для автономного ClickHouse Keeper.-
Раскомментируйте и обновите параметры Keeper на всех узлах, установив флаг
<secure>равным 1: -
Обновите и добавьте следующие настройки кластера на
chnode1иchnode2.chnode3будет использоваться для кворума ClickHouse Keeper.
Для этой конфигурации настроен только один пример кластера. Тестовые кластеры-примеры необходимо либо удалить, либо закомментировать, либо, если тестируется существующий кластер, обновить порт и добавить параметр
<secure>. Необходимо указать <user и <password>, если для пользователя default изначально был задан пароль при установке или в файле users.xml.-
Задайте значения макросов, чтобы создать таблицу ReplicatedMergeTree для тестирования. На
chnode1:Наchnode2:
Настройте TLS-интерфейсы на узлах ClickHouse
Приведенные ниже параметры настраиваются вconfig.xml сервера ClickHouse-
Задайте отображаемое имя для развертывания (необязательно):
-
Настройте ClickHouse на прослушивание внешних портов:
-
Настройте порт
httpsи отключите портhttpна каждом узле: -
Настройте защищенный TCP-порт ClickHouse Native и отключите стандартный незащищенный порт на каждом узле:
-
Настройте порт
interserver httpsи отключите стандартный незащищенный порт на каждом узле: - Настройте OpenSSL, указав сертификаты и пути
Имена файлов и пути должны быть обновлены в соответствии с узлом, на котором выполняется настройка.
Например, при настройке узла
chnode2 укажите в записи <certificateFile> значение chnode2.crt.-
Настройте TLS для gRPC на каждом узле:
Дополнительные сведения см. по адресу https://clickhouse.com/docs/interfaces/grpc/
-
Настройте клиент ClickHouse как минимум на одном из узлов для использования TLS-соединений в его собственном файле
config.xml(по умолчанию — в/etc/clickhouse-client/): -
Отключите порты эмуляции MySQL и PostgreSQL, используемые по умолчанию:
Тестирование
-
Запустите все узлы по очереди:
-
Убедитесь, что защищённые порты открыты и прослушиваются; на каждом узле это должно выглядеть примерно так:
Порт ClickHouse Описание 8443 интерфейс HTTPS 9010 межсерверный HTTPS-порт 9281 защищённый порт ClickHouse Keeper 9440 защищённый нативный TCP-протокол 9444 порт Raft для ClickHouse Keeper -
Проверьте состояние ClickHouse Keeper
Типичные команды из 4 букв (4lW) не будут работать с
echoбез TLS; вот как использовать эти команды черезopenssl.- Запустите интерактивный сеанс в
openssl
- Запустите интерактивный сеанс в
-
Отправьте команды 4LW в сеансе OpenSSL
-
Запустите клиент ClickHouse, указав флаг
--secureи порт TLS: -
Войдите в интерфейс Play через
https-интерфейс по адресуhttps://chnode1.marsnet.local:8443/play.
браузер покажет, что сертификат не является доверенным, поскольку доступ к нему осуществляется с рабочей станции, а сертификаты отсутствуют в хранилищах корневых CA на клиентской машине.
При использовании сертификатов, выпущенных общедоступным центром сертификации или корпоративным CA, он должен отображаться как доверенный.
-
Создайте реплицируемую таблицу:
-
Добавьте несколько строк на
chnode1: -
Проверьте репликацию, просмотрев строки на
chnode2:
Настройка OpenSSL для автономного ClickHouse Keeper
tcp_port_secure) и для Raft-репликации между узлами Keeper.
Добавьте следующий раздел <openSSL> в файл конфигурации автономного ClickHouse Keeper на каждом узле:
Имя каждого файла нужно изменить в соответствии с узлом, на котором выполняется настройка.
Например, при настройке на хосте
chnode2 укажите в записи <certificateFile> значение chnode2.crt.<server> используется для входящих клиентских подключений на защищённом порту Keeper (tcp_port_secure). Раздел <client> используется для исходящих подключений между узлами Keeper во время репликации Raft.
В примерах выше для сертификатов используется путь
/etc/clickhouse-keeper/certs/ — это типичный путь для автономных установок Keeper. Если вы установили Keeper в другой каталог, скорректируйте путь соответствующим образом. Сами сертификаты — те же, что были созданы на шаге 2.Режимы проверки OpenSSL и обработчики сертификатов
<openSSL> поддерживает несколько вариантов для <verificationMode> и <invalidCertificateHandler>, которые определяют, как ClickHouse проверяет TLS-сертификаты. Эти настройки применяются к clickhouse-server, clickhouse-client и автономному ClickHouse Keeper.
Режимы проверки
<verificationMode> в разделе <server> или <client> элемента <openSSL>:
| Режим | Описание |
|---|---|
none | Проверка сертификата не выполняется. Соединение шифруется, но подлинность узла peer не проверяется. Используйте этот режим только для тестирования. |
relaxed | Проверяет сертификат узла peer, если он предоставлен, но не завершает соединение с ошибкой, если сертификат отсутствует. |
once | На стороне сервера проверяет сертификат клиента только при первоначальном рукопожатии и пропускает повторное согласование. На стороне клиента работает так же, как relaxed. |
strict | Требует сертификат узла peer и полностью проверяет его. Соединение завершается с ошибкой, если сертификат отсутствует, просрочен или не подписан доверенным CA. Рекомендуется для продакшна. |
Обработчики недействительных сертификатов
<invalidCertificateHandler> в разделе <server> или <client> внутри <openSSL>. Этот обработчик определяет, что происходит при сбое проверки сертификата. На стороне сервера он управляет реакцией на недействительные клиентские сертификаты. На стороне клиента он управляет реакцией на недействительные сертификаты сервера.
| Обработчик | Описание |
|---|---|
RejectCertificateHandler | Отклоняет соединение, если сертификат недействителен. Это значение по умолчанию и рекомендуемая настройка. |
AcceptCertificateHandler | Принимает соединение, даже если сертификат недействителен. Используйте это только для тестирования. |
Пример: отключение проверки сертификата
verificationMode значение none и используйте AcceptCertificateHandler.
Для clickhouse-client также можно использовать флаг командной строки --accept-invalid-certificate, который автоматически применяет оба параметра.
clickhouse-client (/etc/clickhouse-client/config.xml):
config.xml или файл в config.d/). В разделе <server> по-прежнему нужно указать пути к сертификату и ключу, поскольку сервер должен предъявлять клиентам собственный сертификат, даже если он не проверяет их сертификаты: