Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Устранение ошибки проверки SSL-сертификата в ClickHouse

Устранение ошибки проверки SSL-сертификата с кодом 210 в ClickHouse

Обычно эта ошибка выглядит так:

Code: 210. DB::NetException: SSL Exception: error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED

Причина ошибки

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

  • в файле конфигурации клиента config.xml отсутствует корневой CA‑сертификат из системного хранилища доверенных CA по умолчанию, или
  • самоподписанный или внутренний CA‑сертификат не настроен

Решение

Если используется внутренняя или самоподписанная CA, настройте корневой CA‑сертификат в config.xml в каталоге клиента (например, /etc/clickhouse-client) и отключите загрузку корневых CA‑сертификатов по умолчанию из стандартного расположения.

Ниже приведён пример конфигурации:

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

Клиенты Python на macOS

Клиенты Python сообщают об этой ошибке по-разному, обычно так:

ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate

На macOS сборка Python с python.org проверяет сертификаты через стандартные пути OpenSSL, а не через системную связку ключей. При чистой установке эти пути не указывают ни на один набор корневых сертификатов: установщик включает certifi, но не связывает его со стандартным расположением OpenSSL, пока вы не запустите входящий в комплект скрипт Install Certificates.command. До этого клиент не может проверить сертификат сервера ClickHouse Cloud, хотя сам сертификат действителен. Это касается сборок python.org для macOS в целом (Python 3.6 и новее), а не только Python 3.11.

Запустите Install Certificates.command, чтобы связать certifi со стандартным путем к сертификатам OpenSSL. Скорректируйте версию в пути в соответствии с вашей установкой:

open "/Applications/Python 3.11/Install Certificates.command"

В качестве альтернативы укажите клиенту пакет сертификатов certifi напрямую. ClickHouse Connect сам по себе не использует certifi в качестве резервного варианта, поэтому передайте пакет через параметр ca_cert:

import certifi
import clickhouse_connect

client = clickhouse_connect.get_client(
    host='HOSTNAME.clickhouse.cloud',
    port=8443,
    username='default',
    password='YOUR_SECRET_PASSWORD',
    ca_cert=certifi.where(),
)

Дополнительные ресурсы

См. документацию по конфигурации клиента ClickHouse.

Navigation