Bonjour et bienvenue sur ce nouveau tuto.

Aujourd’hui nous allons voir comment mettre en place des certificats SSL signés avec Let’s Encrypt.


Sommaire

  1. Installation et présentation de let’s encrypt
  2. Génération du certificat via let’s encrypt
  3. Configuration de base de nginx avec le certificat
  4. Vérifier la configuration
  5. SUPPLEMENT – Renouveler son certificat

 


I – Installation et présentation de Let’s Encrypt

 

Let’s Encrypt est une organisation non lucrative qui permet de délivrer des certificats SSL signés et gratuits. Vous trouverez plus d’informations sur leur site : https://letsencrypt.org/. Pour les personnes encore novices avec la notion de certificats SSL je vous laisse vous renseigner sur Internet avant de suivre ce tuto, cela devrait vous aider à mieux comprendre ce que vous faites.

Dans un premier temps on arrête le service LAMP (en l’occurence nginx), puis mettre à jour le serveur

service nginx stop

apt-get update && apt-get -y upgrade

II – Génération du certificat via Let’s Encrypt

Une fois tout ca effectué, on copie le dossier d’installation depuis le repository officiel et on lance le script (c’est tout simple :D)

cd /tmp

wget https://dl.eff.org/certbot-auto

chmod a+x ./certbot-auto

./certbot-auto --standalone --rsa-key-size 4096

Une petite explication s’impose avant de continuer :

–standalone -> signifie que le script va demander à l’utilisateur de rentrer petit à petit les informations dont a besoin le script

–rsa-key-size 4096 -> signifie qu’une clé RSA de 4096 bits va être générée. En général 2048 bits suffit amplement mais avec une clé 4096 on est sûrs d’être tranquilles pour un moment.

Revenons à nos moutons! Le script est lancé, différentes informations vont vous être demandées :

  • Une adresse mail de contact (qui va apparaître sur les certificats et qui servira à vous prévenir de l’expiration de vos certificats donc ne mettez pas n’importe quoi)
  • Les domaines/sous-domaines pour lesquels des certificats vont être générés (pensez à mettre en place les redirections A et/ou AAAA (ipv4 & ipv6) qui vont bien avant de lancer le script)
  • Accepter les conditions

Pour rentrer les domaines/sous-domaines, rentrez d’abord le domaine en question puis tous les sous domaines séparés par un espace. Par exemple:

domaine.fr test.domaine.fr essai.domaine.fr dedimax.domaine.fr  etc...

Une fois cela fait, le script va travailler et générer les certificats dans le dossier indiqué en fin de script (typiquement cela devrait être /etc/letsencrypt/live/domaine.fr/


III – Configuration de base de nginx avec le certificat

Du fait de la sévérité de certains navigateurs sur les certificats, une mis au point de la configuration de nginx s’impose. Pour cela nous allons modifier 3 fichiers :

  • /etc/nginx/ssl/params.conf (à créer si il n’existe pas)
  • /etc/nginx/nginx.conf
  • votre/vos fichier(s) de conf web (/etc/nginx/sites-enabled/fichier.conf)

1 – Editez /etc/nginx/ssl/params.conf et vérifiez qu’il soit semblable au fichier ci-dessous

nano /etc/nginx/ssl/params.conf
ssl_session_timeout 1d;

ssl_session_cache shared:SSL:50m;

ssl_session_tickets off;

 

ssl_ecdh_curve secp384r1;

 

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl_ciphers "ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA";

 

ssl_prefer_server_ciphers on;

 

add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";

add_header X-Content-Type-Options nosniff;

add_header X-Frame-Options "SAMEORIGIN";

add_header X-XSS-Protection "1; mode=block";

add_header X-Robots-Tag none;

 

ssl_stapling on;

ssl_stapling_verify on;

ssl_trusted_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem; #A MODIFIER SELON VOTRE CONFIGURATION

 

resolver 8.8.8.8;

 

2 – Editez /etc/nginx/nginx.conf et rajoutez la ligne suivante dans les balises http { … }

nano /etc/nginx/nginx.conf
http {

include /etc/nginx/ssl/params.conf;

}

 

3 – Editez vos fichiers de configuration web.

Nativement, ils se situent dans le dossier /etc/nginx/sites-enabled/.

Pour passer nécessairement par du https on va forcer la réécriture de votre fichier du http vers du https:

 

server {

listen 80;

server_name domaine.fr; #A MODIFIER

rewrite 301 https://domaine.fr/$request_uri; #A MODIFIER

}

 

server {

listen 443 http2 ssl;

server_name domaine.fr #A MODIFIER

 

ssl_certificate /etc/letsencrypt/live/domaine.fr/fullchain.pem; #A MODIFIER

ssl_certificate_key /etc/letsencrypt/live/domaine.fr/pivkey.pem;

 

#Reste de la configuration web

}

Puis redémarrez votre serveur web :

service nginx restart

IV – Vérifier la configuration

Plusieurs sites mettent à disposition des outils de benchamrking SSL. en voici certains, mais je vous laisse le plaisir d’en chercher d’autres :


V – Renouveler vos certificats

Le seul gros inconvénient de Let’s encrypt, c’est que les certificats ne sont valables que 90 jours. Et pas question de tout refaire (et de relire entièrement le tuto :D) à chaque fois. Le script prévoit tout pour vous, et vous pouvez même le scripter si vous voulez (#scriptception).

service nginx stop

cd /tmp

./certbot-auto renew

service nginx start

service nginx restart

Et voila le tour est joué! 😀 et on se dit à dans 90 jours! 😉