Un certificat TLS signé par une autorité reconnue est indispensable pour exposer un service web sur votre VPS Linux : sans lui, les navigateurs affichent une erreur de sécurité et votre API, panneau d'administration ou application web est inaccessible en HTTPS. Let's Encrypt délivre des certificats SSL/TLS X.509 gratuits assurant l'authentification et le chiffrement, valides 90 jours et renouvelables automatiquement grâce à l'outil Certbot. Ce tutoriel couvre l'installation de Certbot sur Ubuntu et Debian depuis la ligne de commande, les quatre modes d'obtention du certificat, les configurations Nginx et Apache (hôte virtuel, port 443, redirection), le renouvellement automatique via systemd timer et scripts hooks, et les vérifications post-installation. Pour publier un service derrière un reverse proxy Nginx en HTTPS, consultez aussi publier un service sur un VPS Linux en HTTPS.
Prérequis avant d'obtenir un certificat Let's Encrypt
Let's Encrypt utilise le protocole ACME pour vérifier que vous contrôlez bien le nom de domaine pour lequel vous demandez un certificat. Trois conditions doivent être remplies avant de lancer Certbot sur votre serveur VPS Linux :
- Un nom de domaine valide pointant sur l'adresse IP publique de votre VPS Linux. Un enregistrement DNS de type A doit exister et être propagé (vérifiez avec
dig +short votre-domaine.com). - Le port 80 accessible depuis Internet pour le challenge HTTP-01 (mode standalone) ou le port 443 pour TLS-ALPN-01. Si vous utilisez un pare-feu UFW, ouvrez le port :
sudo ufw allow 80. Consultez le guide ouvrir les ports d'un serveur Linux avec UFW si vous débutez avec le pare-feu. - Un système Ubuntu ou Debian récent avec accès sudo et un serveur web installé (Nginx ou Apache). Les commandes de ce guide ont été testées sur Ubuntu 24.04 et Ubuntu 26.04 LTS (Certbot 4.0.0).
Installer Certbot sur Ubuntu ou Debian
Certbot est disponible dans les dépôts officiels des distributions Ubuntu et Debian. Sur Ubuntu 26.04, la version 4.0.0 est incluse. Les configurations de Certbot sont stockées dans /etc/letsencrypt/.
# Mettre à jour les paquets et installer Certbot avec le plugin Nginx
sudo apt update
sudo apt install -y certbot python3-certbot-nginx
Pour les serveurs web Apache, installez le module dédié :
sudo apt install -y certbot python3-certbot-apache
Vérifiez l'installation depuis la ligne de commande :
certbot --version
# certbot 4.0.0
Sur Ubuntu 26.04, Certbot 4.0 crée automatiquement un systemd timer pour le renouvellement des certificats. Vérifiez qu'il est actif :
sudo systemctl list-timers | grep certbot
Mode Nginx : certificat SSL avec configuration automatique de l'hôte virtuel
C'est le mode le plus simple si Nginx est déjà installé sur votre VPS Linux avec un hôte virtuel et un bloc server_name configuré pour votre domaine. Certbot modifie automatiquement les fichiers de configuration Nginx pour ajouter l'écoute sur le port 443 et la redirection HTTP vers HTTPS.
# Remplacez votre-domaine.com par votre vrai nom de domaine
sudo certbot --nginx -d votre-domaine.com -d www.votre-domaine.com \
--non-interactive --agree-tos -m admin@votre-domaine.com
Certbot effectue les opérations suivantes :
- Vérification de la propriété du domaine via un challenge HTTP-01.
- Obtention du certificat SSL auprès des serveurs Let's Encrypt.
- Modification des configurations Nginx pour ajouter les directives SSL sur le port 443.
- Ajout d'une redirection HTTP vers HTTPS dans l'hôte virtuel existant.
Les fichiers du certificat SSL sont stockés dans les répertoires /etc/letsencrypt/live/votre-domaine.com/ :
fullchain.pem: le certificat complet (certificat + chaîne intermédiaire).privkey.pem: la clé privée (accessible uniquement par root).cert.pem: uniquement le certificat du domaine.chain.pem: uniquement la chaîne intermédiaire.
Les logs des opérations Certbot sont disponibles dans /var/log/letsencrypt/letsencrypt.log ; consultez-les en cas d'erreur pendant les configurations du serveur.
Mode Apache : certificat SSL avec module Apache
Si vous utilisez les serveurs web Apache sur votre VPS Linux, le module python3-certbot-apache gère automatiquement la configuration de l'hôte virtuel et l'activation du module SSL. Le comportement est similaire au mode Nginx.
# Activer le module SSL d'Apache si ce n'est pas déjà fait
sudo a2enmod ssl
sudo systemctl restart apache2
# Obtenir le certificat SSL via Certbot pour Apache
sudo certbot --apache -d votre-domaine.com -d www.votre-domaine.com \
--non-interactive --agree-tos -m admin@votre-domaine.com
Certbot crée automatiquement un fichier de configuration dédié /etc/apache2/sites-available/votre-domaine.com-le-ssl.conf avec les directives SSLCertificateFile et SSLCertificateKeyFile pointant vers les répertoires Let's Encrypt. Pour désactiver le site HTTP après l'installation : sudo a2dissite votre-domaine.com.conf && sudo systemctl reload apache2.
Mode standalone : sans serveur web en cours d'exécution
Le mode standalone est utile lorsqu'aucun serveur web n'est encore en place. Certbot lance un mini-serveur HTTP temporaire sur localhost (port 80) pour répondre au challenge ACME.
# Le port 80 doit être libre : arrêtez d'abord Nginx ou Apache si nécessaire
sudo systemctl stop nginx
# Obtenir le certificat en mode standalone
sudo certbot certonly --standalone -d votre-domaine.com \
--agree-tos -m admin@votre-domaine.com
# Redémarrer Nginx après l'obtention
sudo systemctl start nginx
Après l'obtention, les fichiers du certificat sont disponibles dans les répertoires /etc/letsencrypt/live/. Vous devez ensuite adapter vos configurations pour le serveur web ou l'application.
Mode webroot : sans interrompre les serveurs web
Le mode webroot convient lorsque Nginx ou Apache est en fonctionnement. Certbot place un fichier de validation dans un répertoire accessible via HTTP, que Let's Encrypt récupère pour valider la propriété du domaine.
sudo certbot certonly --webroot \
--webroot-path /var/www/html \
-d votre-domaine.com \
--agree-tos -m admin@votre-domaine.com
Le répertoire /var/www/html doit correspondre au root de l'hôte virtuel Nginx ou Apache. Le serveur doit servir les fichiers du chemin /.well-known/acme-challenge/ sans redirection vers HTTPS. Désactivez les redirections dans les fichiers de configuration si nécessaire avant d'exécuter la commande.
Renouvellement automatique avec systemd timer
Les certificats SSL Let's Encrypt expirent après 90 jours. Certbot renouvelle automatiquement les certificats 30 jours avant leur expiration via un timer systemd créé à l'installation. Vérifiez qu'il est opérationnel :
sudo systemctl status certbot.timer
Testez le processus de renouvellement depuis la ligne de commande sans modifier aucun certificat :
sudo certbot renew --dry-run
Pour les modes nécessitant l'arrêt des serveurs web, configurez des hooks :
# Renouvellement avec arrêt/démarrage de Nginx (mode standalone)
sudo certbot renew \
--pre-hook "systemctl stop nginx" \
--post-hook "systemctl start nginx"
# Renouvellement avec rechargement Nginx ou Apache
sudo certbot renew --deploy-hook "systemctl reload nginx"
Pour rendre un hook permanent, créez un script dans les répertoires /etc/letsencrypt/renewal-hooks/deploy/ et rendez-le exécutable : sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh.
Vérifier le certificat SSL installé
Une fois le certificat SSL obtenu, vérifiez qu'il est correctement servi par votre serveur web depuis un poste extérieur à votre VPS Linux :
# Vérifier la date d'expiration et le nom du domaine
openssl s_client -connect votre-domaine.com:443 -servername votre-domaine.com \
< /dev/null 2>&1 | openssl x509 -noout -dates -subject
Vous devriez voir une ligne notAfter à 90 jours et le subject correspondant à votre domaine. Pour une vérification complète de vos certificats TLS, consultez vérifier l'expiration d'un certificat TLS avec openssl s_client.
Gérer plusieurs domaines et sous-domaines
Certbot permet d'inclure plusieurs domaines dans un même certificat SAN (Subject Alternative Names) ou d'obtenir plusieurs certificats indépendants sur un même VPS Linux :
# Certificat couvrant plusieurs sous-domaines (SAN)
sudo certbot --nginx -d votre-domaine.com -d www.votre-domaine.com \
-d api.votre-domaine.com -d admin.votre-domaine.com
# Lister tous les certificats SSL installés
sudo certbot certificates
Pour révoquer et supprimer un certificat :
# Révoquer un certificat SSL (attention : irréversible)
sudo certbot revoke --cert-name votre-domaine.com
# Supprimer les fichiers sans révoquer
sudo certbot delete --cert-name votre-domaine.com
Dépannage des erreurs courantes
Voici les erreurs les plus fréquentes lors de l'obtention d'un certificat Let's Encrypt sur un serveur VPS Linux :
- Challenge HTTP-01 failed : le serveur Let's Encrypt ne peut pas atteindre le port 80. Vérifiez vos règles de pare-feu (
sudo ufw status) et que le DNS pointe bien sur l'IP publique. Testez aveccurl -I http://votre-domaine.com. Vérifiez aussi les connexions entrantes avec lister les ports en écoute avec ss. - Error: Problem binding to port 80 (mode standalone) : un processus occupe déjà le port 80. Identifiez-le avec
sudo ss -lntp | grep :80et arrêtez-le avant de relancer Certbot. - Too many certificates already issued : Let's Encrypt limite à 5 certificats par domaine par semaine. Utilisez l'environnement de staging pour vos tests : ajoutez
--stagingà la commande Certbot. - Certificate not yet due for renewal lors de
certbot renew: normal, Certbot ne renouvelle que si l'expiration est à moins de 30 jours. La commande--dry-runsimule le processus. - Permission denied sur les fichiers du certificat : le répertoire
/etc/letsencrypt/live/n'est accessible que par root. Ajoutez l'utilisateur du serveur Apache ou Nginx au groupecertbotviasudo usermod -aG certbot www-data.
Pour analyser les logs Certbot en détail : sudo journalctl -u certbot ou sudo cat /var/log/letsencrypt/letsencrypt.log. Pour aller plus loin dans la sécurisation de votre VPS Linux avec un firewall applicatif, consultez installer et configurer Fail2ban sur un VPS Linux. Pour automatiser d'autres tâches d'administration sur votre VPS, lisez automatiser les mises à jour de sécurité sur un VPS Ubuntu.
Vous souhaitez un VPS Linux avec une adresse IP dédiée et toute la puissance nécessaire pour héberger vos applications web en HTTPS avec Let's Encrypt ?
Découvrir les VPS Linux ElypseCloud