> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Configurando o certificado SSL de usuário para autenticação

> Este guia apresenta configurações simples e mínimas para autenticação com certificados SSL de usuário.

export const CloudNotSupportedBadge = () => {
  return <div className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            Sem suporte no ClickHouse Cloud
        </div>;
};

<CloudNotSupportedBadge />

<Note>
  Esta página não se aplica ao [ClickHouse Cloud](https://clickhouse.com/cloud). O recurso documentado aqui não está disponível nos serviços do ClickHouse Cloud.
  Consulte o guia [Compatibilidade com Cloud](/docs/pt-BR/products/cloud/guides/cloud-compatibility) do ClickHouse para mais informações.
</Note>

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](/docs/pt-BR/concepts/features/security/tls/configuring-tls).

<Note>
  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`.
</Note>

<Steps>
  <Step title="Criar certificados SSL de usuário" id="1-create-ssl-user-certificates">
    <Note>
      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.
    </Note>

    1. Gere uma Certificate Signing Request (CSR) e uma chave. O formato básico é o seguinte:
       ```bash theme={null}
       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:
       ```bash theme={null}
       openssl req -newkey rsa:2048 -nodes -subj "/CN=chnode1.marsnet.local:cert_user"  -keyout chnode1_cert_user.key -out chnode1_cert_user.csr
       ```

    <Note>
      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.
    </Note>

    2. Gere e assine o novo certificado de usuário que será usado para autenticação. O formato básico é o seguinte:
       ```bash theme={null}
       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:
       ```bash theme={null}
       openssl x509 -req -in chnode1_cert_user.csr -out chnode1_cert_user.crt -CA marsnet_ca.crt -CAkey marsnet_ca.key -days 365
       ```
  </Step>

  <Step title="Criar um usuário SQL e conceder permissões" id="2-create-a-sql-user-and-grant-permissions">
    <Note>
      Para obter detalhes sobre como habilitar usuários SQL e definir funções, consulte o guia [Definindo usuários e funções SQL](/docs/pt-BR/concepts/features/security/access-rights).
    </Note>

    1. Crie um usuário SQL configurado para usar autenticação por certificado:
       ```sql theme={null}
       CREATE USER cert_user IDENTIFIED WITH ssl_certificate CN 'chnode1.marsnet.local:cert_user';
       ```

    2. Conceda privilégios ao novo usuário com certificado:
       ```sql theme={null}
       GRANT ALL ON *.* TO cert_user WITH GRANT OPTION;
       ```

    <Note>
      Neste exercício, o usuário recebe privilégios administrativos completos apenas para fins de demonstração. Consulte a [documentação de RBAC](/docs/pt-BR/concepts/features/security/access-rights) do ClickHouse para ver as configurações de permissões.
    </Note>

    <Note>
      Recomendamos usar SQL para definir usuários e funções. No entanto, se você estiver definindo usuários e funções em arquivos de configuração, o usuário ficará assim:

      ```xml theme={null}
      <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>
      ```
    </Note>
  </Step>

  <Step title="Verificação" id="3-testing">
    1. Copie o certificado de 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](/docs/pt-BR/concepts/features/interfaces/client#configuration_files) do ClickHouse com o certificado e os caminhos.

       ```xml theme={null}
       <openSSL>
           <client>
               <certificateFile>my_cert_name.crt</certificateFile>
               <privateKeyFile>my_cert_name.key</privateKeyFile>
               <caConfig>my_ca_cert.crt</caConfig>
           </client>
       </openSSL>
       ```

    3. Execute `clickhouse-client`.
       ```bash theme={null}
       clickhouse-client --user <my_user> --query 'SHOW TABLES'
       ```

    <Note>
      Observe que a senha fornecida ao clickhouse-client é ignorada quando um certificado é especificado na configuração.
    </Note>
  </Step>

  <Step title="Teste de HTTP" id="4-testing-http">
    1. Copie o certificado de usuário, a chave do usuário e o certificado da CA para um nó remoto.

    2. Use `curl` para testar um comando SQL de exemplo. O formato básico é o seguinte:
       ```bash theme={null}
       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:
       ```bash theme={null}
       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:
       ```response theme={null}
       INFORMATION_SCHEMA
       default
       information_schema
       system
       ```

    <Note>
      Observe que nenhuma senha foi especificada; o certificado é usado no lugar da senha e é assim que o ClickHouse autenticará o usuário.
    </Note>
  </Step>
</Steps>

<div id="summary">
  ## Resumo
</div>

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.
