Skip to main content

Tuto Let’s Encrypt & Certbot – Nginx

Bonjour à tous !

Les standards WEB évoluent et les certificats SSL deviennent maintenant un standard pour tout site qui se respecte. La technologie SSL coutait cher jusqu’à mi-2015 où les gros du web se sont réunis afin de créer une autorité de certification reconnue et gratuite, « Let’s Encrypt » !

Dans ce tuto nous allons voir comment générer et installer ce type de certificat sur un serveur tournant sous Debian 8 et Nginx.

Le principe du SSL:

Avant toute chose comprenons le principe du SSL, cette technologie n’est pas faite uniquement pour rassurer les plus craintifs à avoir un petit cadenas vert sur le navigateur, contrairement à ce que les gens disent !

Petit schéma récupéré sur le site de OVH:

 

Schéma principe de fonctionnement du SSL

Ce schéma parle de lui-même, pas besoin de beaucoup plus l’expliquer, il faut en retenir que le SSL permet d’attester qu’une requête est forcement validée par le serveur (qui lui, peut décoder la clé d’échange à l’aide de la clé privé), si ce n’est pas le cas alors le navigateur vous affichera un gros message rouge.

Parfois un message peut également apparaître lorsqu’un certificat est dit « auto signé » c’est à dire aucunement fourni par une autorité agrée comme Let’s Encrypt.

Erreur d’autorité ssl

Prérequis:

  1. Un serveur Debian
  2. Une IP publique avec les ports 80 & 443 forward sur le serveur

Difficulté: Facile

Let’s Encrypt et Cerbot

Let’s Encrypt est donc l’autorité de certification SSL tandis que Cerbot est un outil qui facilite la gestion de ces certificats.

Etape par étape, c’est parti !

 

1. Installer Cerbot:

Pour installer Cerbot sur Debian 7 et 8 rien de plus simple, un paquet est disponible dans les repo backports.

Pour ajouter les backports sur Debian il faut les ajouter dans le fichier des sources du gestionnaire apt:

/etc/apt/sources.list

Pour Debian 8:

#Ajout des backports debian 8
deb http://ftp.debian.org/debian jessie-backports main

Pour Debian 7:

#Ajout des backports debian 7
deb http://ftp.debian.org/debian wheezy-backports main

Une fois ceci fait, il faut update les sources avec la commande

sudo apt update

Puis installer le paquet Certbot avec la commande

sudo apt install certbot -t jessie-backports

(Pour Debian 7 remplacez jessie par wheezy)

Si tout se passe bien aucune erreur ne doit apparaître, si c’est le cas vous pouvez laisser un commentaire en dessous de cet article.

 

2. Création d’un certificat Let’s Encrypt avec Certbot

La commande cerbot doit maintenant fonctionner sans soucis. Afin de générer un certificat qui va convenir à Nginx entrez cette commande:

certbot certonly -d votredomaine.com

L’argument « certonly » permet d’uniquement générer un certificat sans l’installer, nous le ferons plus tard. L’autre argument « -d » permet de renseigner le domaine pour lequel le certificat sera généré. La liste de tous les arguments est disponible avec la commande « man cerbot ».

Le serveur devrait vous demander de quelle manière voulez-vous procéder :

SSL Demande certbot

J’utilise toujours la manière « standalone », si vous vous optez comme moi pour cette méthode il faudra alors stopper avant tous les services tournant sur le port 80 et 433 comme Nginx ou Apache.

Une fois validé en appuyant sur « Ok » vous devriez voir ce type de message:

SSL Confirmation Ok

C’est parfait ! On y est presque ! Vous avez fait 50%

Renouvellement automatique:

Si jamais vous souhaitez que les certificats se renouvellent de manière automatique, vous pouvez faire comme moi, ajouter une crontab:

@daily service nginx stop && certbot renew --quiet && service nginx start

3. Création d’une clé Diffie-Hellman

Afin d’accroître la sécurité nous allons générer une clé sur le serveur qui va notamment éviter les attaques dites « man in the middle ». Parce qu’un schéma vaut bien plus que de longues phrases voici le principe:

Schéma echange de clés Diffie-Hellman

Bien sûr il faut s’imaginer que l’un est le serveur et l’autre est le client.

Nous allons donc générer cette clé:

sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096

Ou 4096 est la taille en octets. Il est conseiller de mettre 2048 mais dans le doute je met plus !

4. Configuration du vhost Nginx

Maintenant que les diverse clés et certificats sont prêts, nous allons passer à la configuration des vhosts !

Pour les non initiés à Nginx les vhosts marche de la même manière qu’Apache en ce qui concerne les emplacements:

/etc/nginx/sites-available/
&
/etc/nginx/sites-enable/

Le dossier sites-enable doit normalement contenir uniquement des liens symboliques vers les fichiers du dossier sites-available.

 

Exemple de configuration

Une fois la configuration enregistrée nous allons l’essayer, pour ce faire Nginx intègre un check de configuration sans restart:

sudo service nginx configtest

Si aucune erreur n’apparaît alors tout va bien vous pouvez continuer, sinon regardez les logs afin de corriger votre erreur.

Afin d’activer le vhost nous allons créer un lien symbolique:

sudo ln -s /etc/nginx/sites-available/www.valentin-deville.eu /etc/nginx/sites-enable/www.valentin-deville.eu

Et enfin restart Nginx:

sudo service nginx restart

Encore une fois aucune erreur ne doit apparaître.

Maintenant c’est à vous de vérifier, rendez-vous sur votre site !

J’espère avoir été assez clair dans mes explications, si vous avez des questions ou soucis vous pouvez me contacter par Twitter ou en dessous de cet article, j’y répondrai au plus vite !

A bientôt 😉

 

Valentin Deville

Twitter: @v_deville Instagram: @valentin.deville Linkedin: @vdeville Société: Deville Computing

4 réponses à “Tuto Let’s Encrypt & Certbot – Nginx

  1. As-tu essayé Caddy ? C’est un Web server aussi rapide que Nginx qui inclure directement Let’s encrypt et Http2. Je l’ai trouvé plus simple de configuration. Il gère le renouvellement des certificats également.

    1. Yes, j’ai essayé, je le trouve malheureusement un peu léger quand tu dois commencer à mettre en place des directives spécifiques, etc.
      Et assez peu de retour sur de grosses charges, etc.
      Mais c’est pas mal pour Mr « Tout le monde » qui n’a pas de besoins spécifiques !
      Je ferais peut-être un article sur ses avantages.
      Merci de ton retour, à bientôt !

  2. Très bon tuto, j’aurai aimé une version Apache mais à part ça nickel, merci du savoir partagé 😉

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *