Cette page ne concerne pas ClickHouse Cloud. La procédure décrite ici est automatisée dans les services ClickHouse Cloud.
La mise en œuvre de TLS est complexe, et de nombreuses options doivent être prises en compte pour garantir un déploiement entièrement sécurisé et robuste. Il s’agit d’un tutoriel d’introduction avec des exemples de configuration TLS simple. Consultez votre équipe PKI/sécurité pour générer les certificats appropriés pour votre organisation.Consultez ce tutoriel d’introduction sur l’utilisation des certificats pour une vue d’ensemble.
1
Créer un déploiement ClickHouse
Ce guide a été rédigé avec Ubuntu 20.04, et ClickHouse a été installé sur les hôtes suivants à l’aide du paquet DEB (avec apt). Le domaine estmarsnet.local :Consultez le Quick Start pour plus de détails sur l’installation de ClickHouse.
2
Créer des certificats TLS
L’utilisation de certificats auto-signés est uniquement destinée à la démonstration et ne doit pas être utilisée en production. Les demandes de certificat doivent être créées afin d’être signées par l’organisation et validées à l’aide de la chaîne de certification de la CA qui sera configurée dans les paramètres. Toutefois, ces étapes peuvent être utilisées pour configurer et tester les paramètres, puis être remplacées par les certificats réels qui seront utilisés.
-
Générez une clé qui sera utilisée pour la nouvelle CA :
-
Générez un nouveau certificat de CA auto-signé. La commande suivante créera un nouveau certificat qui sera utilisé pour signer d’autres certificats à l’aide de la clé de la CA :
Sauvegardez la clé et le certificat de CA dans un emplacement sécurisé, en dehors du cluster. Après avoir généré les certificats des nœuds, la clé doit être supprimée des nœuds du cluster.
-
Vérifiez le contenu du nouveau certificat de CA :
-
Créez une demande de certificat (CSR) et générez une clé pour chaque nœud :
-
À l’aide des CSR et de la CA, créez de nouvelles paires certificat-clé :
-
Vérifiez le sujet et l’émetteur des certificats :
-
Vérifiez que les nouveaux certificats sont bien validés par le certificat de CA :
3
Créez et configurez un répertoire pour stocker les certificats et les clés.
Cette opération doit être effectuée sur chaque nœud. Utilisez les certificats et les clés appropriés sur chaque hôte.
-
Créez, sur chaque nœud, un dossier dans un répertoire accessible à ClickHouse. Nous recommandons le répertoire de configuration par défaut (par exemple
/etc/clickhouse-server) : -
Copiez le certificat de l’autorité de certification (CA), le certificat du nœud et la clé correspondant à chaque nœud dans le nouveau répertoire
certs. -
Modifiez le propriétaire et les permissions afin de permettre à ClickHouse de lire les certificats :
4
Configurer l’environnement avec des clusters de base à l’aide de ClickHouse Keeper
Pour cet environnement de déploiement, les paramètres ClickHouse Keeper suivants sont utilisés sur chaque nœud. Chaque serveur possède son propre<server_id>. (Par exemple, <server_id>1</server_id> pour le nœud chnode1, et ainsi de suite.)Le port recommandé pour ClickHouse Keeper est
9281. Toutefois, ce port est configurable et peut être modifié s’il est déjà utilisé par une autre application dans l’environnement.Pour une explication complète de toutes les options, consultez https://clickhouse.com/docs/operations/clickhouse-keeper/- Ajoutez le contenu suivant dans la balise
<clickhouse>duconfig.xmldu serveur ClickHouse
Pour les environnements de production, il est recommandé d’utiliser un fichier de configuration
.xml distinct dans le répertoire config.d.
Pour en savoir plus, consultez https://clickhouse.com/docs/operations/configuration-files/Lorsque ClickHouse Keeper est intégré au ClickHouse server (comme indiqué ci-dessus), Keeper utilise la configuration OpenSSL du serveur définie dans la section OpenSSL de Configurer les interfaces TLS sur les nœuds ClickHouse. Si vous exécutez ClickHouse Keeper comme processus autonome, vous devez ajouter une section
<openSSL> au fichier de configuration de Keeper avec le même certificat d’AC et les mêmes paramètres de certificat/clé du nœud. Voir Configurer OpenSSL pour un ClickHouse Keeper autonome ci-dessous pour plus de détails.-
Décommentez et mettez à jour les paramètres de Keeper sur tous les nœuds, puis définissez l’option
<secure>sur 1 : -
Mettez à jour et ajoutez les paramètres de cluster suivants sur
chnode1etchnode2.chnode3sera utilisé pour constituer le quorum de ClickHouse Keeper.
Pour cette configuration, un seul cluster d’exemple est configuré. Les clusters d’exemple de test doivent être soit supprimés, soit commentés, ou, si un cluster existant est en cours de test, le port doit être mis à jour et l’option
<secure> doit être ajoutée. Les champs <user et <password> doivent être définis si l’utilisateur default a été initialement configuré avec un mot de passe lors de l’installation ou dans le fichier users.xml.-
Définissez les valeurs de macros afin de pouvoir créer une table ReplicatedMergeTree pour les tests. Sur
chnode1:Surchnode2:
5
Configurer les interfaces TLS sur les nœuds ClickHouse
Les paramètres ci-dessous sont configurés dans leconfig.xml du serveur ClickHouse-
Définissez le nom d’affichage du déploiement (facultatif) :
-
Configurez ClickHouse pour écouter sur les ports externes :
-
Configurez le port
httpset désactivez le porthttpsur chaque nœud : -
Configurez le port TCP sécurisé natif de ClickHouse et désactivez le port non sécurisé par défaut sur chaque nœud :
-
Configurez le port
interserver httpset désactivez le port non sécurisé par défaut sur chaque nœud : - Configurez OpenSSL avec les certificats et les chemins d’accès
Chaque nom de fichier et chaque chemin d’accès doivent être mis à jour en fonction du nœud configuré.
Par exemple, remplacez la valeur de l’entrée
<certificateFile> par chnode2.crt lors de la configuration de l’hôte chnode2.-
Configurez TLS pour gRPC sur chaque nœud :
Pour plus d’informations, consultez https://clickhouse.com/docs/interfaces/grpc/
-
Configurez le client ClickHouse sur au moins un des nœuds afin d’utiliser TLS pour ses connexions, dans son propre fichier
config.xml(situé par défaut dans/etc/clickhouse-client/) : -
Désactivez les ports d’émulation par défaut pour MySQL et PostgreSQL :
6
Tests
-
Démarrez tous les nœuds, un à la fois :
-
Vérifiez que les ports sécurisés sont actifs et en écoute ; le résultat devrait ressembler à cet exemple sur chaque nœud :
-
Vérifier l’état de santé de ClickHouse Keeper
Les commandes mot de 4 lettres (4lW) habituelles ne fonctionnent pas avec
echosans TLS ; voici comment les utiliser avecopenssl.- Ouvrez une session interactive avec
openssl
- Ouvrez une session interactive avec
-
Saisissez les commandes 4LW dans la session OpenSSL
-
Démarrez le client ClickHouse avec l’option
--secureet le port TLS : -
Connectez-vous à l’interface Play via l’interface
httpsà l’adressehttps://chnode1.marsnet.local:8443/play.
le navigateur affichera un certificat non approuvé, car il y accède depuis un poste de travail et les certificats ne se trouvent pas dans les magasins d’AC racines de la machine cliente.
Lors de l’utilisation de certificats émis par une autorité de certification publique ou une AC d’entreprise, le certificat devrait être reconnu comme fiable.
-
Créez une table répliquée :
-
Ajoutez quelques lignes sur
chnode1: -
Vérifiez la réplication en consultant les lignes sur
chnode2:
Configurer OpenSSL pour un ClickHouse Keeper autonome
tcp_port_secure) ni pour la réplication Raft entre les nœuds Keeper.
Ajoutez la section <openSSL> suivante au fichier de configuration du ClickHouse Keeper autonome sur chaque nœud :
Chaque nom de fichier doit être mis à jour pour correspondre au nœud sur lequel la configuration est appliquée.
Par exemple, remplacez la valeur de l’entrée
<certificateFile> par chnode2.crt lors de la configuration de l’hôte chnode2.<server> est utilisée pour les connexions clientes entrantes sur le port Keeper sécurisé (tcp_port_secure). La section <client> est utilisée pour les connexions sortantes entre les nœuds Keeper lors de la réplication Raft.
Les chemins des certificats ci-dessus utilisent
/etc/clickhouse-keeper/certs/, qui correspond au chemin habituel pour les installations autonomes de Keeper. Si vous avez installé Keeper dans un autre chemin, adaptez en conséquence. Les certificats eux-mêmes sont les mêmes que ceux créés à l’étape 2.Modes de vérification d’OpenSSL et gestionnaires de certificats
<openSSL> prend en charge plusieurs options pour <verificationMode> et <invalidCertificateHandler>, qui déterminent la manière dont ClickHouse valide les certificats TLS. Ces paramètres s’appliquent à clickhouse-server, clickhouse-client et à ClickHouse Keeper autonome.
Modes de vérification
<verificationMode> dans la section <server> ou <client> de <openSSL> :
Gestionnaires de certificats invalides
<invalidCertificateHandler> dans la section <server> ou <client> de <openSSL>. Ce gestionnaire détermine le comportement à adopter lorsque la vérification du certificat échoue. Côté serveur, il contrôle la réponse aux certificats client invalides. Côté client, il contrôle la réponse aux certificats serveur invalides.
Exemple : désactiver la vérification des certificats
verificationMode sur none et utilisez AcceptCertificateHandler.
Pour clickhouse-client, vous pouvez également utiliser l’option de CLI --accept-invalid-certificate, qui applique automatiquement les deux paramètres.
clickhouse-client (/etc/clickhouse-client/config.xml) :
config.xml ou un fichier dans config.d/). La section <server> requiert toujours les chemins du certificat et de la clé, car le serveur doit présenter son propre certificat aux clients, même lorsqu’il ne vérifie pas les leurs :