Installer un certificat SSL gratuit avec Let's Encrypt et Certbot

Publié le Mis à jour le 5 min de lecture

Certificat SSL gratuit pour votre serveur Linux : voici comment installer Certbot sous Debian et Ubuntu, émettre un certificat Let's Encrypt pour Apache et le faire renouveler automatiquement.

Un certificat SSL de Let's Encrypt ne coûte rien, se met en place en quelques minutes et il est accepté par tous les navigateurs courants. Dans ce guide, vous activez HTTPS sur votre propre serveur Linux avec Apache : sous Debian 13, Debian 12, Ubuntu 24.04 LTS et Ubuntu 22.04 LTS.

L'émission du certificat est assurée par Certbot, le client ACME officiel de l'Electronic Frontier Foundation. Certbot demande le certificat, l'inscrit dans la configuration Apache, puis le renouvelle ensuite tout seul grâce à un timer systemd.

Prérequis

  • Un domaine dont l'enregistrement A (et en IPv6 également l'enregistrement AAAA) pointe vers votre vServer ou votre serveur root.
  • Un serveur web Apache2 en fonctionnement, avec un VirtualHost pour ce domaine.
  • Un accès root via SSH.
  • Le port 80 et le port 443 doivent être joignables depuis l'extérieur. Let's Encrypt vérifie le domaine via le port 80.

Vérifiez d'abord que le domaine pointe réellement vers votre serveur. Saisissez pour cela votre domaine sur https://check-host.net/. Si l'adresse IP de votre serveur y apparaît, vous pouvez continuer. Si le DNS pointe encore vers une ancienne cible, attendez la mise à jour, sinon l'émission échouera.

Mettre le système à jour

Commencez par actualiser la liste des paquets ainsi que les paquets installés :

apt update && apt upgrade -y

Installer Certbot

Il existe deux voies habituelles. Le paquet de la distribution est la plus simple et suffit largement pour la plupart des serveurs. Le paquet Snap fournit toujours la version la plus récente de Certbot et il est officiellement recommandé par l'Electronic Frontier Foundation.

Variante 1 : Certbot depuis le dépôt de la distribution

Sous Debian et Ubuntu, Certbot et le plugin Apache se trouvent directement dans les sources de paquets :

apt install certbot python3-certbot-apache -y

Le paquet « python-certbot-apache », autrefois très répandu, appartenait à Python 2 et n'existe plus. Sur toutes les versions actuelles de Debian et d'Ubuntu, le nom de paquet correct est « python3-certbot-apache ».

Variante 2 : installer Certbot via snap

Si vous souhaitez disposer à chaque fois de la version la plus récente de Certbot, par exemple pour les plugins DNS ou les certificats wildcard, installez Certbot sous forme de Snap. Supprimez auparavant une éventuelle installation par paquet, afin que les deux ne se marchent pas dessus :

apt remove certbot -y
snap install core
snap refresh core
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot

Émettre le certificat et l'intégrer à Apache

La voie la plus rapide passe par le plugin Apache. Certbot lit les VirtualHosts existants, demande le certificat et écrit lui-même la configuration SSL adaptée :

certbot --apache -d MonDomaine.fr -d www.MonDomaine.fr

Si vous préférez garder la main sur la configuration Apache, vous pouvez faire passer la vérification du domaine par le répertoire webroot. Indiquez alors exactement le répertoire que le VirtualHost utilise comme DocumentRoot :

certbot --authenticator webroot --installer apache -w /var/www/MonDomaine.fr -d MonDomaine.fr -d www.MonDomaine.fr

Si votre site se trouve dans le répertoire par défaut, la commande est la suivante :

certbot --authenticator webroot --installer apache -w /var/www/html/ -d MonDomaine.fr -d www.MonDomaine.fr

Les questions posées par Certbot

Au premier lancement, Certbot pose quelques questions :

  • Adresse e-mail : indiquez une adresse que vous consultez vraiment. C'est par ce biais que Let's Encrypt vous prévient si un renouvellement n'a pas lieu.
  • Conditions d'utilisation : avec « A », vous les acceptez.
  • Newsletter de l'Electronic Frontier Foundation : « Y » pour oui, « N » pour non. C'est facultatif et sans aucune influence sur le certificat.
  • Redirection vers HTTPS : choisissez l'option « Redirect » pour qu'Apache redirige automatiquement tous les appels HTTP vers HTTPS.

Certbot affiche ensuite le chemin du certificat. Les fichiers se trouvent dans /etc/letsencrypt/live/MonDomaine.fr/. Ne modifiez pas ces fichiers à la main, ils sont réécrits à chaque renouvellement.

Vérifier le renouvellement automatique

Un certificat de Let's Encrypt est valable 90 jours. Certbot le renouvelle automatiquement dès qu'il reste moins de 30 jours de validité. Le paquet fournit pour cela un timer systemd. Vérifiez qu'il est bien actif :

systemctl list-timers certbot.timer

Si le timer n'est pas actif, activez-le :

systemctl enable --now certbot.timer

Testez ensuite le déroulement à blanc. Rien n'est émis à cette occasion, Certbot ne fait que simuler le renouvellement :

certbot renew --dry-run

Pour qu'Apache utilise vraiment le nouveau certificat après un renouvellement, enregistrez une fois pour toutes un deploy-hook :

certbot renew --deploy-hook "systemctl reload apache2"

Afficher et supprimer des certificats

Pour obtenir une vue d'ensemble de tous les certificats gérés sur le serveur :

certbot certificates

Voici comment supprimer un certificat dont vous n'avez plus besoin, afin que Certbot n'essaie plus de le renouveler :

certbot delete --cert-name MonDomaine.fr

Erreurs fréquentes

  • « Could not bind to port 80 » : un autre service occupe le port 80. Arrêtez-le ou utilisez la méthode webroot, qui s'appuie sur l'Apache déjà en cours d'exécution.
  • « Invalid response from http://.../.well-known/acme-challenge/... » : le domaine ne pointe pas vers ce serveur, un pare-feu bloque le port 80, ou le répertoire webroot indiqué ne correspond pas au VirtualHost.
  • « The requested apache plugin does not appear to be installed » : le paquet « python3-certbot-apache » est manquant.
  • « too many certificates already issued » : vous avez atteint une limite de Let's Encrypt. Testez désormais vos configurations avec --dry-run avant de demander un vrai certificat.
  • Le navigateur affiche encore un avertissement : videz le cache du navigateur et vérifiez qu'Apache a bien été rechargé après l'émission.

Rediriger HTTP vers HTTPS de façon permanente

Si vous n'avez pas activé la redirection lors des questions de Certbot, vous pouvez l'ajouter à tout moment. Nous décrivons dans un article dédié comment procéder à l'aide d'un fichier .htaccess, consacré à la redirection de HTTP vers HTTPS.

Questions fréquentes

Combien coûte un certificat SSL de Let's Encrypt ?
Rien. Let's Encrypt est une autorité de certification à but non lucratif qui délivre ses certificats gratuitement. Il n'y a ni frais unique ni frais récurrent.
Quelle est la durée de validité d'un certificat Let's Encrypt ?
90 jours. Certbot le renouvelle automatiquement dès qu'il reste moins de 30 jours de validité. Le timer systemd qui s'en charge est mis en place lors de l'installation.
Dois-je renouveler le certificat à la main ?
Non. Vérifiez une seule fois avec certbot renew --dry-run que le renouvellement se déroule correctement. Ensuite, Certbot s'en occupe tout seul en arrière-plan.
Let's Encrypt fonctionne-t-il aussi pour les sous-domaines ?
Oui. Il suffit d'ajouter les autres noms à la commande avec des paramètres -d supplémentaires. Un certificat wildcard exige en plus une vérification par enregistrement DNS, et donc un plugin DNS adapté pour Certbot.
Pourquoi la vérification du domaine échoue-t-elle ?
Dans la quasi-totalité des cas, l'enregistrement A du domaine ne pointe pas vers ce serveur, ou un pare-feu bloque le port 80. Let's Encrypt n'atteint alors pas le serveur et interrompt l'émission.

Lets-Encrypt Certbot Certificat SSL HTTPS Apache Debian Ubuntu