Pour débuter
Outils de base
VIM
06 min
SSH
14 min
rsync
20 min
Shell fish
13 min
Serveur HTTP
Apache
40 min
Nginx
30 min
PHP
NodeJS
Base de données
MySQL
15 min
Redis
08 min
Emails
HTTPS
FTP
ProFTPD
14 min
Sécurité
Pour le confort
Déploiement

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