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

# Configuration de l'authentification à l'aide d'un certificat utilisateur SSL

> Ce guide présente les paramètres minimaux nécessaires pour configurer l'authentification à l'aide de certificats utilisateurs SSL.

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>
            Non pris en charge par ClickHouse Cloud
        </div>;
};

<CloudNotSupportedBadge />

<Note>
  Cette page ne s'applique pas à [ClickHouse Cloud](https://clickhouse.com/cloud). La fonctionnalité décrite ici n'est pas disponible dans les services ClickHouse Cloud.
  Consultez le guide ClickHouse [Compatibilité Cloud](/docs/fr/products/cloud/guides/cloud-compatibility) pour plus d'informations.
</Note>

Ce guide présente des paramètres simples et minimaux pour configurer l’authentification à l’aide de certificats utilisateur SSL. Ce tutoriel s’appuie sur le [guide de configuration de TLS](/docs/fr/concepts/features/security/tls/configuring-tls).

<Note>
  L’authentification des utilisateurs par SSL est prise en charge avec les interfaces `https`, `native`, `mysql` et `postgresql`.

  Les nœuds ClickHouse doivent avoir `<verificationMode>strict</verificationMode>` défini pour une authentification sécurisée (même si `relaxed` fonctionne à des fins de test).

  Si vous utilisez AWS NLB avec l’interface MySQL, vous devez demander au support AWS d’activer l’option non documentée suivante :

  > Je souhaite pouvoir configurer le proxy protocol v2 de notre proxy NLB comme suit : `proxy_protocol_v2.client_to_server.header_placement,Value=on_first_ack`.
</Note>

<Steps>
  <Step title="Créer des certificats utilisateur SSL" id="1-create-ssl-user-certificates">
    <Note>
      Cet exemple utilise des certificats auto-signés avec une CA auto-signée. Pour les environnements de production, créez une CSR et soumettez-la à votre équipe PKI ou à votre fournisseur de certificats afin d'obtenir un certificat approprié.
    </Note>

    1. Générez une Certificate Signing Request (CSR) et une clé. Le format de base est le suivant :
       ```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
       ```
       Dans cet exemple, nous l'utiliserons pour le domaine et l'utilisateur qui seront utilisés dans cet environnement d'exemple :
       ```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>
      Le CN est arbitraire et n'importe quelle chaîne peut être utilisée comme identifiant pour le certificat. Il est utilisé lors de la création de l'utilisateur dans les étapes suivantes.
    </Note>

    2. Générez et signez le nouveau certificat utilisateur qui sera utilisé pour l'authentification. Le format de base est le suivant :
       ```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
       ```
       Dans cet exemple, nous l'utiliserons pour le domaine et l'utilisateur qui seront utilisés dans cet environnement d'exemple :
       ```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="Créer un utilisateur SQL et accorder des autorisations" id="2-create-a-sql-user-and-grant-permissions">
    <Note>
      Pour plus de détails sur la manière d’activer les utilisateurs SQL et de définir des rôles, consultez le guide d’utilisation [Defining SQL Users and Roles](/docs/fr/concepts/features/security/access-rights).
    </Note>

    1. Créez un utilisateur SQL configuré pour utiliser l’authentification par certificat :
       ```sql theme={null}
       CREATE USER cert_user IDENTIFIED WITH ssl_certificate CN 'chnode1.marsnet.local:cert_user';
       ```

    2. Accordez des privilèges au nouvel utilisateur authentifié par certificat :
       ```sql theme={null}
       GRANT ALL ON *.* TO cert_user WITH GRANT OPTION;
       ```

    <Note>
      Dans cet exercice, l’utilisateur reçoit tous les privilèges d’administration à des fins de démonstration. Consultez la [documentation RBAC](/docs/fr/concepts/features/security/access-rights) de ClickHouse pour les paramètres d’autorisations.
    </Note>

    <Note>
      Nous recommandons d’utiliser SQL pour définir les utilisateurs et les rôles. Cependant, si vous définissez actuellement les utilisateurs et les rôles dans des fichiers de configuration, l’utilisateur ressemblera à ceci :

      ```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>
              {/* options supplémentaires*/}
          </cert_user>
      </users>
      ```
    </Note>
  </Step>

  <Step title="Test" id="3-testing">
    1. Copiez le certificat utilisateur, la clé utilisateur et le certificat de la CA sur un nœud distant.

    2. Configurez OpenSSL dans la [configuration du client](/docs/fr/concepts/features/interfaces/client#configuration_files) de ClickHouse avec le certificat et les chemins correspondants.

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

    <Note>
      Notez que le mot de passe transmis à clickhouse-client est ignoré lorsqu’un certificat est spécifié dans la config.
    </Note>
  </Step>

  <Step title="Test HTTP" id="4-testing-http">
    1. Copiez le certificat utilisateur, la clé utilisateur et le certificat de la CA vers un nœud distant.

    2. Utilisez `curl` pour tester une commande SQL d'exemple. Le format de base est le suivant :
       ```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 @-
       ```
       Par exemple :
       ```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 sortie sera similaire à ce qui suit :
       ```response theme={null}
       INFORMATION_SCHEMA
       default
       information_schema
       system
       ```

    <Note>
      Notez qu'aucun mot de passe n'est spécifié : le certificat est utilisé à la place d'un mot de passe, et c'est ainsi que ClickHouse authentifie l'utilisateur.
    </Note>
  </Step>
</Steps>

<div id="summary">
  ## Résumé
</div>

Cet article a présenté les bases de la création et de la configuration d’un utilisateur pour l’authentification par certificat SSL. Cette méthode peut être utilisée avec `clickhouse-client` ou tout client prenant en charge l’interface `https` et permettant de définir des en-têtes HTTP. Le certificat et la clé générés doivent être conservés de façon sécurisée et avec un accès restreint, car le certificat sert à authentifier et à autoriser l’utilisateur pour des opérations sur la base de données ClickHouse. Traitez le certificat et la clé comme des mots de passe.
