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

Настройка TLS

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

Эта страница не относится к ClickHouse Cloud. Описанная здесь процедура выполняется автоматически в сервисах ClickHouse Cloud.

В этом руководстве приводятся простые и минимальные настройки для конфигурирования ClickHouse на использование сертификатов OpenSSL при проверке соединений. В рамках этого примера создаются самоподписанные сертификат и ключ центра сертификации (CA), а также сертификаты узлов для установления соединений с соответствующими настройками.

Примечание

Реализация TLS — сложная задача, и существует множество вариантов, которые необходимо учитывать для обеспечения полностью безопасного и надежного развертывания. Это базовое руководство с простыми примерами конфигурации TLS. Обратитесь к вашей команде по PKI/безопасности, чтобы сгенерировать корректные сертификаты для вашей организации.

Ознакомьтесь с этим базовым руководством по использованию сертификатов для вводного обзора.

Создайте развертывание ClickHouse

Это руководство было написано с использованием Ubuntu 20.04 и ClickHouse, установленного на следующих хостах из DEB-пакета (с помощью apt). Домен — marsnet.local:

HostIP Address
chnode1192.168.1.221
chnode2192.168.1.222
chnode3192.168.1.223
Примечание

См. руководство Quick Start, чтобы получить более подробную информацию об установке ClickHouse.

Создайте TLS-сертификаты

Примечание

Самоподписанные сертификаты используются только в демонстрационных целях и не должны использоваться в production-среде. Запросы на сертификаты должны создаваться для подписи организацией и проверяться с использованием цепочки 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 в безопасном месте вне кластера. После генерации сертификатов узлов ключ следует удалить с узлов кластера.

  3. Проверьте содержимое нового сертификата CA:

    openssl x509 -in marsnet_ca.crt -text
    
  4. Создайте запрос на сертификат (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
    
  5. Используя 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
    
  6. Проверьте сертификаты на subject и issuer:

    openssl x509 -in chnode1.crt -text -noout
    
  7. Убедитесь, что новые сертификаты успешно проверяются по сертификату CA:

    openssl verify -CAfile marsnet_ca.crt chnode1.crt
    chnode1.crt: OK
    

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

Примечание

Это необходимо сделать на каждом узле. На каждом хосте используйте соответствующие сертификаты и ключи.

  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
    

Настройте среду с базовыми кластерами с использованием 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

    Примечание

    Для production-сред рекомендуется использовать отдельный файл конфигурации .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 (как показано выше), Keeper использует конфигурацию OpenSSL сервера, определённую в разделе OpenSSL статьи Configure TLS interfaces on ClickHouse nodes. Если вы запускаете ClickHouse Keeper как автономный процесс, необходимо добавить раздел <openSSL> в файл конфигурации Keeper с теми же настройками сертификата CA и сертификата/ключа узла. Подробности см. в разделе Configure OpenSSL for standalone ClickHouse Keeper ниже.

  2. Раскомментируйте и обновите настройки 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>
    
  3. Обновите и добавьте следующие настройки кластера на 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>
    
  4. Задайте значения macros, чтобы можно было создать таблицу ReplicatedMergeTree для тестирования. На chnode1:

    <macros>
        <shard>1</shard>
        <replica>replica_1</replica>
    </macros>
    

    На chnode2:

    <macros>
        <shard>1</shard>
        <replica>replica_2</replica>
    </macros>
    

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

    <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 с сертификатами и путями

    Примечание

    Имя каждого файла и путь должны быть обновлены в соответствии с узлом, на котором выполняется настройка. Например, обновите запись <certificateFile>, указав chnode2.crt при настройке на хосте chnode2.

    <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_configuration_parameters-openssl

  7. Настройте 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/

  8. Настройте клиент 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>
    
  9. Отключите стандартные порты эмуляции MySQL и PostgreSQL:

    <!--mysql_port>9004</mysql_port-->
    <!--postgresql_port>9005</postgresql_port-->
    

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

  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 PortDescription
    8443интерфейс https
    9010межсерверный порт https
    9281защищённый порт ClickHouse Keeper
    9440защищённый протокол Native TCP
    9444порт Raft ClickHouse Keeper
  3. Проверьте состояние ClickHouse Keeper The typical 4 letter word (4lW) commands won't work using echo without TLS, here is how to use the commands with 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
    # highlight-next-line
    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
    # highlight-next-line
    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
    # highlight-next-line
    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 UI через интерфейс https по адресу https://chnode1.marsnet.local:8443/play.

    Настройка TLS
    Примечание

    браузер покажет недоверенный сертификат, поскольку доступ к нему выполняется с рабочей станции, а сертификаты отсутствуют в хранилищах корневых CA на клиентской машине. При использовании сертификатов, выпущенных публичным центром сертификации или корпоративным CA, он должен отображаться как доверенный.

  3. Создайте реплицируемую таблицу:

    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 │
    └───────────────────────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘
    
  4. Добавьте пару строк на chnode1:

    INSERT INTO repl_table
    (id, column1, column2)
    VALUES
    (1,'2022-04-01','abc'),
    (2,'2022-04-02','def');
    
  5. Проверьте репликацию, просмотрев строки на chnode2:

    SELECT * FROM repl_table
    
    ┌─id─┬────column1─┬─column2─┐
    │  1 │ 2022-04-01 │ abc     │
    │  2 │ 2022-04-02 │ def     │
    └────┴────────────┴─────────┘
    

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

При запуске ClickHouse Keeper как автономного процесса (а не встроенного в сервер ClickHouse) сертификаты и параметры 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Без проверки сертификата. Соединение шифруется, но подлинность другой стороны не проверяется. Используйте этот режим только для тестирования.
relaxedПроверяет сертификат другой стороны, если он предоставлен, но не завершает работу с ошибкой, если сертификат отсутствует.
onceНа стороне сервера проверяет сертификат клиента только при начальном рукопожатии и пропускает повторное согласование. На стороне клиента работает так же, как relaxed.
strictТребует сертификат другой стороны и полностью проверяет его. Соединение завершается ошибкой, если сертификат отсутствует, срок его действия истёк или он не подписан доверенным УЦ. Рекомендуется для продакшена.

Обработчики недействительных сертификатов

Установите <invalidCertificateHandler> в разделе <server> или <client> внутри <openSSL>. Этот handler определяет, что происходит, если проверка сертификата завершается ошибкой. На стороне сервера он определяет, как обрабатывать недействительные клиентские сертификаты. На стороне клиента он определяет, как обрабатывать недействительные сертификаты сервера.

HandlerОписание
RejectCertificateHandlerОтклоняет соединение, если сертификат недействителен. Это значение по умолчанию и рекомендуемая настройка.
AcceptCertificateHandlerПринимает соединение, даже если сертификат недействителен. Используйте только для тестирования.

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

Примечание

Отключение проверки сертификатов отменяет проверку подлинности TLS и делает соединения уязвимыми для атак «человек посередине». Используйте эту конфигурацию только в изолированных средах разработки или тестирования.

Чтобы полностью отключить проверку сертификатов (например, при использовании самоподписанных сертификатов в тестовой среде), установите для verificationMode значение none и используйте AcceptCertificateHandler.

Для clickhouse-client вы также можете использовать флаг CLI --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. Параметры будут отличаться в зависимости от требований в продуктивных средах, например уровни проверки сертификатов, протоколы, шифры и т. д. Теперь у вас должно быть хорошее понимание последовательности шагов по настройке и использованию защищённых соединений.