Dans ce tutoriel, je vous propose de découvrir comment mettre en place un certificat TLS/SSL en utilisant Let's Encrypt sur un serveur apache.
Installation de l'outil
En plus d'être une autorité de certificat, Let's Encrypt offre un outil qui permet la mise en place automatique d'un certificat SSL pour votre nom de domaine. Pour installer cet outil, il va falloir commencer par cloner le dépôt GitHub.
Nous allons donc commencer par installer git sur notre serveur.
sudo apt-get update
sudo apt-get install git
Maintenant que nous disposons de git, nous allons pouvoir cloner le client Let's Encrypt depuis le dépôt Github officiel. Nous allons placer ce client dans le dossier /opt
de notre serveur.
sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt --depth=1
J'ai rajouté l'option depth=1
afin d'éviter de récupérer l'entièreté de l'historique git. Nous pourrons continuer à utiliser ce dépôt pour mettre à jour le client, mais nous n'avons pas besoin de revenir à des versions antérieures. Si plus tard on souhaite mettre à jour le client, il nous suffira de faire un pull :
cd /opt/letsencrypt
sudo git pull
Mise en place du certificat
Let's Encrypt dispose d'un mode automatique qui va installer les dépendances nécessaires à l'outil et mettre en place les certificats en fonction de votre configuration serveur. Cette installation automatique fonctionne dans le cadre d'un serveur Web apache. Si vous utilisez nginx par exemple, il faudra passer par une installation manuelle (le support de nginx est pour l'instant expérimental)
/opt/letsencrypt/letsencrypt-auto
Cette commande va s'occuper de tout pour vous, elle va commencer par installer les dépendances du client, elle va ensuite détecter les noms de domaine configurés sur votre serveur apache, demander les certificats pour ces derniers et enfin modifier la configuration de vos différents VirtualHosts afin de prendre en compte les nouveaux certificats installés. Il est cependant possible de préciser à Let's Encrypt les domaines manuellement
/opt/letsencrypt/letsencrypt-auto --authenticator standalone --installer apache -d mondomaine.fr --pre-hook "service apache2 stop" --post-hook "service apache2 start"
Les certificats générés, ainsi que les clés privées sont stockés dans le dossier /etc/letsencrypt/live/
. Let's Encrypt modifie vos virtual hosts apache en indiquant le chemin vers votre clé privée et votre certificat. Il inclue aussi un fichier options-ssl-apache.conf
qui permet de configurer le SSL pour apache (quel algorithme de chiffrage utiliser, quel type de clé supportée…). Si la configuration proposée par défaut ne vous convient pas, vous pouviez évidemment modifier le virtual host pour y mettre la configuration que vous souhaitez.
<IfModule mod_ssl.c>
<VirtualHost *:443>
...
SSLCertificateFile /etc/letsencrypt/live/domaine.fr/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domaine.fr/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
...
</VirtualHost>
</IfModule>
Le renouvellement
Les certificats proposés par Let's Encrypt sont valables pour une durée de 90 jours. Il faudra donc penser à les renouveler avant la fin de cette période. Pour cela on peut utiliser la commande :
/opt/letsencrypt/letsencrypt-auto --authenticator standalone --installer apache -d mondomaine.fr --pre-hook "service apache2 stop" --post-hook "service apache2 start" --renew-by-default
Cette commande renouvelle les certificats sans interaction de la part de l'utilisateur, vous pouvez donc la rajouter dans les tâches récurrentes de votre système afin de renouveler le certificat au bout d'une certaine période de temps (60 jours par exemple). Le problème avec cette tâche récurrente, c'est que si elle échoue pour une raison ou une autre alors notre certificat ne sera pas renouvelé à temps. Heureusement pour nous quelqu'un a déjà pensé à cette problématique et a créé un script permettant de renouveler un certificat si celui-ci est sur le point d'expirer.
sudo curl -L -o /usr/local/sbin/le-renew http://do.co/le-renew
sudo chmod +x /usr/local/sbin/le-renew
sudo le-renew domaine.fr
Ce script peut être mis en tâches récurrentes une fois par semaine, il vérifiera que le certificat en question est toujours valable, et si ce n'est pas le cas il demandera alors le renouvellement. L'avantage est que si votre commande échoue une fois, elle sera lancée la semaine suivante et votre certificat ne risque pas d'arriver à expiration.
sudo crontab -e
0 3 * * 1 /usr/local/sbin/le-renew domaine.fr >> /var/log/le-renew.log