Publié le : 15/01/2025 à 10:00 Mis à jour le : 06/07/2026 à 10:59 Vues : 516

Apprenez à automatiser la génération et le renouvellement de vos certificats SSL/TLS avec Let's Encrypt. Découvrez le protocole ACME et son intégration avec Traefik, HAProxy et Nginx.

1. Comprendre le protocole ACME

Le protocole ACME (Automated Certificate Management Environment) est le standard qui permet d'automatiser les interactions entre une autorité de certification (CA) comme Let's Encrypt et les serveurs web pour obtenir des certificats SSL/TLS.

Comment ça marche ? Les 'Challenges'

Pour obtenir un certificat, un serveur doit prouver qu'il contrôle bien le domaine demandé. ACME utilise des 'défis' (challenges) pour cette vérification :

  • HTTP-01 : Le client ACME (ex: Certbot) place un fichier contenant un token unique à une URL spécifique sur le serveur web (http://<VOTRE_DOMAINE>/.well-known/acme-challenge/<TOKEN>). L'autorité de certification vérifie ensuite la présence de ce fichier. C'est la méthode la plus courante.
  • DNS-01 : Le client ACME crée un enregistrement DNS de type TXT avec une valeur spécifique. L'autorité de certification vérifie cet enregistrement. Cette méthode est plus complexe mais permet d'obtenir des certificats wildcard (*.votredomaine.com).

Les avantages de l'automatisation

  • Gratuité : Let's Encrypt a démocratisé le HTTPS en offrant des certificats gratuits via ACME.
  • Sécurité : Les certificats ont une durée de vie courte (90 jours), ce qui limite les risques en cas de compromission de la clé privée.
  • Fiabilité : L'automatisation du renouvellement élimine le risque d'oubli, qui est une cause fréquente d'indisponibilité de sites web.

2. Mise en pratique : Intégration avec les Proxies Modernes

Chaque reverse proxy a sa propre philosophie pour intégrer le protocole ACME. Voici comment les plus populaires s'y prennent.

Traefik : L'intégration native

Traefik est conçu pour les environnements dynamiques (conteneurs, microservices) et intègre un client ACME nativement. Il n'y a aucun outil externe à installer. La configuration se fait directement dans le fichier statique de Traefik ou via des labels Docker.

Pour en savoir plus, consultez notre formation sur Traefik.

Exemple de configuration (docker-compose.yml) :
version: '3.7'

services:
  traefik:
    image: traefik:v2.10
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.myresolver.acme.email=votre.email@domaine.com"
      - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
      - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - "./letsencrypt:/letsencrypt"

  whoami:
    image: traefik/whoami
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.whoami.rule=Host(`whoami.votre-domaine.com`)"
      - "traefik.http.routers.whoami.entrypoints=websecure"
      - "traefik.http.routers.whoami.tls.certresolver=myresolver"

HAProxy : La puissance combinée à un client externe

HAProxy, réputé pour ses performances, ne possède pas de client ACME natif. Il s'appuie sur des outils externes comme Certbot ou acme.sh. L'approche la plus robuste en production consiste à utiliser le mode webroot de Certbot, qui ne nécessite aucune interruption de service.

Approfondissez vos connaissances avec notre formation sur HAProxy.

1. Configuration de HAProxy (haproxy.cfg)

L'astuce consiste à configurer HAProxy pour qu'il serve lui-même les fichiers de challenge créés par Certbot, sans perturber le trafic normal. Pour cela, on crée un backend qui pointe vers un répertoire local.

frontend http-in
    bind *:80

    # ACL pour intercepter les requêtes du challenge ACME
    acl is_acme path_beg /.well-known/acme-challenge/

    # Si la requête est pour ACME, on la sert via le backend dédié
    use_backend acme_backend if is_acme

    # Pour tout le reste du trafic, on redirige vers HTTPS
    default_backend web_servers
    redirect scheme https if !{ ssl_fc }

# Ce backend ne proxy rien, il sert des fichiers depuis un dossier local
backend acme_backend
    # On utilise un préfixe pour construire le chemin du fichier sur le disque
    http-request set-var(req.path) path
    http-request use-service lua.acme-http01

# Le frontend principal pour le trafic sécurisé
frontend https-in
    bind *:443 ssl crt /etc/haproxy/certs/ alpn h2,http/1.1
    default_backend web_servers

Note : La directive use-service lua.acme-http01 est une méthode moderne et performante. Une alternative plus ancienne consiste à utiliser un backend avec un serveur web léger (comme un mini-Nginx) qui sert le contenu du répertoire des challenges.

2. Lancement de Certbot en mode Webroot

Avec cette configuration, on peut lancer Certbot en mode webroot. Il va simplement créer un fichier dans le répertoire /var/www/letsencrypt, et HAProxy se chargera de le servir à l'autorité de certification.

# Assurez-vous que le répertoire existe et que l'utilisateur HAProxy peut y écrire
sudo mkdir -p /var/www/letsencrypt
sudo chown haproxy:haproxy /var/www/letsencrypt

# Lancez Certbot en spécifiant le webroot
sudo certbot certonly --webroot -w /var/www/letsencrypt -d votre-domaine.com
3. Automatisation du renouvellement

HAProxy a besoin que le certificat et la clé privée soient dans un seul fichier .pem. On utilise donc un script (--deploy-hook) qui sera exécuté par Certbot après chaque renouvellement réussi pour préparer le fichier et recharger HAProxy.

Exemple de script de renouvellement (/etc/letsencrypt/renewal-hooks/deploy/haproxy-renew.sh) :
#!/bin/bash

DOMAIN_PATH="/etc/letsencrypt/live/votre-domaine.com"
HAPROXY_CERT_PATH="/etc/haproxy/certs/votre-domaine.com.pem"

# Concaténer le certificat et la clé dans un seul fichier
cat "$DOMAIN_PATH/fullchain.pem" "$DOMAIN_PATH/privkey.pem" > "$HAPROXY_CERT_PATH"

# Recharger HAProxy pour qu'il prenne en compte le nouveau certificat
sudo systemctl reload haproxy

N'oubliez pas de rendre ce script exécutable : sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/haproxy-renew.sh. Certbot s'occupera du reste via sa tâche cron système, assurant un renouvellement entièrement automatisé et sans interruption.

Nginx : La simplicité avec le plugin Certbot

Nginx est le cas d'usage le plus courant pour Certbot, qui dispose d'un plugin dédié (--nginx). Ce plugin est capable de lire votre configuration Nginx, de la modifier pour ajouter les blocs SSL et de gérer le challenge de manière transparente.

Devenez un expert Nginx avec notre formation dédiée.

Exemple de mise en place :

1. Installez Certbot et son plugin Nginx :

sudo apt update
sudo apt install certbot python3-certbot-nginx

2. Lancez la commande magique. Certbot s'occupe de tout :

sudo certbot --nginx -d votre-domaine.com -d www.votre-domaine.com

Certbot va automatiquement :

  • Détecter les blocs server correspondants dans votre configuration.
  • Ajouter les directives ssl_certificate et ssl_certificate_key.
  • Configurer la redirection de HTTP vers HTTPS.
  • Installer une tâche cron ou un timer systemd pour le renouvellement automatique.

Conclusion

L'automatisation de la gestion des certificats SSL/TLS est aujourd'hui un standard incontournable pour toute infrastructure web sécurisée et fiable.

Quel outil choisir ?

Le choix dépend de votre architecture :

  • Traefik est le roi des environnements conteneurisés et dynamiques grâce à son intégration native.
  • Nginx + Certbot est la solution la plus simple et la plus répandue pour les serveurs web plus traditionnels (VMs, serveurs dédiés).
  • HAProxy + Certbot est une solution robuste pour les infrastructures haute performance qui nécessitent les fonctionnalités avancées de HAProxy.

Dans tous les cas, l'adoption du protocole ACME vous libère de la charge mentale du renouvellement manuel et garantit un web plus sûr pour tous.

Lien copié dans le presse-papiers !