Certification SSL

De VK Wiki
Aller à : navigation, rechercher

Introduction

Certbot est un client permettant de simplifier l'obtension de certificats SSL Let's Encrypt (autorité de certification libre de droits). Les certificats ainsi obtenus ont une durée de validité de 90 jours, mais peuvent être renouvellés automatiquement avec ce même client conjointement avec l'utilitaire cron.

Installation de certbot [1]

Depuis mars 2017, certbot est installé de base sur toutes les machines virtuelles nouvellement livrées. Dans le cas où certbot ne serait pas présent, l'installation peut se faire à l'aide des instructions suivantes :

  1. pour vérifier si certbot est installé, lancer l'instruction certbot -v
  2. ajouter les fournisseur de paquets (repository) backports de Debian au fichier /etc/apt/sources.list, si ce n'est déjà fait[2]
    nano /etc/apt/sources.list
    ajouter la ligne
    deb http://ftp.debian.org/debian jessie-backports main
    (passer par nano plutôt que cat est plus pratique, car permet de reconnaitre la ligne - en couleur - en un coup d'oeil si elle existe, ou de l'ajouter si elle est manquante)
  3. rafraîchir les sources de données (pour prendre en compte le fournisseur backports)
    apt-get update
  4. installer certbot et le module pour nginx en indiquant la source jessie-backports
    apt-get -y install certbot python-certbot-nginx -t jessie-backports

Certbot est installé !

Certification d'un site web

La certification se fait au niveau des domaines et sous-domaines. Concrètement, certbot recherche tous les fichiers de configuration de nginx, et en déduit les domaines et sous-domaines existants sur le serveur.

Il est important que le serveur soit accessible depuis l'extérieur depuis les domaines à crypter
Il doit y avoir des enregistrements DNS externes pointant sur le serveur en question, via les (sous-)domaines à crypter.


Lancer Certbot à l'aide de l'instruction certbot --nginx

Certbot.png


Dans l'interface de Certbot, sélectionner les domaines et sous-domaines à crypter à l'aide des flèches (au clavier) ↑ ↓ pour se déplacer dans le tableau, et la barre d'espace pour sélectionner ou déselectionner un élément.

Pour annuler, se déplacer vers le bouton Cancel à l'aide de la flèche →. La flèche ← permet un retour sur le bouton OK.


Pour confirmer la création ou l'annulation - selon le bouton sélectionné - presser le bouton "Entrée" (Enter) du clavier.


Dans l'étape suivante, Certbot propose deux possibilités : la solution standard qui permet d'accéder le site soit en http, soit en https et la solution sécurisée qui dévie le protocole http vers le protocole https, forçant ainsi l'utilisation de ce dernier. La solution sécurisée est la solution par défaut, laisser tel quel et presser la touche Entrée.

Certbot3.png


Au bout de quelques minutes, à moins d'erreurs reportées par Certbot, les domaines sont certifiés.


Renouvellement automatique des certificats

Les certificats délivrés par Let's Encrypt ont une validité de 90 jours. Il faut donc les renouveller à l'aide de l'instruction certbot renew.

Cette instruction contrôle tous les certificats Let's Encrypt sur le serveur, vérifie leur validité, et les met à jour si l'échéance est inférieure à 30 jours.

Idéalement, cette commande de renouvellement devrait être effectuée tous les mois afin de garantir la continuité de tous les certificats.


Pour automatiser le renouvellement des certificats, la méthode la plus simple est l'utilisation de l'utilitaire cron

crontab -e puis ajouter la ligne 0 0 25 * * certbot renew à la fin du fichier.

Quitter en enregistrant avec la combinaison de touches Contrôle (Ctrl) + X, puis Entrée.


Cette ligne ajoutée exécute la commande certbot renew tous les 25 du mois (25 janvier, 25 février, etc.) à 0h00.


Explications

Lorsque la commande certbot --nginx (ou --apache si le serveur web installé est Apache), l'utilitaire vérifie tous les fichiers de configuration du serveur web, qui se trouvent dans le répertoire indiqué dans le fichier /etc/nginx/nginx.conf à la ligne contenant l'instruction include. Par défaut sur nos serveurs, ce répertoire est /etc/nginx/sites-enabled et le nom des fichiers de configuration doivent se terminer par l'extension .conf.


Dans ces fichiers, certbot recherche les valeurs server_name et en déduit la liste des domaines et sous-domaines présents sur la machine.

C'est cette liste qui est présentée dans l'interface de certbot, avec les éléments à sélectionner.


La raison pour laquelle il doit y avoir un enregistrement DNS externe avec l'adresse (domaine) pointant sur le serveur à certifier, est que certbot doit confirmer que nous sommes bien propriétaires du domaine à certifier.

Pour ce faire, certbot va s'envoyer un signal numérique à l'adresse (domaine) indiquée via un service externe ; s'il reçoit bien ce signal, cela confirme que le serveur sur lequel il est installé est bien accessible par le domaine à certifier. Il n'y a donc aucun problème à certifier le domaine.


Certbot-process.png

Certbot2.png


Les confirmations sur tous les (sous-)domaines étant faites, certbot éditera chaque fichier de configuration des domaines sélectionnés, y ajoutant la configuration du protocole https à la fin. Si l'option choisie est l'option sécurisée plutôt que l'option standard, Certbot ajoutera en plus une redirection 301 du port 80 (http standard) vers le port 443 (https).


Certbot4.png


Les certificats quant-à eux, ont été créés et copiés dans le répertoire /etc/letsencrypt/live.



  1. https://certbot.eff.org/#debianjessie-nginx
  2. https://backports.debian.org/Instructions/