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

# Configuración de certificados SSL de usuario para la autenticación

> Esta guía ofrece una configuración sencilla y mínima para habilitar la autenticación mediante certificados SSL de usuario.

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>
            No es compatible con ClickHouse Cloud
        </div>;
};

<CloudNotSupportedBadge />

<Note>
  Esta página no se aplica a [ClickHouse Cloud](https://clickhouse.com/cloud). La funcionalidad documentada aquí no está disponible en los servicios de ClickHouse Cloud.
  Consulta la guía de ClickHouse sobre [compatibilidad con Cloud](/docs/es/products/cloud/guides/cloud-compatibility) para obtener más información.
</Note>

Esta guía proporciona una configuración sencilla y mínima para configurar la autenticación con certificados SSL de usuario. Este tutorial se basa en la [guía de Configuring TLS](/docs/es/concepts/features/security/tls/configuring-tls).

<Note>
  La autenticación de usuarios mediante SSL es compatible cuando se utilizan las interfaces `https`, `native`, `mysql` y `postgresql`.

  Los nodos de ClickHouse deben tener configurado `<verificationMode>strict</verificationMode>` para una autenticación segura (aunque `relaxed` funcionará con fines de prueba).

  Si utiliza AWS NLB con la interfaz MySQL, debe solicitar al soporte de AWS que habilite la siguiente opción no documentada:

  > Me gustaría poder configurar el protocolo proxy v2 de nuestro NLB como se indica a continuación: `proxy_protocol_v2.client_to_server.header_placement,Value=on_first_ack`.
</Note>

<Steps>
  <Step title="Crear certificados de usuario SSL" id="1-create-ssl-user-certificates">
    <Note>
      Este ejemplo usa certificados autofirmados con una CA autofirmada. Para entornos de producción, cree una CSR y envíela a su equipo de PKI o a su proveedor de certificados para obtener un certificado válido.
    </Note>

    1. Genere una Certificate Signing Request (CSR) y una clave. El formato básico es el siguiente:
       ```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
       ```
       En este ejemplo, usaremos estos valores para el dominio y el usuario que se utilizarán en este entorno de ejemplo:
       ```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>
      El CN es arbitrario y puede usarse cualquier cadena como identificador del certificado. Se utiliza al crear el usuario en los pasos siguientes.
    </Note>

    2. Genere y firme el nuevo certificado de usuario que se utilizará para la autenticación. El formato básico es el siguiente:
       ```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
       ```
       En este ejemplo, usaremos estos valores para el dominio y el usuario que se utilizarán en este entorno de ejemplo:
       ```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="Crear un usuario SQL y conceder permisos" id="2-create-a-sql-user-and-grant-permissions">
    <Note>
      Para obtener más información sobre cómo habilitar usuarios SQL y asignar roles, consulte la guía del usuario [Definición de usuarios y roles SQL](/docs/es/concepts/features/security/access-rights).
    </Note>

    1. Cree un usuario SQL configurado para usar la autenticación por certificado:
       ```sql theme={null}
       CREATE USER cert_user IDENTIFIED WITH ssl_certificate CN 'chnode1.marsnet.local:cert_user';
       ```

    2. Otorgue privilegios al nuevo usuario con certificado:
       ```sql theme={null}
       GRANT ALL ON *.* TO cert_user WITH GRANT OPTION;
       ```

    <Note>
      En este ejercicio, al usuario se le otorgan privilegios administrativos completos con fines de demostración. Consulte la [documentación de RBAC](/docs/es/concepts/features/security/access-rights) de ClickHouse para ver la configuración de permisos.
    </Note>

    <Note>
      Recomendamos usar SQL para definir usuarios y roles. Sin embargo, si actualmente está definiendo usuarios y roles en archivos de configuración, el usuario se verá así:

      ```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>
              {/* opciones adicionales*/}
          </cert_user>
      </users>
      ```
    </Note>
  </Step>

  <Step title="Pruebas" id="3-testing">
    1. Copie el certificado de usuario, la clave de usuario y el certificado de la CA a un nodo remoto.

    2. Configure OpenSSL en la [configuración de client](/docs/es/concepts/features/interfaces/client#configuration_files) de ClickHouse con el certificado y las rutas.

       ```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. Ejecute `clickhouse-client`.
       ```bash theme={null}
       clickhouse-client --user <my_user> --query 'SHOW TABLES'
       ```

    <Note>
      Tenga en cuenta que la contraseña proporcionada a clickhouse-client se ignora cuando se especifica un certificado en la configuración.
    </Note>
  </Step>

  <Step title="Pruebas HTTP" id="4-testing-http">
    1. Copie el certificado de usuario, la clave del usuario y el certificado de la CA en un nodo remoto.

    2. Use `curl` para probar un comando SQL de ejemplo. El formato básico es el siguiente:
       ```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 ejemplo:
       ```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 @-
       ```
       La salida será similar a la siguiente:
       ```response theme={null}
       INFORMATION_SCHEMA
       default
       information_schema
       system
       ```

    <Note>
      Tenga en cuenta que no se especificó ninguna contraseña; el certificado se utiliza en lugar de una contraseña y así es como ClickHouse autenticará al usuario.
    </Note>
  </Step>
</Steps>

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

Este artículo presentó los conceptos básicos para crear y configurar un usuario para la autenticación mediante certificado SSL. Este método puede utilizarse con `clickhouse-client` o con cualquier cliente compatible con la interfaz `https` y en el que se puedan establecer encabezados HTTP. El certificado y la clave generados deben mantenerse privados y con acceso restringido, ya que el certificado se utiliza para autenticar y autorizar al usuario a realizar operaciones en la base de datos de ClickHouse. Trate el certificado y la clave como si fueran contraseñas.
