Passer vos sites sous HTTPS avec apache et Let’s Encrypt
Aujourd’hui, il est de plus en plus nécessaire de mettre vos sites sous HTTPS afin d’améliorer votre référencement, protéger vos utilisateurs, protéger vos données mais aussi par exemple pour pouvoir utiliser la géolocalisation. Pourtant jusqu’à présent le passage sous HTTPS d’un site demandait beaucoup d’effort et des moyens financiers important notamment pour l’achat du certificat et son renouvellement. Avec Let’s Encrypt, il est possible de passer son site sous HTTPS avec un certificat d’autorité de manière vraiment très simple et gratuitement.
Comment fonctionne le HTTPS ?
Voici un grossier schéma sur comment votre navigateur va établir une connexion sécurisée avec un serveur HTTP :
- Demande de connexion au serveur en HTTPS
- Envoi du certificat au navigateur
- Le navigateur vérifie le certificat auprès d’une autorité de confiance
- L’autorité valide le certificat
- Le navigateur transmet au serveur une clef de chiffrement, crypté via le certificat, utilisée pour la suite de la connexion
- Le communication continue avec la clef de chiffrement
Dans notre cas, l’autorité de confiance sera Let’s Encrypt, qui fournit des certificats gratuitement, mais d’autres existent comme GlobalSign qui fournissent d’autres garantie de sécurité comme des certificats validant votre entité et votre adresse. Let’s Encrypt va, pour vous donner vos certificats, juste vérifier que les noms de domaines pour lesquels vous demandez des certificats pointent bien vers votre serveur.
Aujourd’hui, pour les navigateurs les plus communs les certificats valider par Let’s Encrypt suffisent donc pas besoin de plus, hormis si vous êtes une banques ou si vous en avez besoin dans le paiement en ligne. Maintenant voyons comment installer ces certificats.
Préparation du serveur
Pour commencer, nous allons tout d’abord activer le module SSL d’apache.
# a2enmod ssl # service apache2 restart
Puis vérifier qu’apache écoute bien désormais sur ce port :
$ nmap localhost | grep 443 443/tcp open https
Puis pour finir avec les préparatifs, nous ajouterons la règle suivante à iptables pour qu’il ouvre l’accès au port 443 depuis l’extérieur.
# /sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT $ sudo iptables -L | grep https ACCEPT tcp -- anywhere anywhere tcp dpt:https
Pour plus d’information sur iptables, je vous ai fait un article qui date un peu mais reste d’actualité : Mise en place d’iptables
Installation
Maintenant que l’ensemble du serveur est prêt, nous allons simplement demander à l’outil de Let’s Enscrypt de nous configurer notre serveur apache correctement. Attention, étant donné que Let’s Enscrypt vérifie que vos noms de domaine pointent bien sur le serveur faite en sorte que ce soit le cas ;).
L’installation de l’outil se fait directement grâce au système de paquet Debian.
# apt-get install python-certbot-apache
Création des certificats
Pour créer les certificats rien de plus simple que d’appeler l’utilitaire qui vous posera quelques questions comme quels domaines vous voulez sécurisez, souhaitez vous une redirection automatique du HTTP vers le HTTPS, …
# certbot --apache ...
Si vous avez des virtual host avec des variables ServerAlias vous pouvez expliciter votre demande pour les alias via la commande :
# certbot --apache -d garetacar.eu -d parks.perhonen.fr
Enfin les certificat sont valable uniquement 3 mois, il vous faut donc les renouveler régulièrement via la commande
# certbot renew
Voila vos sites sont maintenant accessible en HTTPS, merci Let’s Enscrypt.