> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-fbfa8bee.mintlify.site/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.

<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](/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](/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>

<div id="1-create-ssl-user-certificates">
  ## 1. Criar certificados SSL de usuário
</div>

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

<div id="2-create-a-sql-user-and-grant-permissions">
  ## 2. Criar um usuário SQL e conceder permissões
</div>

<Note>
  Para saber como habilitar usuários SQL e definir roles, consulte o guia [Defining SQL Users and Roles](/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 totais apenas para fins de demonstração. Consulte a [documentação de RBAC](/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 roles. No entanto, se você estiver definindo usuários e roles 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>

<div id="3-testing">
  ## 3. Teste
</div>

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](/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 o `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>

<div id="4-testing-http">
  ## 4. Testando HTTP
</div>

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 é:
   ```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>

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