Pular para o conteúdo principal
Esta página não se aplica ao ClickHouse Cloud. O recurso documentado aqui não está disponível nos serviços do ClickHouse Cloud. Consulte o guia Compatibilidade com Cloud do ClickHouse para mais informações.
Este guia apresenta configurações simples e mínas para configurar a autenticação com certificados SSL de usuário. O tutorial se baseia no guia Configurando TLS.
A autenticação de usuário com SSL é compatível ao usar as interfaces https, native, mysql e postgresql.Os nós do ClickHouse precisam ter <verificationMode>strict</verificationMode> definido para autenticação segura (embora relaxed funcione para fins de teste).Se você usar o AWS NLB com a interface MySQL, será necessário solicitar ao suporte da AWS que habilite a opção não documentada:
Gostaria de poder configurar o protocolo proxy v2 do nosso NLB como abaixo proxy_protocol_v2.client_to_server.header_placement,Value=on_first_ack.

1. Criar certificados SSL de usuário

Este exemplo usa certificados autoassinados com uma CA autoassinada. Para ambientes de produção, crie uma CSR e envie-a para sua equipe de PKI ou para o provedor de certificados a fim de obter um certificado adequado.
  1. Gere uma Certificate Signing Request (CSR) e uma chave. O formato básico é o seguinte:
    openssl req -newkey rsa:2048 -nodes -subj "/CN=<my_host>:<my_user>"  -keyout <my_cert_name>.key -out <my_cert_name>.csr
    
    Neste exemplo, usaremos isto para o domínio e o usuário que serão usados neste ambiente de exemplo:
    openssl req -newkey rsa:2048 -nodes -subj "/CN=chnode1.marsnet.local:cert_user"  -keyout chnode1_cert_user.key -out chnode1_cert_user.csr
    
O CN é arbitrário, e qualquer string pode ser usada como identificador do certificado. Ele é usado ao criar o usuário nas etapas a seguir.
  1. Gere e assine o novo certificado de usuário que será usado para autenticação. O formato básico é o seguinte:
    openssl x509 -req -in <my_cert_name>.csr -out <my_cert_name>.crt -CA <my_ca_cert>.crt -CAkey <my_ca_cert>.key -days 365
    
    Neste exemplo, usaremos isto para o domínio e o usuário que serão usados neste ambiente de exemplo:
    openssl x509 -req -in chnode1_cert_user.csr -out chnode1_cert_user.crt -CA marsnet_ca.crt -CAkey marsnet_ca.key -days 365
    

2. Criar um usuário SQL e conceder permissões

Para saber como habilitar usuários SQL e definir roles, consulte o guia Defining SQL Users and Roles.
  1. Crie um usuário SQL configurado para usar autenticação por certificado:
    CREATE USER cert_user IDENTIFIED WITH ssl_certificate CN 'chnode1.marsnet.local:cert_user';
    
  2. Conceda privilégios ao novo usuário com certificado:
    GRANT ALL ON *.* TO cert_user WITH GRANT OPTION;
    
Neste exercício, o usuário recebe privilégios administrativos totais apenas para fins de demonstração. Consulte a documentação de RBAC do ClickHouse para ver as configurações de permissões.
Recomendamos usar SQL para definir usuários e roles. No entanto, se você estiver definindo usuários e roles em arquivos de configuração, o usuário ficará assim:
<users>
    <cert_user>
        <ssl_certificates>
            <common_name>chnode1.marsnet.local:cert_user</common_name>
        </ssl_certificates>
        <networks>
            <ip>::/0</ip>
        </networks>
        <profile>default</profile>
        <access_management>1</access_management>
        {/* opções adicionais*/}
    </cert_user>
</users>

3. Teste

  1. Copie o certificado do usuário, a chave do usuário e o certificado da CA para um nó remoto.
  2. Configure o OpenSSL na configuração do cliente do ClickHouse com o certificado e os caminhos.
    <openSSL>
        <client>
            <certificateFile>my_cert_name.crt</certificateFile>
            <privateKeyFile>my_cert_name.key</privateKeyFile>
            <caConfig>my_ca_cert.crt</caConfig>
        </client>
    </openSSL>
    
  3. Execute o clickhouse-client.
    clickhouse-client --user <my_user> --query 'SHOW TABLES'
    
Observe que a senha fornecida ao clickhouse-client é ignorada quando um certificado é especificado na configuração.

4. Testando HTTP

  1. Copie o certificado do usuário, a chave do usuário e o certificado da CA para um nó remoto.
  2. Use o curl para testar um comando SQL de exemplo. O formato básico é:
    echo 'SHOW TABLES' | curl 'https://<clickhouse_node>:8443' --cert <my_cert_name>.crt --key <my_cert_name>.key --cacert <my_ca_cert>.crt -H "X-ClickHouse-SSL-Certificate-Auth: on" -H "X-ClickHouse-User: <my_user>" --data-binary @-
    
    Por exemplo:
    echo 'SHOW TABLES' | curl 'https://chnode1:8443' --cert chnode1_cert_user.crt --key chnode1_cert_user.key --cacert marsnet_ca.crt -H "X-ClickHouse-SSL-Certificate-Auth: on" -H "X-ClickHouse-User: cert_user" --data-binary @-
    
    A saída será semelhante à seguinte:
    INFORMATION_SCHEMA
    default
    information_schema
    system
    
Observe que nenhuma senha foi especificada; o certificado é usado no lugar da senha e é assim que o ClickHouse autenticará o usuário.

Resumo

Este artigo apresentou os conceitos básicos para criar e configurar um usuário para autenticação por certificado SSL. Esse método pode ser usado com clickhouse-client ou qualquer cliente que ofereça suporte à interface https e no qual seja possível definir cabeçalhos HTTP. O certificado e a chave gerados devem ser mantidos em sigilo e com acesso limitado, já que o certificado é usado para autenticar e autorizar o usuário a realizar operações no banco de dados do ClickHouse. Trate o certificado e a chave como se fossem senhas.
Última modificação em 10 de junho de 2026