ITSkillsCenter
Cybersécurité

Configurer Let’s Encrypt avec Certbot sur Nginx pas-à-pas — HTTPS gratuit et automatisé

7 دقائق للقراءة

Activer HTTPS sur un site auto-hébergé prenait dix minutes et 50 USD par an il y a dix ans. Aujourd’hui, c’est gratuit et automatisé : Let’s Encrypt délivre des certificats TLS valides 90 jours, et l’outil Certbot les obtient et les renouvelle sans intervention humaine. Ce tutoriel propose une démarche en sept étapes pour configurer Let’s Encrypt sur un serveur Nginx tournant sous Ubuntu ou Debian — la combinaison la plus fréquente sur les VPS abordables disponibles aux entrepreneurs ouest-africains.

Pour la vue d’ensemble cryptographie, voir le guide principal : Cryptographie pratique pour développeurs et sysadmins.

Prérequis

  • Un serveur Linux (Ubuntu 22.04 LTS ou Debian 12 recommandé) avec accès SSH root ou sudo
  • Un nom de domaine pointant vers l’adresse IP publique du serveur (enregistrement DNS A à jour)
  • Nginx installé et servant déjà votre site en HTTP
  • Les ports 80 et 443 ouverts dans le pare-feu du serveur et chez le fournisseur cloud
  • 15 à 30 minutes

Étape 1 — Vérifier le DNS

Avant de demander un certificat, Let’s Encrypt va vérifier que vous contrôlez bien le domaine en faisant une requête HTTP vers http://votre-domaine/.well-known/acme-challenge/. Si le DNS ne pointe pas vers votre serveur, la vérification échoue. Tester avec une commande de résolution simple :

dig +short exemple.com

La réponse doit afficher l’adresse IP publique de votre serveur. Si elle pointe ailleurs ou ne répond pas, corriger l’enregistrement A dans la zone DNS du domaine et attendre la propagation (généralement quelques minutes, parfois jusqu’à 24 h selon les registrars). Pour un domaine en .sn ou .ci, vérifier directement chez votre registrar régional.

Étape 2 — Installer Certbot

Sur Ubuntu 22.04 et plus récent, la méthode officielle recommandée par Let’s Encrypt utilise snap pour avoir toujours la dernière version. Sur Debian, le paquet certbot via apt convient. Pour Ubuntu :

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

La commande installe Certbot dans /snap/bin et crée un lien symbolique pour qu’il soit accessible sans préfixer le chemin. Vérifier l’installation :

certbot --version

Le numéro de version doit s’afficher (par exemple certbot 2.x.x). Sur Debian, remplacer la commande snap par sudo apt install certbot python3-certbot-nginx et passer directement à l’étape suivante.

Étape 3 — Vérifier la configuration Nginx

Certbot va modifier automatiquement le fichier de configuration Nginx du domaine pour ajouter HTTPS. Pour que ça marche, le bloc server du site doit comporter une directive server_name exacte. Ouvrir le fichier de configuration :

sudo nano /etc/nginx/sites-available/exemple.com

Vérifier la présence d’une ligne du type server_name exemple.com www.exemple.com; à l’intérieur du bloc server qui écoute sur le port 80. Sans cette directive, Certbot ne peut pas identifier le site à modifier.

Tester ensuite que la configuration Nginx est syntaxiquement correcte et recharger pour appliquer les éventuelles modifications :

sudo nginx -t
sudo systemctl reload nginx

La sortie doit confirmer syntax is ok et test is successful. Toute erreur doit être corrigée avant de passer à l’étape suivante — Certbot ne peut pas opérer sur une configuration invalide.

Étape 4 — Obtenir le certificat

La commande clé qui obtient le certificat et configure Nginx en une passe :

sudo certbot --nginx -d exemple.com -d www.exemple.com

L’option –nginx indique à Certbot d’utiliser le plugin Nginx pour modifier automatiquement la configuration. Les options -d listent les domaines à inclure dans le certificat — il faut tous ceux que les utilisateurs peuvent taper dans leur navigateur. À la première exécution, Certbot demande une adresse mail (pour les notifications de renouvellement et expiration), l’acceptation des conditions d’utilisation, et le choix entre rediriger automatiquement HTTP vers HTTPS (option recommandée).

Si tout se passe bien, le message final indique Congratulations! You have successfully enabled HTTPS avec la liste des domaines couverts et la date d’expiration (90 jours plus tard). Le certificat est stocké dans /etc/letsencrypt/live/exemple.com/.

Étape 5 — Vérifier le résultat

Ouvrir https://exemple.com dans un navigateur. Le cadenas vert (ou son équivalent moderne) doit apparaître. Cliquer sur le cadenas pour voir les détails du certificat — émetteur Let’s Encrypt Authority, validité 90 jours.

Pour un audit complet de la configuration TLS, passer le site sur SSL Labs. Le test prend deux minutes et donne une note de A+ à F. Une configuration Certbot de base avec Nginx récent obtient typiquement A. Pour viser A+, ajouter manuellement les en-têtes HTTP Strict Transport Security (HSTS) dans la configuration Nginx :

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

Cette directive demande aux navigateurs de toujours utiliser HTTPS sur ce domaine pendant un an, même si l’utilisateur tape http://. Elle protège contre les attaques de type SSL stripping.

Étape 6 — Tester le renouvellement automatique

Les certificats Let’s Encrypt durent 90 jours en 2026, avec une transition annoncée par Let’s Encrypt vers 45 jours (profil opt-in dès mai 2026, par défaut en 2028). Sans renouvellement, le site bascule en HTTPS expiré et tous les navigateurs affichent un avertissement bloquant. La bonne nouvelle : un Certbot bien configuré renouvelle automatiquement, quel que soit le format de validité. Heureusement, Certbot installe automatiquement un cron ou un timer systemd qui tente le renouvellement deux fois par jour, et ne renouvelle effectivement que dans les 30 derniers jours avant expiration.

Tester que le mécanisme fonctionne sans attendre 60 jours :

sudo certbot renew --dry-run

L’option –dry-run simule un renouvellement sans toucher au certificat réel. La sortie doit terminer par Congratulations, all simulated renewals succeeded. Si une erreur apparaît, la corriger maintenant — il sera trop tard quand le certificat réel expirera.

Vérifier que le timer systemd est bien actif :

sudo systemctl list-timers | grep certbot

Une ligne certbot.timer doit apparaître avec une prochaine exécution dans les 12 heures. Pour Ubuntu via snap, le mécanisme est légèrement différent mais équivalent — Certbot prend en charge automatiquement.

Étape 7 — Mettre en place une surveillance

Le renouvellement automatique fonctionne dans 99 % des cas, mais l’1 % où il échoue (DNS modifié sans en informer Certbot, port 80 fermé après une mise à jour, certificat révoqué) peut casser le site silencieusement. Une surveillance externe est l’assurance.

Trois options gratuites simples. UptimeRobot ou Better Uptime envoient une alerte mail si le site devient inaccessible — gratuit jusqu’à 50 cibles. SSL Labs ne surveille pas en continu mais peut être lancé mensuellement. Le service Expiration Notifications de Let’s Encrypt envoie un mail 20, 10 et 1 jour avant expiration à l’adresse configurée — vérifier que les mails arrivent et ne sont pas filtrés en spam.

Vérification du livrable

  • Le site est accessible en HTTPS sans avertissement
  • L’accès HTTP redirige automatiquement vers HTTPS
  • Le test SSL Labs renvoie au moins A
  • Le renouvellement à blanc (–dry-run) réussit
  • Une notification d’expiration est configurée

Erreurs fréquentes

ErreurCauseSolution
Challenge HTTP-01 échoueDNS pas à jour ou port 80 ferméVérifier dig et ouvrir 80/443 dans le pare-feu
Rate limit Let’s EncryptTrop d’essais en peu de tempsUtiliser –staging pour tester, attendre une heure
Renouvellement silencieux échoueCertbot non superviséUptimeRobot ou notification mail Let’s Encrypt
Certificat valide mais site KOConfiguration Nginx cassée par Certbotnginx -t, restauration manuelle
Avertissement SSL LabsAnciens protocoles encore actifsDésactiver SSL 3.0, TLS 1.0, TLS 1.1

Domaines en .sn ou .ci, et propagation DNS locale

Trois pratiques optimisent un déploiement Let’s Encrypt sur infrastructure ouest-africaine. Côté VPS abordable, Hetzner, OVH et DigitalOcean sont les plus utilisés à 4-6 USD par mois et tournent parfaitement avec Certbot ; localement, Sonatel Cloud et Hosteur proposent aussi du VPS mais vérifier que les ports 80 et 443 sont bien ouverts par défaut. Les domaines en .sn et .ci fonctionnent avec Let’s Encrypt sans difficulté particulière, et la résolution DNS chez certains registrars locaux peut être lente — propager via Cloudflare DNS gratuit en pointant vers le VPS améliore la latence et la fiabilité, et accélère drastiquement la validation HTTP-01 du challenge ACME. Pour un site qui sert un trafic ouest-africain, Cloudflare en frontal apporte aussi un cache CDN très utile sur les connexions ADSL ou 4G congestionnées.

Tutoriels frères

  • Hasher des mots de passe avec bcrypt et argon2
  • Générer et utiliser une clé SSH ed25519
  • Chiffrer un fichier avec GPG

Pour aller plus loin

Sources et références

Sponsoriser ce contenu

Cet emplacement est à vous

Position premium en fin d'article — c'est l'instant où les lecteurs sont le plus engagés. Réservez cet espace pour votre marque, votre formation ou votre offre.

Tarifs sur demande
Recevoir nos tarifs
Publicité