Перейти к основному содержанию
Эта страница не применима к ClickHouse Cloud. Описанная здесь процедура в сервисах ClickHouse Cloud выполняется автоматически.
В этом руководстве приведены простые минимальные настройки для конфигурации ClickHouse с использованием сертификатов OpenSSL для проверки соединений. В этом примере создаются самоподписанные сертификат и ключ центра сертификации (CA), а также сертификаты узлов, чтобы установить соединения с нужными параметрами.
Реализация TLS сложна, и для обеспечения полностью безопасного и надежного развертывания нужно учитывать множество нюансов. Это базовое руководство с примерами настройки одностороннего 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

Создание TLS-сертификатов

Самоподписанные сертификаты используются только в демонстрационных целях и не должны применяться в продакшн. Запросы на сертификаты должны создаваться для подписи организацией и проверяться с использованием цепочки CA, которая будет настроена в параметрах. Однако эти шаги можно использовать для настройки и тестирования параметров, а затем заменить реальными сертификатами, которые будут использоваться в дальнейшем.
  1. Сгенерируйте ключ, который будет использоваться для нового CA:
    openssl genrsa -out marsnet_ca.key 2048
    
  2. Сгенерируйте новый самоподписанный CA‑сертификат. Следующая команда создаст новый сертификат, который будет использоваться для подписи других сертификатов с помощью ключа CA:
    openssl req -x509 -subj "/CN=marsnet.local CA" -nodes -key marsnet_ca.key -days 1095 -out marsnet_ca.crt
    
Сохраните резервную копию ключа и CA‑сертификата в безопасном месте вне кластера. После генерации сертификатов узлов ключ следует удалить с узлов кластера.
  1. Проверьте содержимое нового CA‑сертификата:
    openssl x509 -in marsnet_ca.crt -text
    
  2. Создайте запрос на сертификат (CSR) и сгенерируйте ключ для каждого узла:
    openssl req -newkey rsa:2048 -nodes -subj "/CN=chnode1" -addext "subjectAltName = DNS:chnode1.marsnet.local,IP:192.168.1.221" -keyout chnode1.key -out chnode1.csr
    openssl req -newkey rsa:2048 -nodes -subj "/CN=chnode2" -addext "subjectAltName = DNS:chnode2.marsnet.local,IP:192.168.1.222" -keyout chnode2.key -out chnode2.csr
    openssl req -newkey rsa:2048 -nodes -subj "/CN=chnode3" -addext "subjectAltName = DNS:chnode3.marsnet.local,IP:192.168.1.223" -keyout chnode3.key -out chnode3.csr
    
  3. Используя CSR и CA, создайте новые пары сертификатов и ключей:
    openssl x509 -req -in chnode1.csr -out chnode1.crt -CA marsnet_ca.crt -CAkey marsnet_ca.key -days 365 -copy_extensions copy
    openssl x509 -req -in chnode2.csr -out chnode2.crt -CA marsnet_ca.crt -CAkey marsnet_ca.key -days 365 -copy_extensions copy
    openssl x509 -req -in chnode3.csr -out chnode3.crt -CA marsnet_ca.crt -CAkey marsnet_ca.key -days 365 -copy_extensions copy
    
  4. Проверьте сертификаты на наличие полей subject и issuer:
    openssl x509 -in chnode1.crt -text -noout
    
  5. Убедитесь, что новые сертификаты проходят проверку по CA‑сертификату:
    openssl verify -CAfile marsnet_ca.crt chnode1.crt
    chnode1.crt: OK
    
3

Создайте и настройте каталог для хранения сертификатов и ключей.

Это нужно сделать на каждом узле. На каждом хосте используйте соответствующие сертификаты и ключи.
  1. Создайте папку в каталоге, доступном для ClickHouse, на каждом узле. Мы рекомендуем использовать каталог конфигурации по умолчанию (например, /etc/clickhouse-server):
    mkdir /etc/clickhouse-server/certs
    
  2. Скопируйте CA‑сертификат, сертификат узла и соответствующий ему ключ в новый каталог certs на каждом узле.
  3. Измените владельца и права доступа, чтобы ClickHouse мог читать сертификаты:
    chown clickhouse:clickhouse -R /etc/clickhouse-server/certs
    chmod 600 /etc/clickhouse-server/certs/*
    chmod 755 /etc/clickhouse-server/certs
    ll /etc/clickhouse-server/certs
    
    total 20
    drw-r--r-- 2 clickhouse clickhouse 4096 Apr 12 20:23 ./
    drwx------ 5 clickhouse clickhouse 4096 Apr 12 20:23 ../
    -rw------- 1 clickhouse clickhouse  997 Apr 12 20:22 chnode1.crt
    -rw------- 1 clickhouse clickhouse 1708 Apr 12 20:22 chnode1.key
    -rw------- 1 clickhouse clickhouse 1131 Apr 12 20:23 marsnet_ca.crt
    
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/
<keeper_server>
    <tcp_port_secure>9281</tcp_port_secure>
    <server_id>1</server_id>
    <log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
    <snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>

    <coordination_settings>
        <operation_timeout_ms>10000</operation_timeout_ms>
        <session_timeout_ms>30000</session_timeout_ms>
        <raft_logs_level>trace</raft_logs_level>
    </coordination_settings>

    <raft_configuration>
        <secure>true</secure>
        <server>
            <id>1</id>
            <hostname>chnode1.marsnet.local</hostname>
            <port>9444</port>
        </server>
        <server>
            <id>2</id>
            <hostname>chnode2.marsnet.local</hostname>
            <port>9444</port>
        </server>
        <server>
            <id>3</id>
            <hostname>chnode3.marsnet.local</hostname>
            <port>9444</port>
        </server>
    </raft_configuration>
</keeper_server>
Когда ClickHouse Keeper встроен в ClickHouse server (как показано выше), Keeper использует конфигурацию OpenSSL сервера, заданную в разделе OpenSSL статьи Настройка TLS‑интерфейсов на узлах ClickHouse. Если ClickHouse Keeper запущен как автономный процесс, необходимо добавить раздел <openSSL> в конфигурационный файл Keeper с теми же настройками CA‑сертификата и сертификата/ключа узла. Подробности см. ниже в разделе Настройка OpenSSL для автономного ClickHouse Keeper.
  1. Раскомментируйте и обновите параметры Keeper на всех узлах, установив флаг <secure> равным 1:
    <zookeeper>
        <node>
            <host>chnode1.marsnet.local</host>
            <port>9281</port>
            <secure>1</secure>
        </node>
        <node>
            <host>chnode2.marsnet.local</host>
            <port>9281</port>
            <secure>1</secure>
        </node>
        <node>
            <host>chnode3.marsnet.local</host>
            <port>9281</port>
            <secure>1</secure>
        </node>
    </zookeeper>
    
  2. Обновите и добавьте следующие настройки кластера на chnode1 и chnode2. chnode3 будет использоваться для кворума ClickHouse Keeper.
Для этой конфигурации настроен только один пример кластера. Тестовые кластеры-примеры необходимо либо удалить, либо закомментировать, либо, если тестируется существующий кластер, обновить порт и добавить параметр <secure>. Необходимо указать <user и <password>, если для пользователя default изначально был задан пароль при установке или в файле users.xml.
Следующая конфигурация создаёт кластер с одной репликой сегмента на двух серверах (по одному на каждом узле).
<remote_servers>
    <cluster_1S_2R>
        <shard>
            <replica>
                <host>chnode1.marsnet.local</host>
                <port>9440</port>
                <user>default</user>
                <password>ClickHouse123!</password>
                <secure>1</secure>
            </replica>
            <replica>
                <host>chnode2.marsnet.local</host>
                <port>9440</port>
                <user>default</user>
                <password>ClickHouse123!</password>
                <secure>1</secure>
            </replica>
        </shard>
    </cluster_1S_2R>
</remote_servers>
  1. Задайте значения макросов, чтобы создать таблицу ReplicatedMergeTree для тестирования. На chnode1:
    <macros>
        <shard>1</shard>
        <replica>replica_1</replica>
    </macros>
    
    На chnode2:
    <macros>
        <shard>1</shard>
        <replica>replica_2</replica>
    </macros>
    
5

Настройте TLS-интерфейсы на узлах ClickHouse

Приведенные ниже параметры настраиваются в config.xml сервера ClickHouse
  1. Задайте отображаемое имя для развертывания (необязательно):
    <display_name>clickhouse</display_name>
    
  2. Настройте ClickHouse на прослушивание внешних портов:
    <listen_host>0.0.0.0</listen_host>
    
  3. Настройте порт https и отключите порт http на каждом узле:
    <https_port>8443</https_port>
    {/*<http_port>8123</http_port>*/}
    
  4. Настройте защищенный TCP-порт ClickHouse Native и отключите стандартный незащищенный порт на каждом узле:
    <tcp_port_secure>9440</tcp_port_secure>
    {/*<tcp_port>9000</tcp_port>*/}
    
  5. Настройте порт interserver https и отключите стандартный незащищенный порт на каждом узле:
    <interserver_https_port>9010</interserver_https_port>
    {/*<interserver_http_port>9009</interserver_http_port>*/}
    
  6. Настройте OpenSSL, указав сертификаты и пути
Имена файлов и пути должны быть обновлены в соответствии с узлом, на котором выполняется настройка. Например, при настройке узла chnode2 укажите в записи <certificateFile> значение chnode2.crt.
<openSSL>
    <server>
        <certificateFile>/etc/clickhouse-server/certs/chnode1.crt</certificateFile>
        <privateKeyFile>/etc/clickhouse-server/certs/chnode1.key</privateKeyFile>
        <verificationMode>relaxed</verificationMode>
        <caConfig>/etc/clickhouse-server/certs/marsnet_ca.crt</caConfig>
        <cacheSessions>true</cacheSessions>
        <disableProtocols>sslv2,sslv3</disableProtocols>
        <preferServerCiphers>true</preferServerCiphers>
    </server>
    <client>
        <loadDefaultCAFile>false</loadDefaultCAFile>
        <caConfig>/etc/clickhouse-server/certs/marsnet_ca.crt</caConfig>
        <cacheSessions>true</cacheSessions>
        <disableProtocols>sslv2,sslv3</disableProtocols>
        <preferServerCiphers>true</preferServerCiphers>
        <verificationMode>relaxed</verificationMode>
        <invalidCertificateHandler>
            <name>RejectCertificateHandler</name>
        </invalidCertificateHandler>
    </client>
</openSSL>
Дополнительные сведения см. по адресу https://clickhouse.com/docs/operations/server-configuration-parameters/settings/#server&#95;configuration&#95;parameters-openssl
  1. Настройте TLS для gRPC на каждом узле:
    <grpc>
        <enable_ssl>1</enable_ssl>
        <ssl_cert_file>/etc/clickhouse-server/certs/chnode1.crt</ssl_cert_file>
        <ssl_key_file>/etc/clickhouse-server/certs/chnode1.key</ssl_key_file>
        <ssl_require_client_auth>true</ssl_require_client_auth>
        <ssl_ca_cert_file>/etc/clickhouse-server/certs/marsnet_ca.crt</ssl_ca_cert_file>
        <transport_compression_type>none</transport_compression_type>
        <transport_compression_level>0</transport_compression_level>
        <max_send_message_size>-1</max_send_message_size>
        <max_receive_message_size>-1</max_receive_message_size>
        <verbose_logs>false</verbose_logs>
    </grpc>
    
    Дополнительные сведения см. по адресу https://clickhouse.com/docs/interfaces/grpc/
  2. Настройте клиент ClickHouse как минимум на одном из узлов для использования TLS-соединений в его собственном файле config.xml (по умолчанию — в /etc/clickhouse-client/):
    <openSSL>
        <client>
            <loadDefaultCAFile>false</loadDefaultCAFile>
            <caConfig>/etc/clickhouse-server/certs/marsnet_ca.crt</caConfig>
            <cacheSessions>true</cacheSessions>
            <disableProtocols>sslv2,sslv3</disableProtocols>
            <preferServerCiphers>true</preferServerCiphers>
            <invalidCertificateHandler>
                <name>RejectCertificateHandler</name>
            </invalidCertificateHandler>
        </client>
    </openSSL>
    
  3. Отключите порты эмуляции MySQL и PostgreSQL, используемые по умолчанию:
    {/*mysql_port>9004</mysql_port*/}
    {/*postgresql_port>9005</postgresql_port*/}
    
6

Тестирование

  1. Запустите все узлы по очереди:
    service clickhouse-server start
    
  2. Убедитесь, что защищённые порты открыты и прослушиваются; на каждом узле это должно выглядеть примерно так:
    root@chnode1:/etc/clickhouse-server# netstat -ano | grep tcp
    
    tcp        0      0 0.0.0.0:9010            0.0.0.0:*               LISTEN      off (0.00/0/0)
    tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      off (0.00/0/0)
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      off (0.00/0/0)
    tcp        0      0 0.0.0.0:8443            0.0.0.0:*               LISTEN      off (0.00/0/0)
    tcp        0      0 0.0.0.0:9440            0.0.0.0:*               LISTEN      off (0.00/0/0)
    tcp        0      0 0.0.0.0:9281            0.0.0.0:*               LISTEN      off (0.00/0/0)
    tcp        0      0 192.168.1.221:33046     192.168.1.222:9444      ESTABLISHED off (0.00/0/0)
    tcp        0      0 192.168.1.221:42730     192.168.1.223:9444      ESTABLISHED off (0.00/0/0)
    tcp        0      0 192.168.1.221:51952     192.168.1.222:9281      ESTABLISHED off (0.00/0/0)
    tcp        0      0 192.168.1.221:22        192.168.1.210:49801     ESTABLISHED keepalive (6618.05/0/0)
    tcp        0     64 192.168.1.221:22        192.168.1.210:59195     ESTABLISHED on (0.24/0/0)
    tcp6       0      0 :::22                   :::*                    LISTEN      off (0.00/0/0)
    tcp6       0      0 :::9444                 :::*                    LISTEN      off (0.00/0/0)
    tcp6       0      0 192.168.1.221:9444      192.168.1.222:59046     ESTABLISHED off (0.00/0/0)
    tcp6       0      0 192.168.1.221:9444      192.168.1.223:41976     ESTABLISHED off (0.00/0/0)
    
    Порт ClickHouseОписание
    8443интерфейс HTTPS
    9010межсерверный HTTPS-порт
    9281защищённый порт ClickHouse Keeper
    9440защищённый нативный TCP-протокол
    9444порт Raft для ClickHouse Keeper
  3. Проверьте состояние ClickHouse Keeper Типичные команды из 4 букв (4lW) не будут работать с echo без TLS; вот как использовать эти команды через openssl.
    • Запустите интерактивный сеанс в openssl
openssl s_client -connect chnode1.marsnet.local:9281
CONNECTED(00000003)
depth=0 CN = chnode1
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = chnode1
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:CN = chnode1
   i:CN = marsnet.local CA
---
Server certificate
-----BEGIN CERTIFICATE-----
MIICtDCCAZwCFD321grxU3G5pf6hjitf2u7vkusYMA0GCSqGSIb3DQEBCwUAMBsx
...
  • Отправьте команды 4LW в сеансе OpenSSL
    mntr
    
    ---
    Post-Handshake New Session Ticket arrived:
    SSL-Session:
        Protocol  : TLSv1.3
    ...
    read R BLOCK
    zk_version      v22.7.3.5-stable-e140b8b5f3a5b660b6b576747063fd040f583cf3
    zk_avg_latency  0
    zk_max_latency  4087
    zk_min_latency  0
    zk_packets_received     4565774
    zk_packets_sent 4565773
    zk_num_alive_connections        2
    zk_outstanding_requests 0
    zk_server_state leader
    zk_znode_count  1087
    zk_watch_count  26
    zk_ephemerals_count     12
    zk_approximate_data_size        426062
    zk_key_arena_size       258048
    zk_latest_snapshot_size 0
    zk_open_file_descriptor_count   187
    zk_max_file_descriptor_count    18446744073709551615
    zk_followers    2
    zk_synced_followers     1
    closed
    
  1. Запустите клиент ClickHouse, указав флаг --secure и порт TLS:
    root@chnode1:/etc/clickhouse-server# clickhouse-client --user default --password ClickHouse123! --port 9440 --secure --host chnode1.marsnet.local
    ClickHouse client version 22.3.3.44 (official build).
    Connecting to chnode1.marsnet.local:9440 as user default.
    Connected to ClickHouse server version 22.3.3 revision 54455.
    
    clickhouse :)
    
  2. Войдите в интерфейс Play через https-интерфейс по адресу https://chnode1.marsnet.local:8443/play.
браузер покажет, что сертификат не является доверенным, поскольку доступ к нему осуществляется с рабочей станции, а сертификаты отсутствуют в хранилищах корневых CA на клиентской машине. При использовании сертификатов, выпущенных общедоступным центром сертификации или корпоративным CA, он должен отображаться как доверенный.
  1. Создайте реплицируемую таблицу:
    clickhouse :) CREATE TABLE repl_table ON CLUSTER cluster_1S_2R
                (
                    id UInt64,
                    column1 Date,
                    column2 String
                )
                ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/default/repl_table', '{replica}' )
                ORDER BY (id);
    
    ┌─host──────────────────┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐
    │ chnode2.marsnet.local │ 9440 │      0 │       │                   1 │                0 │
    │ chnode1.marsnet.local │ 9440 │      0 │       │                   0 │                0 │
    └───────────────────────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘
    
  2. Добавьте несколько строк на chnode1:
    INSERT INTO repl_table
    (id, column1, column2)
    VALUES
    (1,'2022-04-01','abc'),
    (2,'2022-04-02','def');
    
  3. Проверьте репликацию, просмотрев строки на chnode2:
    SELECT * FROM repl_table
    
    ┌─id─┬────column1─┬─column2─┐
    │  1 │ 2022-04-01 │ abc     │
    │  2 │ 2022-04-02 │ def     │
    └────┴────────────┴─────────┘
    

Настройка OpenSSL для автономного ClickHouse Keeper

Если ClickHouse Keeper запускается как автономный процесс (а не в составе ClickHouse server), сертификаты и параметры OpenSSL нужно настраивать отдельно в файле конфигурации Keeper. Без этого Keeper не сможет устанавливать защищённые соединения для связи с клиентами (tcp_port_secure) и для Raft-репликации между узлами Keeper. Добавьте следующий раздел <openSSL> в файл конфигурации автономного ClickHouse Keeper на каждом узле:
Имя каждого файла нужно изменить в соответствии с узлом, на котором выполняется настройка. Например, при настройке на хосте chnode2 укажите в записи <certificateFile> значение chnode2.crt.
<openSSL>
    <server>
        <certificateFile>/etc/clickhouse-keeper/certs/chnode1.crt</certificateFile>
        <privateKeyFile>/etc/clickhouse-keeper/certs/chnode1.key</privateKeyFile>
        <verificationMode>relaxed</verificationMode>
        <caConfig>/etc/clickhouse-keeper/certs/marsnet_ca.crt</caConfig>
        <cacheSessions>true</cacheSessions>
        <disableProtocols>sslv2,sslv3</disableProtocols>
        <preferServerCiphers>true</preferServerCiphers>
    </server>
    <client>
        <loadDefaultCAFile>false</loadDefaultCAFile>
        <caConfig>/etc/clickhouse-keeper/certs/marsnet_ca.crt</caConfig>
        <cacheSessions>true</cacheSessions>
        <disableProtocols>sslv2,sslv3</disableProtocols>
        <preferServerCiphers>true</preferServerCiphers>
        <verificationMode>relaxed</verificationMode>
        <invalidCertificateHandler>
            <name>RejectCertificateHandler</name>
        </invalidCertificateHandler>
    </client>
</openSSL>
Раздел <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Принимает соединение, даже если сертификат недействителен. Используйте это только для тестирования.

Пример: отключение проверки сертификата

Отключение проверки сертификата отключает проверку подлинности TLS и делает соединения уязвимыми для атак типа «человек посередине». Используйте эту конфигурацию только в изолированных средах разработки или тестирования.
Чтобы полностью отключить проверку сертификата (например, при использовании самоподписанных сертификатов в тестовой среде), задайте для verificationMode значение none и используйте AcceptCertificateHandler. Для clickhouse-client также можно использовать флаг командной строки --accept-invalid-certificate, который автоматически применяет оба параметра. clickhouse-client (/etc/clickhouse-client/config.xml):
<openSSL>
    <client>
        <loadDefaultCAFile>false</loadDefaultCAFile>
        <cacheSessions>true</cacheSessions>
        <disableProtocols>sslv2,sslv3</disableProtocols>
        <preferServerCiphers>true</preferServerCiphers>
        <verificationMode>none</verificationMode>
        <invalidCertificateHandler>
            <name>AcceptCertificateHandler</name>
        </invalidCertificateHandler>
    </client>
</openSSL>
clickhouse-server (config.xml или файл в config.d/). В разделе <server> по-прежнему нужно указать пути к сертификату и ключу, поскольку сервер должен предъявлять клиентам собственный сертификат, даже если он не проверяет их сертификаты:
<openSSL>
    <server>
        <certificateFile>/etc/clickhouse-server/certs/server.crt</certificateFile>
        <privateKeyFile>/etc/clickhouse-server/certs/server.key</privateKeyFile>
        <verificationMode>none</verificationMode>
        <caConfig>/etc/clickhouse-server/certs/ca.crt</caConfig>
        <cacheSessions>true</cacheSessions>
        <disableProtocols>sslv2,sslv3</disableProtocols>
        <preferServerCiphers>true</preferServerCiphers>
    </server>
    <client>
        <loadDefaultCAFile>false</loadDefaultCAFile>
        <cacheSessions>true</cacheSessions>
        <disableProtocols>sslv2,sslv3</disableProtocols>
        <preferServerCiphers>true</preferServerCiphers>
        <verificationMode>none</verificationMode>
        <invalidCertificateHandler>
            <name>AcceptCertificateHandler</name>
        </invalidCertificateHandler>
    </client>
</openSSL>
Автономный ClickHouse Keeper (файл конфигурации Keeper):
<openSSL>
    <server>
        <certificateFile>/etc/clickhouse-keeper/certs/keeper.crt</certificateFile>
        <privateKeyFile>/etc/clickhouse-keeper/certs/keeper.key</privateKeyFile>
        <verificationMode>none</verificationMode>
        <caConfig>/etc/clickhouse-keeper/certs/ca.crt</caConfig>
        <cacheSessions>true</cacheSessions>
        <disableProtocols>sslv2,sslv3</disableProtocols>
        <preferServerCiphers>true</preferServerCiphers>
    </server>
    <client>
        <loadDefaultCAFile>false</loadDefaultCAFile>
        <cacheSessions>true</cacheSessions>
        <disableProtocols>sslv2,sslv3</disableProtocols>
        <preferServerCiphers>true</preferServerCiphers>
        <verificationMode>none</verificationMode>
        <invalidCertificateHandler>
            <name>AcceptCertificateHandler</name>
        </invalidCertificateHandler>
    </client>
</openSSL>

Краткое резюме

В этой статье мы рассмотрели настройку среды ClickHouse с использованием TLS. Параметры в продакшн-среде будут отличаться в зависимости от требований; например, уровни проверки сертификатов, протоколы, шифры и т. д. Но теперь вы должны лучше понимать, какие шаги нужны для настройки и внедрения защищённых соединений.
Последнее изменение 10 июня 2026 г.