ClickHouse におけるコード 210 の SSL 証明書検証エラーの解決
Code: 210. DB::NetException: SSL Exception: error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED
エラーの原因
clickhouse-client を使用して ClickHouseサーバーへの接続を試行している際に発生します。原因は、次のいずれかです。
- クライアントの設定ファイル
config.xmlに、マシンのデフォルトの CA ストア内のルート証明書が含まれていない - 自己署名証明書または内部 CA 証明書が設定されていない
解決策
/etc/clickhouse-client) 内の config.xml でCAルート証明書を設定し、既定の場所にある既定のルートCA証明書を読み込まないようにします。
以下は設定例です。
macOS 上の Python クライアント
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate
macOS では、python.org の Python ビルドは、システムのキーチェーンではなく OpenSSL のデフォルトパスを通じて証明書を検証します。新規インストール直後は、これらのパスがルート証明書バンドルを指していません。インストーラーには certifi が含まれていますが、同梱の Install Certificates.command スクリプトを実行するまで、OpenSSL のデフォルトの場所にはリンクされません。そのため、それまでは証明書自体は有効でも、クライアントは ClickHouse Cloud のサーバー証明書を検証できません。これは Python 3.11 に限らず、python.org の macOS ビルド全般 (Python 3.6 以降) に影響します。
Install Certificates.command を実行して、certifi を OpenSSL のデフォルト証明書パスにリンクしてください。パス内のバージョンは、インストール環境に合わせて調整してください。
ca_cert パラメータでバンドルを渡してください。
参考資料
clickhouse-client の設定に関するドキュメントを参照してください。