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

# Comment activer SSL avec Let's Encrypt sur un seul serveur ClickHouse

> Découvrez comment configurer SSL pour un seul serveur ClickHouse avec Let's Encrypt, notamment la délivrance des certificats, la configuration et la validation.

export const Image = ({img, alt, size}) => {
  return <Frame>
      <img src={img} alt={alt} />
    </Frame>;
};

{frontMatter.description}

<div id="steps-to-follow">
  ## Étapes à suivre
</div>

Les étapes suivantes permettent d’activer SSL pour un seul serveur ClickHouse à l’aide de [Let's Encrypt](https://letsencrypt.org/), une autorité de certification (CA) gratuite, automatisée et ouverte, conçue pour permettre à chacun de sécuriser facilement ses sites web avec HTTPS. En automatisant le processus de délivrance et de renouvellement des certificats, Let's Encrypt garantit que les sites web restent sécurisés sans nécessiter d’intervention manuelle.

<Note>
  Nous supposons que ClickHouse a été installé dans les emplacements standard des paquets dans le guide suivant. Nous utilisons le domaine `product-test-server.clickhouse-dev.com` dans tous les exemples. Remplacez-le par votre propre domaine.
</Note>

1. Vérifiez que vous disposez d’un enregistrement DNS `A` ou `AAAA` pointant vers votre serveur. Vous pouvez le vérifier à l’aide de l’outil Linux `dig`. Par exemple, voici la réponse pour `product-test-server.clickhouse-dev.com` lors de l’utilisation du serveur DNS Cloudflare `1.1.1.1` :

<br />

```bash theme={null}
dig @1.1.1.1 product-test-server.clickhouse-dev.com

; <<>> DiG 9.18.28-0ubuntu0.22.04.1-Ubuntu <<>> @1.1.1.1 product-test-server.clickhouse-dev.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22315
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;product-test-server.clickhouse-dev.com.    IN A

;; ANSWER SECTION:
product-test-server.clickhouse-dev.com. 300 IN A 34.248.59.9

;; Query time: 52 msec
;; SERVER: 1.1.1.1#53(1.1.1.1) (UDP)
;; WHEN: Thu Dec 12 09:37:33 UTC 2024
;; MSG SIZE  rcvd: 83
```

Notez la section ci-dessous, qui confirme la présence d’un enregistrement A.

```bash theme={null}
;; ANSWER SECTION:
product-test-server.clickhouse-dev.com. 300 IN A 34.248.59.9
```

2. Ouvrez le port 80 sur votre serveur. Ce port sera utilisé pour le renouvellement automatique du certificat via le protocole ACME avec certbot. Sur AWS, cela peut se faire en [modifiant le Security Group associé à l’instance](https://repost.aws/knowledge-center/connect-http-https-ec2).

<br />

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/ql4_TXk6qnx8EBQC/images/knowledgebase/lets-encrypt-ssl/port_80_security_group.png?fit=max&auto=format&n=ql4_TXk6qnx8EBQC&q=85&s=1c4cf268f1321edf7e12d22dd29ad27d" size="md" alt="Configuration du Security Group AWS avec le port 80 ouvert" border width="3242" height="1242" data-path="images/knowledgebase/lets-encrypt-ssl/port_80_security_group.png" />

3. Installez [`certbot`](https://certbot.eff.org/instructions), par exemple avec `apt`

<br />

```bash theme={null}
sudo apt install certbot
```

4. Obtenez un certificat SSL

<br />

```bash theme={null}
sudo certbot certonly
Saving debug log to /var/log/letsencrypt/letsencrypt.log

How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Spin up a temporary webserver (standalone)
2: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
Please enter the domain name(s) you would like on your certificate (comma and/or
space separated) (Enter 'c' to cancel): product-test-server.clickhouse-dev.com
Requesting a certificate for product-test-server.clickhouse-dev.com

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/product-test-server.clickhouse-dev.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/product-test-server.clickhouse-dev.com/privkey.pem
This certificate expires on 2025-03-12.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
```

<Note>
  Aucun serveur web n'est en cours d'exécution sur ce serveur. Utilisez donc l'option (1), qui permet à Certbot d'utiliser temporairement son propre serveur web.
</Note>

Saisissez le nom de domaine complet de votre serveur, par ex. `product-test-server.clickhouse-dev.com`, lorsqu'il vous sera demandé.

<Note>
  Let's Encrypt a pour politique de ne pas délivrer de certificats pour certains types de domaines, notamment les domaines générés par des fournisseurs de Cloud public (par ex. les domaines AWS \*.compute.amazonaws.com). Ces domaines sont considérés comme une infrastructure partagée et sont bloqués pour des raisons de sécurité et de prévention des abus.
</Note>

5. Copiez les certificats dans le répertoire ClickHouse.

<br />

```bash theme={null}
echo '* * * * * root cp -u /etc/letsencrypt/live/product-test-server.clickhouse-dev.com/*.pem /etc/clickhouse-server/ && chown clickhouse:clickhouse /etc/clickhouse-server/*.pem && chmod 400 /etc/clickhouse-server/*.pem' | sudo tee /etc/cron.d/copy-certificates
```

Cette commande configure une tâche cron pour automatiser la gestion des certificats SSL Let's Encrypt d’un serveur ClickHouse. Elle s’exécute chaque minute en tant qu’utilisateur root et copie les fichiers .pem du répertoire Let's Encrypt vers le répertoire de configuration du serveur ClickHouse, mais uniquement si ces fichiers ont été mis à jour. Après la copie, le script attribue les fichiers à l’utilisateur et au groupe clickhouse, afin de garantir au serveur les droits d’accès nécessaires. Il applique également des permissions sécurisées en lecture seule (`chmod 400`) aux fichiers copiés afin de renforcer la sécurité des fichiers. Cela garantit que le serveur ClickHouse a toujours accès aux certificats SSL les plus récents, sans intervention manuelle, tout en maintenant un bon niveau de sécurité et en réduisant au minimum la surcharge opérationnelle.

6. Configurez l’utilisation de ces certificats dans clickhouse-server.

<br />

```bash theme={null}
echo "https_port: 8443
tcp_port_secure: 9440
openSSL:
 server:
 certificateFile: '/etc/clickhouse-server/fullchain.pem'
 privateKeyFile: '/etc/clickhouse-server/privkey.pem'
 disableProtocols: 'sslv2,sslv3,tlsv1,tlsv1_1'" | sudo tee /etc/clickhouse-server/config.d/ssl.yaml
```

7. Redémarrez le serveur ClickHouse

<br />

```bash theme={null}
sudo clickhouse restart
```

8. Vérifiez que ClickHouse peut communiquer en SSL

<br />

```bash theme={null}
curl https://product-test-server.clickhouse-dev.com:8443/

Ok.
```

Pour que cette dernière étape fonctionne, vous devrez peut-être vous assurer que le port 8443 est accessible, par exemple en l’autorisant dans votre Security Group AWS. Sinon, si vous souhaitez uniquement accéder à ClickHouse depuis le serveur, modifiez votre fichier hosts, c.-à-d.

```bash theme={null}
echo "127.0.0.1 product-test-server.clickhouse-dev.com" | sudo tee -a /etc/hosts
```

<Warning>
  Si vous ouvrez des connexions depuis des adresses génériques, assurez-vous qu’au moins une des mesures suivantes est en place :

  * le serveur est protégé par un pare-feu et n’est pas accessible depuis des réseaux non fiables ;
  * tous les utilisateurs sont limités à un sous-ensemble d’adresses réseau (voir users.xml) ;
  * tous les utilisateurs disposent de mots de passe robustes, seules des interfaces sécurisées (TLS) sont accessibles, ou les connexions s’effectuent uniquement via des interfaces TLS.
  * les utilisateurs sans mot de passe disposent d’un accès en lecture seule.

  Voir aussi : [https://www.shodan.io/search?query=clickhouse](https://www.shodan.io/search?query=clickhouse)

  Le blog [Building single page applications with ClickHouse](https://clickhouse.com/blog/building-single-page-applications-with-clickhouse-and-http) peut servir de référence pour sécuriser les instances publiques.
</Warning>

Ce qui suit devrait également fonctionner si vous vous connectez depuis la machine locale sur laquelle ClickHouse s’exécute. Pour vous connecter via `product-test-server.clickhouse-dev.com`, ouvrez le port 9440 dans votre :

```bash theme={null}
clickhouse client --secure --user default --password <password>
```
