Dans ce tutoriel, je vous propose de découvrir comment mettre en place un certificat TLS/SSL en utilisant Let's Encrypt pour un serveur nginx.
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.
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.
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 :
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 mais reste expérimentale pour nginx. Nous allons donc utiliser let's encrypt pour la génération de certificat seulement.
Afin de vérifier que vous êtes bien le possesseur du nom de domaine pour lequel vous souhaitez obtenir un certificat, Let's Encrypt va générer un fichier sur votre serveur et va ensuite essayer d'y accéder depuis leur serveur. Pour distribuer ce fichier, il est possible d'utiliser un serveur Web interne à Let's Encrypt, mais on peut aussi choisir d'utiliser notre propre serveur Web (ici nginx). C'est cette seconde méthode que l'on va choisir ici car nous ne souhaitons pas interrompre nginx pendant la phase de génération et d'obtention du certificat. Nous allons modifier la configuration de notre virtual host nginx :
Une fois nginx configuré pour renvoyer les fichiers contenus dans ce dossier on peut alors utiliser le module webroot pour générer le certificat :
Les certificats générés, ainsi que les clés privées sont stockés dans le dossier /etc/letsencrypt/live/. Il va ensuite falloir modifier notre configuration nginx pour prendre en compte ces certificats. Une configuration plus complète avec l'utilisation de PHP est disponible sur Github
Enfin pour générer les clefs utilisées pour les sessions et le Diffie-Helman (soyez patient :))
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 :
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. Cette commande vérifie la date d'expiration avant de lancer la procédure alors on peut la programmer de manière hebdomadaire