Certificats HTTPS gratuits avec Let's Encrypt
Let's Encrypt est une autorité de certification qui délivre des certificats HTTPS gratuits pour votre domaine. Sur votre VPS, vous pouvez obtenir un certificat avec quelques commandes en utilisant Certbot, ou sans aucune commande avec Caddy, et les deux le renouvellent tout seuls. Il y a deux conditions : le domaine doit pointer vers l'adresse IP de votre serveur, et les ports 80 et 443 doivent être ouverts depuis l'extérieur.
Pourquoi avez-vous besoin de HTTPS ?
HTTPS chiffre le trafic entre le navigateur et le serveur. Des tiers sur le réseau ne peuvent pas lire le mot de passe d'un formulaire de connexion ni les détails d'une commande. Les navigateurs peuvent afficher un avertissement « non sécurisé » sur les sites sans HTTPS. Un certificat Let's Encrypt est gratuit : il n'y a donc plus de bonne raison de se passer de HTTPS.
Avant de commencer
- L'enregistrement A du domaine doit indiquer l'adresse IP de votre serveur. Pour vérifier, exécutez
dig +short example.com. Le résultat doit être l'adresse IP de votre serveur. - Les ports 80 et 443 doivent être ouverts, car la validation se fait sur le port 80 (HTTP-01). Si vous utilisez ufw, exécutez
sudo ufw allow 80/tcpetsudo ufw allow 443/tcp. Si votre serveur a un pare-feu distinct dans son panneau, vérifiez aussi les règles à cet endroit. - Si le domaine a un enregistrement AAAA (IPv6), il doit lui aussi pointer vers ce serveur. Sinon, supprimez l'enregistrement.
- Votre serveur web doit être en marche et connaître ce domaine.
Installer et vérifier avec Certbot sur Nginx ou Apache
Les instructions officielles de Certbot recommandent le paquet snap. Assurez-vous que snapd est installé sur le serveur (sous Ubuntu, c'est généralement le cas) et supprimez tout ancien Certbot installé via apt.
- Installez Certbot :
sudo snap install --classic certbot - Rendez la commande disponible partout :
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot - Obtenez le certificat et faites-le installer dans le serveur web. Exécutez
sudo certbot --nginxpour Nginx ousudo certbot --apachepour Apache. - Répondez aux questions : votre adresse e-mail, les domaines pour lesquels vous voulez le certificat, et s'il faut rediriger HTTP vers HTTPS.
- Essayez le renouvellement :
sudo certbot renew --dry-run
Si vous voulez seulement obtenir le certificat et tout configurer vous-même, exécutez sudo certbot certonly --nginx. Le paquet Certbot ajoute de lui-même une tâche planifiée (cron ou minuteur systemd), visible dans la sortie de systemctl list-timers. sudo certbot certificates liste vos certificats et leurs dates d'expiration. Certbot renouvelle un certificat quand sa durée de vie s'épuise, et vous n'avez rien à faire. Un renouvellement peut tout de même échouer un jour (par exemple à cause d'une règle de pare-feu) : exécutez donc --dry-run de temps en temps.
Pour vérifier le certificat, regardez d'abord l'icône de cadenas dans la barre d'adresse du navigateur. Pour voir la date d'expiration avec une commande, exécutez :
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates
La ligne notAfter du résultat est la date d'expiration du certificat. Si vous n'utilisez pas la redirection ajoutée par Certbot, redirigez vous-même HTTP vers HTTPS. Sous Nginx, ajoutez la ligne return 301 https://$host$request_uri; au bloc server qui écoute sur le port 80.
Avec Caddy et sans commande
Si vous utilisez Caddy, vous n'avez rien de plus à installer. Pour un domaine présent dans sa configuration, Caddy obtient le certificat auprès de Let's Encrypt ou de ZeroSSL, le renouvelle et redirige HTTP vers HTTPS. Selon sa documentation officielle, les enregistrements A et AAAA du domaine doivent pointer vers le serveur, les ports 80 et 443 doivent être accessibles depuis l'extérieur, et le dossier de données de Caddy doit être persistant et accessible en écriture. Si vous faites tourner Caddy dans Docker, montez ce dossier sur un volume. Sinon, les certificats disparaissent quand le conteneur est supprimé, et les redemander peut atteindre une limite de débit.
Certificats wildcard
Un certificat wildcard (*.example.com) couvre tous les sous-domaines avec un seul certificat, et il ne s'obtient qu'avec la validation DNS-01. Cette validation n'utilise pas le port 80. Elle vous demande de placer un enregistrement TXT dans le DNS de votre domaine. Pour cela, votre fournisseur DNS doit proposer une API, et vous stockez la clé d'API sur le serveur. La documentation de Let's Encrypt juge risqué de stocker de telles clés sur un serveur web. Si vous n'avez pas besoin d'un wildcard, obtenir des certificats pour chaque domaine avec HTTP-01 est plus simple et n'oblige pas à stocker de clé DNS.
Erreurs courantes
| Symptôme | Cause probable | Solution |
|---|---|---|
| La validation échoue, domaine introuvable | L'enregistrement A pointe vers la mauvaise IP ou ne s'est pas encore propagé | Vérifiez l'IP avec dig +short example.com et patientez |
| Délai dépassé | Le port 80 est fermé | Ouvrez le 80 dans ufw et dans le pare-feu du panneau, si vous en avez un |
| La validation réussit parfois et échoue d'autres fois | L'enregistrement AAAA pointe vers un autre serveur | Corrigez ou supprimez l'enregistrement AAAA |
| Erreur de limite de débit | Trop de tentatives | Utilisez --dry-run pour les tests et consultez la page officielle pour les limites |
| Le renouvellement ne s'exécute pas | Pas de tâche planifiée, ou le serveur web bloque le port 80 | sudo certbot renew --dry-run affiche l'erreur |
Le message d'erreur indique généralement quelle validation a échoué et quelle adresse de votre serveur Let's Encrypt a tenté d'atteindre. Lisez le message tel quel. La réponse s'y trouve souvent.
Selon la page officielle de Let's Encrypt, il existe une limite de 5 certificats par semaine pour un même ensemble de noms de domaine et de 5 validations échouées par heure pour un même nom de domaine. Utilisez donc --dry-run pendant vos essais. Il tente le renouvellement dans l'environnement de test (staging) et ne consomme pas votre vraie limite.
Sur les applications prêtes à l'emploi de Seturack
Les applications prêtes à l'emploi (WordPress, Nextcloud et d'autres) s'ouvrent en HTTPS sur une adresse sslip.io dérivée de votre adresse IP, sans nom de domaine nécessaire. Quand vous raccordez votre propre domaine, Caddy obtient de nouveau le certificat, et vous n'installez rien de plus. Les étapes pour faire connaître le domaine à Caddy et à l'application figurent dans cet article d'aide.
Commentaires0
Pas encore de commentaire
Soyez le premier à partager votre avis.
Veuillez vous connecter ou vous inscrire pour laisser un commentaire.