Let’s Encrypt est une nouvelle autorité de certification (CA en Anglais) qui permet d’obtenir simplement des certificats TLS/SSl gratuits.

Dans cet article découvrez comment utiliser Let’s Encrypt pour obtenir un certificat SSL gratuit et l’utiliser avec Nginx sur Ubuntu 16.04. Nous verrons par la suite comment renouveler le certificat de manière automatique.

 

1. Installer le client Let’s Encrypt

Avant de commencer l’installation vous devez posséder un nom de domaine valide sur lequel vous désirez activer l’accès en HTTPS. Ce domaine doit avoir été configuré pour pointer sur l’adresse IP de votre VPS. Par exemple si vous désirez activer un certificat pour le domaine « testlws.fr » et que votre VPS possède l’adresse IP « 192.162.71.144 », il faudra que « testlws.fr » et « www.testlws.fr » pointe sur « 192.162.71.144 ».

Tout au long de cet article nous utiliserons le domaine de test : testlws.fr

La première étape consiste à installer le logiciel Let’s Encrypt sur votre serveur.

Assurez vous que l’utilitaire « git » est bien installé :

apt-get update && apt-get install git

Nous pouvons ainsi cloner le dépôt Let’s Encrypt.

cd /opt/ && git clone https://github.com/letsencrypt/letsencrypt

Vous avez désormais une copie de Let’s Encrypt dans votre répertoire /opt.letsencrypt

2. Obtenir un certificat SSL

Let’s Encrypt vous permet de créer un certificat SSL de nombreuses façons différentes. Et ce grâce à différents plugins.
Ces plugins vont servir à obtenir un certificat, qu’il faudra installer manuellement.

Ici nous allons utiliser le plugin « Webroot« .

Le plugin Webroot fonctionne en plaçant un fichier spécial dans le répertoire .well-known qui sera créé à la racine du serveur Web. C’est pour cette raison qu’il est nécessaire d’avoir un domaine fonctionnel pour pouvoir obtenir un certificat avec Let’s Encrypt.

Nous partirons du principe que vous avez déjà installé Nginx. Ensuite il est nécessaire d’adapter sa configuration pour pouvoir faire la vérification expliquée ci-dessous.

On édite le fichier /etc/nginx/sites-available/default :

nano /etc/nginx/sites-available/default

Puis on ajoute ceci dans la section « server » :

location ~ /.well-known {
allow all;
}

On redémarre le service Nginx :

/etc/init.d/nginx restart

Nous pouvons désormais demander un certificat avec la commande suivante. Assurez vous de renseigner le domaine à la fois sous la forme testlws.fr et sous la forme www.testlws.fr.

cd /opt/letsencrypt
./letsencrypt-auto certonly -a webroot --webroot-path=/var/www/html -d testlws.fr -d www.testlws.fr

Ici nous partons du principe que le répertoire racine du serveur Web Nginx est /var/www/html.
Quelques informations vont vous être demandées, comme une adresse email (renseignez une adresse valide) :

let1

Ou d’accepter les termes d’utilisation du service :

let2

Une fois l’exécution du programme terminée, vous recevrez ce message :

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/testlws.fr/fullchain.pem. Your cert will
expire on 2016-11-22. To obtain a new or tweaked version of this
certificate in the future, simply run letsencrypt-auto again. To
non-interactively renew *all* of your certificates, run
"letsencrypt-auto renew"
- If you lose your account credentials, you can recover through
e-mails sent to contact@testlws.fr.
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

Votre certificat est alors créé et accessible dans le répertoire /etc/letsencrypt/live/testlws.fr/.

3. Configurer TLS/SSL sur le serveur web Nginx

Il faut désormais configurer Nginx pour pouvoir utiliser ce certificat.

Éditez le fichier /etc/nginx/sites-available/default :

nano /etc/nginx/sites-available/default

Dans la section « server », supprimez les lignes qui concernent le port 80 :

# listen 80 default_server;
# listen [::]:80 default_server ipv6only=on;

Remplacez-les par ceci :

listen 443 ssl;
server_name testlws.fr www.testlws.fr;
ssl_certificate /etc/letsencrypt/live/testlws.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/testlws.fr/privkey.pem;

Activez le port 443 et indiquez à Nginx le chemin vers les fichiers du certificat.

Ensuite en dehors de la première section « server« , créez-en une seconde pour rediriger le trafic HTTP vers le HTTPS :

server {
listen 80;
server_name testlws.fr www.testlws.fr;
return 301 https://$host$request_uri;
}

Relancez le service Nginx :

/etc/init.d/nginx restart

L’accès HTTPS est maintenant en place. Nous pouvons le tester avec L’URL suivante :

https://testlws.fr

4. Configurer le renouvellement automatique

La dernière étape consiste à mettre en place une tâche cron pour renouveler automatiquement votre certificat. En effet Let’s Encrypt ne fournit que des certificats avec une durée de validité de trois mois.

Créez le crontab :

crontab -e
30 2 1 * * /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log
35 2 1 * * /etc/init.d/nginx reload

La commande /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log, va renouveler vos certificats tous les premiers du mois à 02h30 du matin.
Le retour de la commande sera écrit dans le fichier /var/log/le-renew.log.