ACLClouds
ACLClouds

Certificat HTTPS gratuit sur un VPS avec certbot

Installer certbot, obtenir un certificat Let’s Encrypt pour votre domaine, puis vérifier que le renouvellement automatique fonctionne.

Let’s Encrypt délivre des certificats TLS sans frais, valables 90 jours. Certbot automatise la demande et le renouvellement. Deux conditions : le nom de domaine doit déjà pointer vers votre VPS, et les ports 80 et 443 doivent être joignables depuis Internet.

  • Let’s Encrypt délivre des certificats gratuits valables 90 jours, que certbot renouvelle seul.
  • Le domaine doit déjà pointer vers le VPS, et les ports 80 et 443 doivent être ouverts.
  • Faites un essai de renouvellement avec --dry-run juste après l’installation.

Préparer le serveur

Certbot a besoin d’un nom qui résout vers le VPS (voir l’article sur les enregistrements A) et d’un serveur web qui écoute sur le port 80. Sur Debian ou Ubuntu, installez Nginx et certbot avec son plugin.

  • sudo apt update && sudo apt install -y nginx certbot python3-certbot-nginx
  • sudo ufw allow 'Nginx Full' si le pare-feu UFW est actif (sinon, ignorez cette ligne).
  • Vérifiez que le site répond en HTTP avant de continuer : curl -I http://exemple.fr.

Demander le certificat

Une seule commande configure Nginx et télécharge le certificat. Certbot propose ensuite de rediriger le HTTP vers le HTTPS : acceptez, sauf raison contraire.

  • sudo certbot --nginx -d exemple.fr -d www.exemple.fr
  • Les fichiers se trouvent dans /etc/letsencrypt/live/exemple.fr/ : fullchain.pem et privkey.pem.
  • Testez la configuration puis rechargez : sudo nginx -t && sudo systemctl reload nginx.

Vérifier le renouvellement

Un certificat expire après 90 jours. Les paquets Debian et Ubuntu installent un minuteur systemd qui tente le renouvellement deux fois par jour. Il suffit de vérifier qu’il fonctionne.

  • systemctl list-timers | grep certbot : le minuteur doit apparaître avec sa prochaine exécution.
  • sudo certbot renew --dry-run : simule un renouvellement sans modifier les certificats.
  • sudo certbot certificates : affiche la date d’expiration de chaque certificat.

Questions fréquentes

Pourquoi la demande échoue avec « Timeout during connect » ?

Le serveur de Let’s Encrypt n’atteint pas le port 80 : le DNS ne pointe pas encore vers le VPS, ou le pare-feu bloque la connexion. Vérifiez dig, puis sudo ufw status.

Faut-il un certificat par sous-domaine ?

Non. Un certificat couvre plusieurs noms. Ajoutez un -d par nom supplémentaire, par exemple -d exemple.fr -d www.exemple.fr, puis relancez la commande.

Peut-on obtenir un certificat pour un service qui n’écoute pas en HTTP ?

Oui, par validation DNS, en ajoutant un enregistrement TXT temporaire. La méthode dépend de votre fournisseur DNS : le plugin certbot correspondant doit être installé.