Le HTTPS est en passe de devenir « obligatoire » dans les prochains mois, suite aux dernières annonce de Google à ce sujet
Si vous n’avez pas encore adopté ce nouveau standard, voici la marche à suivre pour générer un certificat HTTPS et le mettre en place sur Apache gratuitement et facilement
Let’s Encrypt est une autorité de certification gratuite, libre et automatisé, qui va vous fournir un certificat reconnu par les navigateurs, sans vous ruiner
Je vais parler ici de la mise en place d’un serveur HTTPS sur un serveur dédié, je n’ai encore jamais eu l’occasion d’essayer sur un mutualisé, j’imagine que cela dépend de votre hébergeur
Table des matières
Installation :
Le plus simple sur des serveurs de type Debian/Ubuntu, est d’installer certbot, qui va vous guide dans la création d’un certificat
Commencez par vous rendre sur le site de certbot : https://certbot.eff.org/
Indiquer votre système utilisé, et suivez les instructions pour l’installation
Par exemple si on utilise Apache sur Debian 9, il est indiqué d’installer le paquet certbot de cette manière :
$ sudo apt-get install python-certbot-apache -t stretch-backports
Demande de certificat :
Une fois certbot installé, nous allons pouvoir faire la demande de certificat à Let’s encrypt
Plusieurs choses à savoir :
- Certbot propose deux méthodes de vérification de la propriété du domaine :
- Webroot : vous indiquez l’emplacement de votre site (ex: /var/www/toto) et certbot va déposer un fichier sur votre site pour vérifier qu’il est bien hébergé à cet endroit
- Standalone : un serveur web temporaire va etre lancé pour vérifier que votre domaine pointe bien sur cette machine (pensez à couper apache avant)
- Il y a un nombre d’essais maximum par jour, donc n’essayez pas la version standalone 10 fois sans rien modifier, si votre apache n’etait pas eteint ca ne fonctionnera jamais, et votre création de certificat devra attendre
- Certbot va potentiellement modifier vos fichiers de configuration apache pour y ajouter le https, il peut être judicieux de faire un petit backup avant de se lancer 🙂
Ma méthode préférée pour éviter de couper apache, est d’utiliser le mode « webroot » si cela est possible
Dans ce cas la commande a taper une fois certbot installé est la suivante :
$ sudo certbot --authenticator webroot --installer apache
Un assistant va ensuite se lancer, et vous demander les informations nécessaires :
- Liste de vos noms de domaines et sous-domaines séparés par des virgules (pensez à inclure les versions avec et sans www si les deux sont utilisables)
- Emplacement du webroot (/var/www/html/votresite en général)
- S’il faut forcer une redirection vers HTTPS en cas d’utilisation d’HTTP (conseillé)
- Parfois une confirmation du fichier apache à créer/modifier sera demandée
Voila si tout s’est bien passé votre certificat a été généré, et votre site est désormais accessible en HTTPS
Configuration d’apache :
Si vous avez un problème ou que vous avez préféré faire la configuration d’apache manuellement, voici ce que vous devez mettre au minimum dans votre configuration des vhosts (/etc/apache2/sites-enabled/)
Pour le vhost concernant HTTP, on ajoute la redirection automatique vers l’équivalent en HTTPS :
<VirtualHost *:80> ServerName www.monsite.com ServerAlias monsite.com DocumentRoot /var/www/html/monsite/ RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L] </VirtualHost>
Il doit ensuite exister un vhost pour le HTTPS, qui ressemble en général à ca :
<VirtualHost *:443> ServerName www.monsite.com ServerAlias monsite.com DocumentRoot /var/www/html/monsite/ SSLEngine on SSLCertificateFile /etc/letsencrypt/live/monsite.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/monsite.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/monsite.com/chain.pem SSLVerifyClient none </VirtualHost>
Evidemment ce sont les lignes minimum à avoir, mais libre à vous d’ajouter d’autres directives dans vos vhosts suivant ce que vous voulez faire
Renouvellement du certificat :
Il faut savoir que votre certificat est valable 3 mois, il faudra donc penser à le renouveller régulièrement
Voici un exemple de commande pour le renouvellement (a adapter suivant votre installation) :
# sudo certbot renew --renew-hook 'service apache2 reload'
N’hésitez pas à créer un cron qui lancera cette commande régulièrement (tous les jours par exemple)
Le certificat sera ainsi renouvelé automatiquement dès que nécessaire