Avec HAProxy, un frontend qui écoute en HTTPS présente un certificat choisi par le nom demandé (SNI), déchiffre la requête et l'envoie en clair à un backend ; depuis la version 3.2, un client ACME intégré peut obtenir et renouveler ce certificat sans outil externe, mais il reste expérimental en 3.4. Cette leçon est le module facultatif HAProxy de la formation : elle traite la publication en HTTPS, et laisse la répartition de charge à la leçon Linux consacrée à HAProxy.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »La leçon suit le chemin d'une connexion chiffrée, puis celui du certificat qui la rend possible.
- Terminer le TLS dans un frontend et rediriger HTTP vers HTTPS.
- Comprendre le choix du certificat par SNI.
- Décrire les sections
acmeetcrt-store. - Mesurer ce que signifie « expérimental » pour le client ACME.
- Vérifier un renouvellement et un rechargement sans coupure.
Prérequis
Section intitulée « Prérequis »Cette leçon suppose que vous connaissez les bases de HAProxy et ce qu'est un certificat ACME.
- Les concepts
frontend,backendet la validation d'une configuration avechaproxy -c: HAProxy. - Le trajet d'une requête, le SNI et la terminaison TLS : Publier un service web.
- Le protocole ACME et ses défis : Certificats automatiques.
Comment HAProxy termine-t-il le TLS ?
Section intitulée « Comment HAProxy termine-t-il le TLS ? »Le frontend déclare un bind avec ssl, puis une règle redirige le port 80
vers HTTPS. HAProxy déchiffre la connexion, applique ses règles sur la
requête en clair, puis la transmet au backend. Un en-tête X-Forwarded-Proto
dit à l'application que le client est arrivé en HTTPS.
frontend https_in bind :80 bind :443 ssl crt /etc/haproxy/certs/ alpn h2,http/1.1 http-request redirect scheme https unless { ssl_fc } http-request set-header X-Forwarded-Proto https if { ssl_fc } default_backend appQuand crt désigne un dossier, HAProxy charge tous les certificats qu'il contient. Pour chaque connexion, il compare le nom annoncé par le client (SNI) aux noms des certificats et présente le bon ; si rien ne correspond, il présente un certificat par défaut. C'est le même mécanisme que celui de
Traefik, décrit dans la leçon sur le trajet d'une requête.
À quoi servent crt-store et la section acme ?
Section intitulée « À quoi servent crt-store et la section acme ? »La section crt-store regroupe les certificats et leurs clés dans un
emplacement nommé, et la section acme décrit l'autorité qui les délivre.
Un certificat du magasin se lie à une autorité par le mot-clé acme, et le
frontend le référence par son nom plutôt que par un chemin de fichier.
global expose-experimental-directives
acme pebble directory https://pebble.lab.test:14000/dir contact admin@lab.test account-key /etc/haproxy/acme/account.key challenge http-01
crt-store certs crt-base /etc/haproxy/certs key-base /etc/haproxy/certs load crt "app.lab.test.pem" acme pebble domains "app.lab.test"
frontend https_in bind :443 ssl alpn h2,http/1.1 ssl-f-use crt "@certs/app.lab.test"Ce fichier illustre la structure, pas une solution prête à l'emploi : l'adresse de l'autorité, les chemins et les noms sont à adapter. Le principe à retenir est que le certificat est demandé et renouvelé par HAProxy lui-même, et que le frontend le lit dans le magasin. Si le certificat n'existe pas encore au démarrage, HAProxy peut en présenter un provisoire le temps d'obtenir le vrai.
Les certificats obtenus par ce client ne sont pas écrits sur le disque.
HAProxy évite d'accéder au système de fichiers après le chargement de sa
configuration : le certificat et sa clé vivent en mémoire, dans le magasin.
La conséquence surprend au premier renouvellement, car le fichier attendu dans
le répertoire du magasin n'apparaît jamais, et une sauvegarde qui copie ce
répertoire ne sauvegarde rien. Pour en obtenir une copie, il faut la demander au
processus, par la commande dump ssl cert sur le socket d'administration,
ou par l'utilitaire haproxy-dump-certs que le paquet Debian fournit.
Comment protéger la clé du compte ACME ?
Section intitulée « Comment protéger la clé du compte ACME ? »La clé du compte ACME prouve votre identité auprès de l'autorité : elle doit être lisible par HAProxy seul. Quiconque la possède peut demander des certificats au nom du compte. Placez-la dans un dossier dédié, avec des droits restreints au compte qui exécute HAProxy, hors de tout dépôt versionné.
Le même principe vaut pour les clés privées des certificats du magasin : un fichier lisible par tous annule l'intérêt du chiffrement. Après une configuration, listez les droits des fichiers et vérifiez que seuls le propriétaire et, au besoin, son groupe y accèdent.
Comment recharger sans couper les connexions ?
Section intitulée « Comment recharger sans couper les connexions ? »Rechargez HAProxy plutôt que de le redémarrer : le processus maître lance de
nouveaux processus de travail avec la nouvelle configuration, et les anciens
terminent leurs connexions en cours. Avec le service systemd, la commande de
rechargement fait cet enchaînement, après que haproxy -c -f a validé la
configuration.
haproxy -c -f /etc/haproxy/haproxy.cfgsystemctl reload haproxyPour prouver qu'un certificat renouvelé est servi sans interrompre le processus, comparez deux choses avant et après le renouvellement : le numéro de série ou la date de fin du certificat présenté (openssl s_client, avec le nom demandé en SNI), et l'identifiant du processus maître, qui doit rester le même. Un certificat qui change et un processus qui ne change pas prouvent le renouvellement à chaud.
Mettre en pratique : HTTPS et ACME avec HAProxy
Section intitulée « Mettre en pratique : HTTPS et ACME avec HAProxy »Le lab part d'une petite application qui écoute sur l'hôte et d'un déploiement HAProxy qui ne la publie pas correctement en HTTPS. L'autorité ACME de test et son répondeur de défi HTTP-01 sont déjà préparés. Il vous demande de router
app.lab.test vers le backend local, de rediriger HTTP vers HTTPS, d'obtenir le
certificat avec le client ACME natif, de protéger la clé du compte et de
prouver qu'un certificat renouvelé est servi sans interrompre le processus.
À retenir
Section intitulée « À retenir »HAProxy sert le HTTPS par un frontend, un magasin de certificats et, au choix, son client ACME.
- Le SNI choisit le certificat présenté.
crt-storeregroupe les certificats,acmedécrit l'autorité.- Le client ACME est expérimental :
expose-experimental-directivesest exigé. - La clé du compte ACME reste lisible par HAProxy seul.
- Les certificats restent en mémoire :
dump ssl certouhaproxy-dump-certsen sort une copie. reloadaprèshaproxy -cremplace les processus sans couper les connexions.
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Score par domaine
Un domaine regroupe plusieurs guides et reçoit plusieurs questions : son score est plus fiable qu'un score par thème, qui porte souvent sur une seule question.
Bilan
Points forts
Aucun sujet réussi à 80 % sur au moins deux questions pour l’instant.
Points faibles
Aucun sujet sous le seuil de réussite.
À faire ensuite
Des indices pour retenter votre chance ?
Continuer le cours : Sécuriser les flux amont, backend et clients
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications