Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

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

Étapes à suivre

Les étapes suivantes permettent d’activer SSL pour un seul serveur ClickHouse à l’aide de Let's Encrypt, 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 d’émission et de renouvellement des certificats, Let's Encrypt garantit que les sites web restent sécurisés sans nécessiter d’intervention manuelle.

  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 :

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.

;; ANSWER SECTION:
product-test-server.clickhouse-dev.com. 300 IN A 34.248.59.9
  1. 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.

Configuration du Security Group AWS avec le port 80 ouvert
  1. Installez certbot, par exemple avec apt

sudo apt install certbot
  1. Obtenez un certificat SSL

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

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

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

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.

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

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
  1. Redémarrez le serveur ClickHouse

sudo clickhouse restart
  1. Vérifiez que ClickHouse peut communiquer en SSL

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.

echo "127.0.0.1 product-test-server.clickhouse-dev.com" | sudo tee -a /etc/hosts

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 :

clickhouse client --secure --user default --password <password>
Navigation