RousselTMLEARNING

Proxy & réseau

Protocole ACME : serveur ACME, challenges http-01 et dns-01, automatisation TLS

Comprendre le protocole ACME : rôle du serveur ACME (Let's Encrypt, ZeroSSL, step-ca), challenges http-01 (/.well-known/acme-challenge), dns-01 et tls-alpn-01, et renouvellement automatique avec Traefik, HAProxy et Nginx.

Protocole ACME : serveur ACME, challenges http-01 et dns-01, automatisation TLS

1. Qu'est-ce que le protocole ACME ? #

Le protocole ACME (RFC 8555) est un standard permettant d'automatiser les interactions entre une autorité de certification (CA) et les serveurs web.

Origine et Fonctionnement #

Développé par l'ISRG (Internet Security Research Group) pour le lancement de Let's Encrypt, ACME permet à un serveur de prouver qu'il contrôle un domaine afin d'obtenir un certificat sans intervention humaine. Cette preuve repose sur des 'défis' (challenges) :

  • HTTP-01 : Placer un fichier spécifique sur le serveur web.
  • DNS-01 : Créer un enregistrement TXT spécifique dans la zone DNS.
  • TLS-ALPN-01 : Présenter un certificat spécial sur le port 443 (négociation ALPN), quand le port 80 n'est pas accessible.

Les avantages majeurs #

  • Gratuité : La plupart des autorités ACME (Let's Encrypt, ZeroSSL) offrent des certificats gratuits.
  • Sécurité : Les certificats expirent tous les 90 jours, limitant l'impact en cas de compromission.
  • Fiabilité : L'automatisation élimine le risque d'oubli de renouvellement (première cause d'indisponibilité HTTPS).

2. Automatisation avec Traefik #

Traefik est le champion de l'ACME grâce à son support natif sans outil tiers.

Configuration (traefik.yml) #

Traefik gère lui-même le stockage et le renouvellement via des CertificatesResolvers :

certificatesResolvers:
  myresolver:
    acme:
      email: admin@votre-domaine.fr
      storage: acme.json
      httpChallenge:
        entryPoint: web # Port 80 obligatoire pour le défi HTTP-01
      # tlsChallenge: {}     # défi TLS-ALPN-01 sur le port 443, sans port 80
      # dnsChallenge: { provider: ovh }   # défi DNS-01 (wildcards)

Ensuite, sur vos conteneurs, il suffit d'ajouter un label :
traefik.http.routers.monapp.tls.certresolver=myresolver

3. Automatisation avec HAProxy #

HAProxy 3.2 et plus intègre un client ACME natif ; les versions antérieures s'appuient sur un client externe (Certbot ou acme.sh).

Intégration avec Certbot #

Depuis la version 3.2, HAProxy intègre un client ACME natif (section acme associée aux certificats, renouvellement automatique), d'abord proposé comme fonctionnalité expérimentale et limité au défi HTTP-01. Un client externe (Certbot, acme.sh) reste l'option la plus éprouvée pour les versions antérieures, le défi DNS-01 ou les besoins avancés : consultez la documentation de votre version d'HAProxy.

La méthode recommandée consiste à dédier un backend au challenge ACME pour ne pas couper le trafic :

frontend http-in
    bind *:80
    acl is_acme path_beg /.well-known/acme-challenge/
    use_backend acme_backend if is_acme

backend acme_backend
    server certbot 127.0.0.1:8888

Le renouvellement se fait via un script qui concatène le certificat et la clé privée dans un fichier .pem, format attendu par HAProxy.

4. Automatisation avec Nginx #

Nginx utilise massivement Certbot via un plugin dédié qui automatise la lecture et l'écriture de la configuration.

Commande de mise en place #

Sur la plupart des systèmes Linux, une seule commande suffit pour transformer un site HTTP en HTTPS :

sudo certbot --nginx -d mon-domaine.fr

Certbot va alors :

  1. Modifier votre nginx.conf pour ajouter les blocs SSL.
  2. Gérer le challenge HTTP-01.
  3. Installer un minuteur systemd (ou une tâche cron) qui lance certbot renew deux fois par jour : le certificat n'est renouvelé que lorsqu'il lui reste moins de 30 jours de validité.

Conclusion #

Quel outil choisir ? #

Si vous travaillez dans un environnement cloud/conteneurs, Traefik offre l'expérience la plus fluide. Pour des infrastructures traditionnelles plus statiques, le couple Nginx + Certbot reste la référence mondiale par sa simplicité.

Serveurs et challenges ACME #

Comment l'autorité vérifie le domaine.

Challenges #

ChallengePreuveQuand
http-01Un fichier servi sur http://domaine/.well-known/acme-challenge/<jeton>Serveur joignable en HTTP sur le port 80
dns-01Un enregistrement TXT _acme-challenge.domaineCertificats wildcard, serveurs internes
tls-alpn-01Un certificat spécial présenté sur le port 443Port 80 fermé

Le serveur ACME est l'autorité qui délivre les certificats : Let's Encrypt et ZeroSSL publiquement, step-ca (Smallstep) ou une PKI d'entreprise compatible ACME en interne.

Erreur Courante : Une redirection HTTP vers HTTPS appliquée aussi à /.well-known/acme-challenge/ fait échouer le challenge http-01 si le certificat HTTPS est déjà expiré : excluez ce chemin de la redirection.

Articles liés

Traefik : sécuriser et transformer les requêtes avec les middlewares (BasicAuth, ForwardAuth…)

Les middlewares Traefik modifient les requêtes et réponses entre le routeur et le service : authentification …

Traefik : les providers (Docker, Kubernetes, Nomad, Consul, fichiers, clés-valeurs)

Les providers alimentent la configuration dynamique de Traefik : découverte des services Docker, Swarm, Kuber…

Traefik comme Ingress Controller pour Kubernetes (Helm, IngressRoute, Gateway API)

Installer Traefik dans Kubernetes avec Helm et publier des applications avec Ingress, les CRD IngressRoute et…

Pour aller plus loin

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !