Un certificat SSL avec Let’s Encrypt

certificat SSL avec Let's Encrypt

Pourquoi création d’un certificat SSL avec Let’s Encrypt. L’Internet est la plus belle invention depuis le pain en tranches mais il est devenu un endroit infernal, plus qu’il ne l’a jamais été. Nous avons affaire à grande échelle à des script kiddies, des services secret incontrôlés et des organisations criminelles. Il est totalement hors de question de faire tourner des services non chiffrés sur Internet. Je considère qu’un mot de passe envoyé en clair sur Internet est immédiatement perdu.

Pourquoi faire en sorte que les utilisateurs aient confiance dans un certificat ?

Let’s Encrypt est un projet sans but lucratif lancé par une société californienne appelée ISRG (Internet Security Research Group). Ils planifiaient de mettre en place une infrastructure permettant finalement à toute personne dans le monde d’obtenir un certificat « de confiance » gratuitement. Leur certificat d’autorité est désormais installé parmi les certificats de confiance par la plupart des navigateurs Internet et autres logiciels, comme les clients de messagerie. Si votre patron vous pose la question… Leurs certificats sont techniquement aussi sûrs qu’un certificat auto-signé. Et non, il n’y a aucune raison de jamais payer un nouveau certificat. Pourquoi les autres le font encore ? Selon toute vraisemblance parce qu’ils sont victimes du marketing et du FUD.

Préparation du serveur web Apache pour HTTP

Mon serveur utilise un nom composé, du nom du serveur « srv-debian », avec un nom de domaine « example.org ». Au final ça nous donne le nom de « srv-debian.example.org » (ne cherchez pas je viens de l’inventer). Ce nom de domaine « example.org » est enregistré chez OVH ainsi je n’ai pas à m’occuper des serveurs DNS. Je ne travaille pas pour OVH, et je pense que tous les autres registrar font de même. Si vous voulez gérer vous mêmes votre serveur DNS, c’est votre problème.
Commençons par Apache. Votre serveur peut être utilisé pour plusieurs hôtes virtuels par nom (name-based virtual hosts). Cela signifie simplement que votre serveur web peut différencier quel fichier il est censé envoyer au client en fonction du nom de domaine utilisé dans l’URL.

Virtualisation

En premier lieu, vous aurez besoin d’un répertoire racine pour ce nom d’hôte :

mkdir /var/www/example.org

En second lieu vous devrez créer un fichier de configuration d’hôte virtuel correspondant. Apache utilise sur Debian un système propre à cette distribution pour gérer les hôtes virtuels :

  • Premièrement, /etc/apache2/sites-available/ contient deux fichiers de configuration par défaut. 000-default.conf est un fichier de configuration d’hôte virtuel HTTP et default-ssl.conf est un fichier de configuration d’hôte virtuel HTTPS. Vous pouvez créer tous les fichiers que vous désirez dans ce répertoire. Apache ne les prendra pas en compte automatiquement.
  • Deuxièmement, /etc/apache2/sites-enabled/ contient des liens symboliques (“symlinks”) qui pointent sur les fichiers de configuration dans le répertoire  /etc/apache2/sites-available. Ce sont les liens figurant dans ce répertoire qui seront chargés par Apache.

Ce système vous permet d’activer et de désactiver les hôtes virtuels sans avoir à effacer aucune configuration. Debian est fournie également avec deux commandes  a2ensite (raccourci pour apache2 enable site) et a2dissite. En plus de quelques contrôles de validité des configuration ces commandes ont pour rôle essentiel de créer ou effacer les liens symboliques entre les répertoires sites-available et sites-enabled.

Attention : les fichiers de configuration doivent comporter un suffixe en .conf sinon ils ne seront pas pris en compte.

Lorsqu’on installe Apache, un fichier de configuration par défaut 000-default.conf est crée, ainsi qu’un lien symbolique vers ce fichier. De cette façon, vous pouvez tout de suite après l’installation aller sur votre site, vous verrez la page par défaut du serveur Apache.

Le fichier vhost

Nous allons créer le fichier de configuration (remplacer example.org par votre nom de domaine).

# nano /etc/apache2/sites-available/example.org.conf
<VirtualHost *:80>
    ServerName example.org
    ServerAlias www.example.org
    ServerAdmin webmaster@example.org
    DocumentRoot /var/www/example.org
    ErrorLog /var/www/example.org/error.log
    CustomLog /var/www/example.org/access.log combined
    <Directory /var/www/example.org/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride all
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost> 

Avec deux ou trois explication pour être plus clair.

  • <VirtualHost *:80>: Toutes les requêtes arrivant sur le port 80 seront traitées par notre hôte virtuel.
  • ServerName: C’est tout simplement le nom de domaine
  • ServerAlias: Là, c’est un alias de votre nom de domaine
  • ServerAdmin: C’est le mail de l’admin (pas obligatoire).
  • DocumentRoot: Le repertoire dans lequel les fichiers de votre site seront rangés.
  • Errorlog Customlog: l’endroit ou apache écrira le fichier de log et celui des connexions.
  • <Directory> </Directory>: Dans cette section on spécifie les autorisation d’accès aux fichiers contenus.

Activation

Activez l’hôte virtuel HTTP

a2ensite example.org

Vous obtiendrez le message suivant

To activate the new configuration, you need to run:
  systemctl reload apache2

Le message indique que pour qu’Apache prenne en compte cette nouvelle configuration il faut l’obliger à relire ses fichiers de configuration avec cette commande.

systemctl reload apache2

Vérifions tout ça

Pour vérifier que la configuration fonctionne plaçons un simple fichier de test à la racine de votre hôte virtuel

 echo "Juste un petit test" > /var/www/example.org/test

Maintenant quand vous saisissez dans la barre d’url de votre navigateur  http://example.org/test vous devriez voir affiché “Juste un petit test”.

Obtenir un certificat Let’s Encrypt

Dans le but d’obtenir un certificat qui sera reconnu par tous navigateurs, Debian Stretch propose l’outil le plus courant de gestion des certificats Let’s Encrypt : "certbot« .

Pour commencer, on télécharge Certbot et on le rend exécutable :

cd /opt
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

Création du certificat Let’s Encrypt

Lancez la commande suivante pour installer dépendances et demander la création du certificat :

cd /opt
./certbot-auto

Les étapes de création sont les suivante :

  1. Entrez une adresse mail, elle servira pour vous avertir quand votre certificat arrivera à échéance.
  2. Entrez A et entrer pour accepter le contrat
  3. Ensuite N pour ne pas partager votre mail
  4. Étape très importante : il va chercher dans notre configuration de VHOST le nom de domaine : example.org et www.example.org. Taper seulement Entrer pour sélectionner les deux noms.
  5. Choisir 2 pour rediriger toute les requêtes http vers https

Voila c’est terminé, si tout c’est bien passé, vous pouvez maintenant vous connecter sur votre site avec votre nom de domaine. Si vous n’avez pas effacé le petit fichier crée tout à l’heure, essayez

example.org/test

dans la barre d’adresse de votre navigateur, vous devriez vous retrouver avec:

https://www.example.org/test

dans cette barre une fois le texte affiché. Votre certificat est bien en place et les navigateurs n’afficherons plus d’erreur comme avec un certificat auto-signé.

Le renouvellement d’un certificat Let’s Encrypt

Les certificats proposés par Let’s Encrypt sont valables pour une durée de 3 mois. Il faudra donc penser à les renouveler avant la fin de cette période. Vous allez recevoir un mail pour vous prévenir, mais pour cela on peut exécuter une commande tous les deux mois dans crontab :

crontab -e 

Copier/coller le texte suivant à la fin :

0 0 * */2 * /opt/certbot-auto renew –force-renewal

<— Précédent