SSL : Certificat Let’s Encrypt avec Certbot sur Debian/Ubuntu (sans Snap)

20 juillet 2026 — par admin_libra

Let’s Encrypt est une autorité de certification gratuite, automatisée et ouverte, qui délivre des certificats SSL/TLS reconnus par tous les navigateurs modernes. Certbot est l’outil officiel développé par l’EFF pour obtenir et renouveler ces certificats automatiquement. Ensemble, ils permettent de déployer HTTPS sur vos serveurs Linux en quelques minutes, sans frais et sans gérer manuellement les renouvellements.

Par défaut, la documentation officielle de Certbot recommande désormais l’installation via Snap (snapd). Cette approche pose des problèmes dans de nombreux environnements : serveurs minimalistes, conteneurs LXC non-privilégiés, politiques de sécurité internes, ou simple préférence pour les outils système natifs. Snap introduit un daemon supplémentaire, des montages loop devices, et des mises à jour automatiques difficiles à auditer. Heureusement, Certbot peut être installé proprement via pip dans un environnement virtuel Python, sans toucher à Snap ni aux paquets APT obsolètes.

Ce guide couvre l’installation complète de Certbot sur Debian et Ubuntu via la méthode pip officielle, l’obtention de certificats pour Nginx et Apache, et la configuration du renouvellement automatique.

Prérequis

Avant de commencer, assurez-vous que :

  • Votre nom de domaine pointe vers l’adresse IP publique de votre serveur (résolution DNS active et propagée).
  • Les ports 80 (HTTP) et 443 (HTTPS) sont ouverts dans votre pare-feu — Let’s Encrypt en a besoin pour valider la propriété du domaine.
  • Votre serveur web (Nginx ou Apache) est installé et répond sur le domaine cible.
  • Vous disposez des droits sudo sur la machine.

Si vous utilisez nftables comme pare-feu, vérifiez que les ports 80 et 443 sont bien autorisés en entrée. Consultez l’article nftables en pratique sur Debian/Ubuntu pour configurer vos règles avant de poursuivre.

Pourquoi éviter Snap pour Certbot ?

L’alternative pip dans un virtualenv offre plusieurs avantages concrets par rapport à Snap :

  • Compatibilité totale avec les conteneurs LXC non-privilégiés, les systèmes sans snapd, et les environnements minimalistes.
  • Contrôle des mises à jour : vous décidez quand mettre à jour Certbot, avec les mêmes outils que le reste de votre système.
  • Isolation propre des dépendances Python dans /opt/certbot/, sans polluer l’environnement système.
  • Intégration native avec cron ou systemd, sans daemon Snap supplémentaire.

Installation de Certbot via pip

1. Supprimer les anciennes installations

Si Certbot a déjà été installé via APT ou Snap, supprimez ces versions pour éviter les conflits :

# Supprimer les paquets APT si présents
sudo apt remove certbot python3-certbot-nginx python3-certbot-apache 2>/dev/null

# Supprimer la version Snap si installée
sudo snap remove certbot 2>/dev/null || true

2. Installer les dépendances système

sudo apt update
sudo apt install -y python3 python3-dev python3-venv libaugeas-dev gcc

Le paquet libaugeas-dev est requis par le plugin Apache de Certbot (il permet la modification automatique des VirtualHosts). Pour une utilisation exclusivement avec Nginx, il n’est pas strictement nécessaire mais son installation ne pose aucun problème.

3. Créer l’environnement virtuel Python

# Créer le virtualenv dédié à Certbot
sudo python3 -m venv /opt/certbot/

# Mettre à jour pip à l'intérieur du virtualenv
sudo /opt/certbot/bin/pip install --upgrade pip

4. Installer Certbot et le plugin adapté à votre serveur web

Pour Nginx :

sudo /opt/certbot/bin/pip install certbot certbot-nginx

Pour Apache :

sudo /opt/certbot/bin/pip install certbot certbot-apache

Pour les deux serveurs :

sudo /opt/certbot/bin/pip install certbot certbot-nginx certbot-apache

5. Créer le lien symbolique

sudo ln -s /opt/certbot/bin/certbot /usr/local/bin/certbot

# Vérifier la version installée
certbot --version

Résultat attendu (version actuelle en 2026) :

certbot 5.6.0

Obtenir un certificat SSL

Avec Nginx — configuration automatique

La commande suivante obtient le certificat et modifie automatiquement la configuration Nginx pour activer HTTPS, la redirection HTTP→HTTPS, et les paramètres SSL recommandés :

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

Certbot vous demandera une adresse e-mail (pour les alertes d’expiration) et votre accord avec les conditions d’utilisation. Il modifiera le bloc server Nginx correspondant et rechargera la configuration.

Pour obtenir uniquement le certificat sans toucher à la configuration Nginx (si vous gérez manuellement vos blocs server) :

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

Avec Apache — configuration automatique

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

Certbot modifie le VirtualHost Apache pour y ajouter les directives SSL, active le module mod_ssl, et configure la redirection HTTP→HTTPS.

Mode standalone (sans serveur web actif)

Si votre serveur web n’est pas encore configuré, le mode standalone lance un serveur HTTP temporaire sur le port 80 pour répondre au défi de validation :

# Arrêter temporairement le serveur web (port 80 doit être libre)
sudo systemctl stop nginx

# Obtenir le certificat
sudo certbot certonly --standalone -d exemple.com -d www.exemple.com

# Relancer le serveur web
sudo systemctl start nginx

Mode webroot (sans interrompre le serveur web)

Le mode webroot place des fichiers de validation dans un répertoire servi par votre serveur, sans l’interrompre. C’est la méthode la plus propre en production :

sudo certbot certonly --webroot 
  -w /var/www/exemple.com/public 
  -d exemple.com -d www.exemple.com

Les certificats obtenus sont stockés dans /etc/letsencrypt/live/exemple.com/ :

ls /etc/letsencrypt/live/exemple.com/
# cert.pem       → certificat du domaine seul
# chain.pem      → chaîne de certification intermédiaire
# fullchain.pem  → cert.pem + chain.pem (à utiliser dans nginx/apache)
# privkey.pem    → clé privée (à protéger, jamais exposée publiquement)

Renouvellement automatique

Les certificats Let’s Encrypt ont une durée de vie de 90 jours. Certbot peut les renouveler automatiquement lorsqu’ils approchent de l’expiration (seuil : moins de 30 jours restants). La pratique recommandée par Let’s Encrypt est de tenter le renouvellement deux fois par jour :

echo "0 0,12 * * * root /opt/certbot/bin/python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q" | sudo tee -a /etc/crontab > /dev/null

Cette entrée cron :

  • S’exécute à 00h00 et 12h00 chaque jour.
  • Attend un délai aléatoire (jusqu’à 1 heure) pour répartir la charge sur les serveurs Let’s Encrypt.
  • Lance certbot renew -q qui ne renouvelle que les certificats expirant dans moins de 30 jours.

Testez le renouvellement en mode simulation avant de valider :

sudo certbot renew --dry-run

Mise à jour mensuelle de Certbot

Contrairement à la version Snap, Certbot installé via pip ne se met pas à jour automatiquement. Ajoutez une mise à jour mensuelle dans cron :

echo "0 3 1 * * root /opt/certbot/bin/pip install --upgrade certbot certbot-nginx certbot-apache -q" | sudo tee -a /etc/crontab > /dev/null

Vérification et dépannage

Lister les certificats et leurs dates d’expiration

sudo certbot certificates

Sortie typique :

Found the following certs:
  Certificate Name: exemple.com
    Domains: exemple.com www.exemple.com
    Expiry Date: 2026-09-28 12:00:00+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/exemple.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/exemple.com/privkey.pem

Tester la connexion SSL

# Vérifier le certificat présenté par le serveur
openssl s_client -connect exemple.com:443 -servername exemple.com /dev/null 
  | openssl x509 -noout -issuer -dates

# Tester avec curl
curl -vI https://exemple.com 2>&1 | grep -E "SSL|issuer|expire|subject"

Erreurs fréquentes

Erreur « Too many requests » (429) : Let’s Encrypt limite à 5 certificats émis par domaine enregistré par semaine en production. Utilisez l’option --test-cert pour les tests — les certificats de staging ne sont pas reconnus par les navigateurs mais n’ont pas de limite de taux.

# Mode staging pour les tests (sans limite de taux)
sudo certbot certonly --nginx --test-cert -d exemple.com

Port 80 inaccessible : Let’s Encrypt doit pouvoir joindre votre serveur sur le port 80 pour valider le domaine. Vérifiez vos règles de pare-feu et qu’aucun redirect immédiat vers HTTPS ne bloque la requête de validation sur /.well-known/acme-challenge/.

Erreur de permissions sur /etc/letsencrypt : Les certificats appartiennent à root. Si votre serveur web tourne sous un autre utilisateur, assurez-vous que les fichiers dans /etc/letsencrypt/live/ et /etc/letsencrypt/archive/ sont lisibles par ce processus, ou utilisez des ACL POSIX.

À lire également

Références

Index complet

Tous les articles (58)

Date Article Tags
20/07/2026 SSL : Certificat Let's Encrypt avec Certbot sur Debian/Ubuntu (sans Snap) apache certbot certificat 20/07/2026 MariaDB : Tuning mariadb server sous debian / ubuntu et operation de maintenance sauvegarde/restauration debian innodb maintenance 20/07/2026 MariaDB : Mise en place d'une réplication Master → Slave base-de-données binlog debian 20/07/2026 OpenSVC : piloter des conteneurs LXC sur datasets ZFS avec snapshots et réplication sous Debian/Ubuntu conteneurs debian haute-disponibilité 20/07/2026 SCREEN : utilisation et cas d'usage des screens sous Linux administration bash debian 20/07/2026 EtherPAD : installation et configuration d'Etherpad collaboration debian editeur-collaboratif 20/07/2026 Wazuh 4.14 : déployer un SIEM/XDR open source sur Debian/Ubuntu compliance debian fim 20/07/2026 Incus 7.x : gérer conteneurs système et VMs sur Debian/Ubuntu — le successeur communautaire de LXD conteneurs debian incus 20/07/2026 Restic : sauvegardes incrémentielles chiffrées sur Debian et Ubuntu backup chiffrement debian 20/07/2026 Restic : sauvegardes chiffrées et dédupliquées sur Debian/Ubuntu automatisation backup chiffrement 30/06/2026 PHP : gérer plusieurs versions PHP-FPM avec les dépôts Sury sur Debian/Ubuntu administration apache debian 22/06/2026 OS : Cycle de vie LTS et mise à jour des distributions — apt dist-upgrade et do-release-upgrade sous Debian / Ubuntu apt cycle-de-vie debian 17/06/2026 APT : Guide complet de la gestion des paquets sous Debian et Ubuntu administration apt debian 17/06/2026 SHELL : Guide des commandes les plus usuelles et commandes couteau suisse awk bash commandes 17/06/2026 SUDO : implémentation et sécurisation des accès sur Debian/Ubuntu administration audit authentification 17/06/2026 ProFTPd : authentification MySQL centralisée, FTPs (SSL) et SFTP sur Debian/Ubuntu authentification debian ftp 09/06/2026 Fail2ban — configuration avancée et filtres personnalisés bruteforce debian fail2ban 07/06/2026 Docker : comment récupérer de l'espace disque cache conteneurs debian 07/06/2026 Graylog 7 — Centralisation et analyse de logs : l'alternative à ELK sur Debian/Ubuntu centralisation debian elk 07/06/2026 OpenZFS : tiering avec L2ARC et SLOG pour les workloads mixtes cache l2arc nvme 07/06/2026 Scripting Bash avancé — pièges, bonnes pratiques et optimisation automatisation bash bonnes-pratiques 07/06/2026 AppArmor sur Debian/Ubuntu : profils, modes et confinement applicatif apparmor audit confinement 07/06/2026 Durcissement SSH — au-delà des clés publiques 2fa authentification cryptographie 27/05/2026 LXD 6.x : orchestration de conteneurs Linux avec profils et clustering administration clustering conteneurs 27/05/2026 Keepalived — VIP flottante et load balancing sans matériel dédié debian failover haute-disponibilité 27/05/2026 Btrfs sur Linux — snapshots, sous-volumes et compression en pratique administration btrfs compression 21/05/2026 CVE-2026-42945 (NGINX Rift) : analyse et remédiation sur Debian/Ubuntu cve debian heap-overflow 21/05/2026 Tuning kernel Linux — paramètres sysctl essentiels pour la production debian kernel mémoire 21/05/2026 DRBD : réplication de blocs entre deux serveurs en temps réel cluster debian drbd 15/05/2026 CVE-2026-23918 — vulnérabilité Apache 2.4.66 : analyse et correctifs sur Debian/Ubuntu (hors Debian 11) apache cve debian 15/05/2026 CVE-2026-31431 (Copy Fail) — Analyse et remédiation sur Debian/Ubuntu algif_aead copy-fail cve 12/05/2026 Pacemaker et Corosync — cluster haute disponibilité Linux cluster corosync debian 12/05/2026 WireGuard : monter un VPN mesh entre plusieurs serveurs Linux chiffrement linux mesh 12/05/2026 Netdata — monitoring temps réel sans configuration complexe alertes dashboard linux 12/05/2026 nftables en pratique — remplacer iptables sur Debian/Ubuntu debian firewall iptables 12/05/2026 Podman : alternative rootless à Docker — installation et migration conteneurs docker kubernetes 02/05/2026 Prometheus et Grafana sur Debian — installation, configuration et dashboards pratiques alertmanager dashboard debian 02/05/2026 Ansible : automatiser la gestion de serveurs Linux avec des playbooks administration ansible automation 28/04/2026 ZFS sur Linux : snapshots, clones et RAID-Z en pratique administration compression filesystem 28/04/2026 eBPF sur Linux : observabilité et traçage kernel avec bpftrace et BCC bcc bpftrace diagnostic 23/04/2026 Analyse de la mémoire sur Linux — vmstat, free, smem diagnostic mémoire monitoring 23/04/2026 Sécurité Linux — Firewall iptables et nftables firewall iptables nftables 23/04/2026 ZFS sur Linux — Installation et gestion avancée administration filesystem stockage 23/04/2026 Gestion des services avec systemd sur Debian et Ubuntu administration debian services 23/04/2026 Gestion des ressources cgroups v1/v2 avec LXC cgroups conteneurs lxc 23/04/2026 Centralisation logs avec ELK Stack — Elasticsearch, Kibana, Filebeat elasticsearch elk filebeat 23/04/2026 Supervision avec Zabbix 7.0 LTS sur Debian/Ubuntu debian monitoring supervision 23/04/2026 Plusieurs versions PHP-FPM sur Apache Debian/Ubuntu apache debian php-fpm 23/04/2026 Sécurisation avancée PHP-FPM — Multi-VirtualHosts Apache/Nginx apache nginx php-fpm 23/04/2026 Optimisation PHP-FPM — Guide de tuning d'un pool optimisation performance php-fpm 29/07/2025 Docker sur Debian/Ubuntu : Installation, Configuration et Utilisation conteneurs debian docker 03/07/2025 Serveur VPN WireGuard sous linux réseau sécurité vpn 03/07/2025 Authentification par clé publique sur un serveur SSH authentification cryptographie sécurité 27/06/2025 Surveillance et diagnostic d’un serveur Linux avec vmstat, iotop et htop diagnostic htop monitoring 27/06/2025 Mémoire : Utilisation des Huge Pages et implémentation hugepages mémoire noyau 27/06/2025 Mémoire Swap et paramétrage swappiness mémoire noyau performance 18/06/2025 Installation et Configuration des Conteneurs LXC sur Linux administration conteneurs lxc 18/06/2025 Gestion des journaux avec syslog et journalctl administration journalctl logs