Trois étapes pour utiliser Let’s Encrypt. La troisième va vous étonner !

| 5 Comments | 6 minutes read

Ce billet va vous expliquer :

  1. comment installer Let’s Encrypt
  2. comment générer vos certificats
  3. comment renouveler automatiquement vos certificats

Préambule : sécuriser votre site (vive le SSL !)

Soyons clair, le SSL c’est le Bien. Le SSL sécurise vos échanges, le SSL permet à votre site d’être mieux placé dans le classement des moteurs de recherche, le SSL affiche un superbe cadenas dans la barre d’adresse de votre navigateur, le SSL fait revenir l’être aimé, etc.

ssl_amazing

Bref, comme à ekito nous sommes bleeding edge et que nous aimons surfer sur la vague de l’innovation, nous avons décidé de basculer le site ekito.fr en HTTPS. Et comme nous sommes vraiment bleeding edge, nous avons pour cela utilisé les services de Let’s Encrypt.

Préambule bis : Qu’est-ce que Let’s Encrypt ?

Let’s Encrypt c’est tout simplement une autorité de certification permettant de générer des certificats SSL pour vos serveurs web (ou serveurs mails ou autres). Par rapport aux autres autorités de certifications, Let’s Encrypt a quelques (gros) avantages : c’est gratuit, c’est reconnu par quasiment tous les navigateurs, et surtout c’est automatisé.

Let’s Encrypt est encore en phase beta. Ce qui veut dire que ce qui suit pourra très bien ne pas vous arriver. Pour être honnête, sur trois serveurs différents, j’ai eu trois comportements différents. Vous allez peut-être devoir essayer plusieurs fois (mais pas trop non plus, à cause du rate limiting : 5 domaines par 7 jours glissants).

ssl_retry

Préambule ter

Ce qui suit sera orienté serveur fonctionnant sous Debian Linux, avec Apache. Pour d’autres configurations plus exotiques (qui a dit Windows + IIS ?), je ne saurai vous aider. Éventuellement, je peux vous conseiller de changer de système (de rien, c’est gratuit).

Installer Let’s Encrypt

Cette partie va être la plus facile et la moins sujette à problème (sauf si Murphy passe dans le coin). Vous devez simplement être certain que git est installé sur votre serveur, puis lancer la commande suivante :

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

Voilà, Let’s Encrypt est installé dans le dossier letsencrypt.

Générer les certificats

C’est cette partie qui se complique, et qui va grandement dépendre de la configuration de votre serveur et apparemment d’une bonne dose de hasard.

Tout d’abord, allez dans le répertoire d’installation de Let’s Encrypt, et exécutez la commande suivante (en tant que root) :

letsencrypt-auto

Après l’installation d’éventuelles dépendances et la mise en place d’un environnement virtuel Python, vous arriverez sur un écran présentant les différents domaines configurés dans Apache et pour lesquels on vous propose d’activer le HTTPS. Après validation, on vous demandera une adresse mail de contact (normalement utilisée pour vous prévenir quand les certificats arrivent à expiration), puis on vous proposera de mettre en place les redirections idoines (redirection du traffic HTTP vers l’adresse HTTPS).

Plusieurs cas de figure :

Pas de message d’erreur, tout se passe bien

Félicitations ! Il ne vous reste plus qu’à vérifier que la configuration Apache soit correcte, et relancer ce dernier afin d’accéder à votre site de manière sécurisée.

Erreur ! Let’s Encrypt se plaint que chaque VirtualHost doit être dans un fichier séparé

En théorie, vous devez effectivement avoir un fichier de configuration (dans /etc/apache2/sites-enabled/) par VirtualHost. Il m’est arrivé une fois que tout se passe bien malgré mon fichier de configuration unique, mais je n’en ferai pas généralité.

Dans ce cas, Don’t Panic ! Les certificats ont normalement été générés, et se trouvent dans un dossier /etc/letsencrypt/live/<domaine>/.

Vous avez deux fichiers d’importance :

  • fullchain.pem qui contient le certificat proprement dit (unique à l’ensemble des domaines gérés par votre serveur)
  • privkey.pem qui contient la clé privée de signature du certificat.

Pour configurer votre serveur, il va vous falloir deux VirtualHost par domaine (un pour l’accès HTTP, l’autre pour l’accès HTTPS).

Pour l’accès HTTP, il devrait ressembler à ça (pour le domaine domain.com) :

<VirtualHost *:80>
    ServerAdmin contact@domain.com
    ServerName domain.com
    
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    ErrorLog ${APACHE_LOG_DIR}/error.log
    
    RewriteEngine on
    RewriteRule ^ https://www.domain.com%{REQUEST_URI} [L,QSA,R=permanent]
</VirtualHost>

Et pour le HTTPS :

<VirtualHost *:443>
    ServerAdmin contact@domain.com
    ServerName domain.com
    
    CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
    ErrorLog ${APACHE_LOG_DIR}/ssl_error.log
    
    SSLProtocol -ALL -SSLv3 +TLSv1 +TLSv1.1 +TLSv1.2
    SSLHonorCipherOrder On
    SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
    
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/domain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/domain.com/privkey.pem
    
    # Toutes les directives qui vont bien (DocumentRoot, etc.)
    ...
</VirtualHost>

Vous admirerez les directives SSLProtocol et SSLCipherSuite qui nous assurent une sécurité béton (pas de BEAST Attack, pas de POODLE Attack, pas de support des vieux protocoles troués (exit SSLv2 et SSLv3), aux dépens des vieux navigateurs, il est vrai.

Erreur ! Let’s Encrypt se plaint de ne pas pouvoir mettre en place les redirections

Sûrement parce que vous avez déjà des redirections en place dans votre VirtualHost, et que ça le perturbe. Vous pouvez les ajouter vous-même en vous basant sur l’exemple ci-dessus.

Renouveler les certificats

Bon à savoir, les certificats de Let’s Encrypt sont valables trois mois (leur crédo est : un certificat à durée de vie courte sera plus vite changé si par hasard il est compromis). En revanche, cette courte durée de vie va vite être préjudiciable s’il faut renouveler manuellement plusieurs dizaines de domaines.

Les certificats de Let’s Encrypt
sont valables trois mois.
C’est bien.
C’est mieux si vous les
renouvelez automatiquement.

Pour cela, Let’s Encrypt permet d’automatiser le renouvellement à l’aide de la commande suivante, à placer dans un cron (mensuel par exemple) :

letsencrypt-auto -d domaine_1,domaine_2,…,domaine_n --renew-by-default --no-redirect --text

Les paramètres sont les suivants :

  • -d : une liste de domaines séparés par des virgules,
  • –renew-by-default : on précise qu’on souhaite renouveler les domaines mentionnés précédemment,
  • –no-redirect : pas besoin de remettre en place les redirections (surtout si vous les avez déjà ajoutées auparavant),
  • –text : utilise le mode texte brut plutôt qu’une interface ncurses. Ça évite de se retrouver avec un écran final attendant que l’on valide un bouton « OK », ce qui fait un peu tâche dans un cron.

Conclusion

Il faut être honnête, le service est encore jeune et mérite encore quelques finitions dans les angles. Mais pour le prix et le confort qu’apporte l’automatisation du service, il serait vraiment dommage au mieux de ne pas s’en servir, au pire d’y garder un œil dessus.

Arnaud Boudou Author: Arnaud Boudou

Développeur Java et mobile (iOS) ; enthousiaste des TIC ; photographe amateur (un jour, peut-être…).

Mes hashtags : #j2ee #objc #raspberrypi #inneedforgadgetry

@boudouarnaud sur Twitter

Like it?  Share  it!

Share Button

5 Comments

  1. Hi !
    good presentation thnaks for sharing !

    I have succesfully completed these steps, now I whoudl like to generate a cllient serticifacte for autentification at login (without password).

    I have some dificulties.
    Any advices ?

    Best regards !
    Manu

  2. Arnaud Boudou

    Hi !

    I’m not sure it’s possible to use theses certificates for another use than https signing, but I may be wrong.

    But if you find some informations about it, it could be interesting 🙂

    Regards

  3. Intéressant le commentaire de Manu !
    je vais tenter d’installer un windows server et de mettre en place l’authentification par certificat Let’s Encrypt

  4. Bonjour,
    Est-ce possible de faire cela sous Windows avec WampServer svp ?

    Merci d’avance

What do  You  think? Write a comment!

Leave a Reply

Required fields are marked *.


CommentLuv badge

This site uses Akismet to reduce spam. Learn how your comment data is processed.