Let's Encrypt : le certificat pour sécuriser vos flux

Un des gros problèmes d’Internet du point de vue de la sécurité vient du fait qu’il s’agit d’un réseau décentralisé. On ne contrôle donc pas les équipements par lesquels passent nos données et on n’est pas à l’abri qu’un attaquant malveillant bien placé sur le réseau (Etat, réseau WiFi d’hôtel, etc…) qui écouterait notre trafic en clair (voir mon article : Se connecter à un site Internet de manière sécurisée).

La solution qui a été retenue pour sécuriser les connexions sur le Web est le protocole HTTPS.

Oui mais pour une utilisation personnelle on a souvent recours à des certificats qui sont auto-signés car la signature par une autorité de certification a un coût. La faiblesse de ces certificats réside dans le fait qu’il est nécessaire de vérifier la signature manuellement à chaque fois qu’on se connecte à l’application. Et outre le fait qu’aucune personne ne vérifie systématiquement la signature, cela n’est pas “propre” dans la mesure où le navigateur va afficher un bel avertissement pas bon pour son image.

C’est de ce constat que sont partis quelques grands acteurs d’Internet (et pour ne citer que ceux-là : Mozilla, Akamai ou encore Cisco) qui ont fondé une autorité de certification “libre” et gratuite : Let’s Encrypt.

Voyons voir un peu de plus près ce qu’est Let’s Encrypt et comment on peut s’en servir pour valider son certificat.

Quoi qu’est-ce ?

Let’s Encrypt est, contrairement aux autorités de certification classiques, une autorité de certification automatique qui cherche à simplifier le processus de génération et de signature des certificats. Ce service est proposé par l’Internet Security Research Group et vise à généraliser les connexions sécurisées sur Internet.

Le fonctionnement est simple : Let’s Encrypt s’occupe de tout.

En une commande, vous générez un certificat sur votre machine locale, vous envoyez la demande de signature aux serveurs de Let’s Encrypt et vous récupérez le certificat signé (voire l’installez directement) depuis les serveurs de Let’s Encrypt.

Ces serveurs vont procéder automatiquement à la vérification qu’il s’agit du bon serveur et valider votre demande. Cela ne prend donc que quelques minutes.

Les avantages sont les suivants :

  • C’est gratuit,
  • C’est rapide, quelques minutes suffisent (selon la puissance de votre machine) pour générer et installer un certificat,
  • C’est très simple d’utilisation,
  • C’est reconnu par tous les principaux navigateurs.

Il y a cependant des inconvénients :

  • Le serveur certifié doit disposer d’une connexion Internet et être accessible directement depuis Internet,
  • Le certificat doit être renouvelé plus souvent qu’un certificat “classique”, tous les 3 mois,
  • Le nombre de création de certificats et de sites couvert est limité (https://community.letsencrypt.org/t/rate-limits-for-lets-encrypt/6769).

En particulier, le deuxième point peut être simplement résolu par un script automatique.

Comment faire ?

Installer le programme de Let’s Encrypt directement depuis leur Git :

$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt

Si vous avez un serveur Apache récent sur une distribution type Debian, vous pouvez lancer directement la commande suivante et vous laisser guider :

# letsencrypt --apache

Dans tous les autres cas, utiliser l’option CertOnly pour simplement générer le certificat puis l’installer où vous le souhaitez :

# letsencrypt certonly --standalone -d monsite.com

Laissez-vous guider puis naviguez dans /etc/letsencrypt/sites/live/monsite.com/ pour retrouver vos fichiers de certification à lier à votre serveur.

Remarque : Accéder au certificat peu impliquer d’être root.

Il ne reste plus qu’à intégrer ces fichiers à Apache dans le fichier de configuration de votre VHost (sous Debian /etc/apache2/sites-available) :

# Activer le moteur SSL
SSLEngine On

# Désactivation des protocoles SSL pour forcer TLS
SSLProtocol All -SSLv2 -SSLv3

# Fichiers de clés
SSLCertificateFile      /etc/letsencrypt/live/monsite.com/cert.pem
SSLCertificateKeyFile   /etc/letsencrypt/live/monsite.com/privkey.pem
SSLCACertificateFile    /etc/letsencrypt/live/monsite.com/fullchain.pem

Renouveler tous les certificats :

# letsencrypt renew

Pour renouveler un certificat unique (oui c’est la même commande pour le créer) :

# letsencrypt certonly --standalone -d monsite.com

Dans les deux cas, les certificats seront renouvelés uniquement s’ils ont une expiration survenant dans les 30 jours.

Pour vous aider à garder à jour votre certificat, vous pouvez utiliser le script fourni par Let’s Encrypt (https://letsencrypt.org/getting-started/) et l’ajouter à votre crontab :

#!/bin/bash
systemctl stop apache2  # à remplacer avec votre propre serveur
/path/to/letsencrypt-auto renew -nvv --standalone > /var/log/letsencrypt/renew.log 2>&1
LE_STATUS=$?
systemctl start apache2 # à remplacer avec votre propre serveur
if [ "$LE_STATUS" != 0 ]; then
    echo Automated renewal failed:
    cat /var/log/letsencrypt/renew.log
    exit 1
fi

Conclusion

Grâce à Let’s Encrypt, il est désormais possible de sécuriser la connexion à son serveur perso et de s’assurer que même depuis un réseau d’hôtel, personne ne pourra écouter les communications avec votre serveur.

Site officiel de Let’s Encrypt