Catégories
Let's Encrypt

Installation Certificats SSL / TLS Let’s Encrypt avec Certbot

Nous allons voir dans cet article comment obtenir des certificats SSL / TLS Let’s Encrypt. Fondé en 2014, Let’s Encrypt est un projet Linux Foundation, soutenue par l’Electronic Frontier Foundation, Mozilla Foundation, Cisco et par beaucoup d’autres acteur majeur d’internet.

Let’s Encrypt est ce que l’on appelle une Certification Authority (Autorité de Certification) qui fournit des certificats gratuit suivant la norme X.509, un tiers de confiance permettant d’authentifier et certifier l’identité des correspondants. Nous utilisons ces certificats pour sécuriser les communications numériques via les protocoles SSL et TLS. Pour ce qu’il en est du protocole SSL, il est à proscrire immédiatement car déclaré obsolète dans la RFC 7568 en 2015, à cause de l’attaque POODLE en 2014. L’heure est donc au TLS (Transport Layer Security), je vous passe tous les détails technique, car ce n’est pas le sujet de cet article. Les certificats délivrés par Let’s Encrypt ont une durés de vie de 90 jours, soit 3 mois, il faudra donc les renouveler régulièrement.


Cet article est une suite logique au précédent article expliquant comment installer un serveur web LAMP. Pour installer les certificats de la manière la plus simple et automatisés, nous allons utiliser Certbot qui est un outil développé par Electronic Frontier Foundation. Certbot est compatible avec de nombreux serveurs web et système d’exploitation. Dans cet article, nous allons faire une installation fonctionnant avec Apache et sous Debian 9, pour les autres il y a très peut de différence, je vous invite à aller consulté la documentation de référence pour prendre connaissance des nuances existante.

Dans cet article, je vous présente l’installation alternative de Certbot. Il est donc alors plus précisément question de Certbot-Auto, cela ne change quasiment rien.

Attention, lors de l’utilisation de toutes les commandes, il faudra donc remplacer ‘certbot’ par ‘certbot-auto’.

Pré-requis

Le seul pré-requis sera d’activer au préalable deux modules du serveur web. Le ‘ssl’ pour pouvoir utiliser des certificats SSL / TLS et le ‘rewrite’ pour pouvoir rediriger les utilisateurs vers le SSL / TLS.

# Module SSL
a2enmod ssl

# Module rewrite
a2enmod rewrite

# Il ne reste plus qu'a redémarrer apache2

service apache2 restart

Il est ici question d’Apache2, pour les autres serveurs web, je vous invite à consulté leur manuel de référence respectif.

Attention, il est aussi nécessaire que tous les noms de domaines déclarés soient joignables et qu’il redirige bien vers votre serveur dont il est question. Il faut aussi que le chacun de vos sites possède un virtual host bien configuré. Ne pas oublier pour ceux qui ont un pare-feu de veiller à ce que le Port SSL 443 soit ouvert et libre.

Installation de Certbot-Auto

Nous allons le télécharger et le rendre exécutable.

cd /usr/local/sbin

wget https://dl.eff.org/certbot-auto

#On le rend executable
chmod a+x /usr/local/sbin/certbot-auto

Création d’un certificat Let’s Encrypt

Certbot est très facile à utiliser, les commandes fonctionne avec différents flag. Le flag ‘–cert-name’ est le nom du certificat. Le flag ‘-domain’ ou ‘-d’ sont les différents noms de domaines que vous voulez déclarer. Il est possible pour ce dernier de séparer les domaines par des virgules, dans l’exemple ci-dessous je le fais individuellement. Le flag ‘–mail’ est l’adresse mail ou vous recevrait un mail lors de l’expiration proche d’un de vos certificats.

Il est également possible de choisir la taille de la clé RSA (par défaut 2048 bits) avec le flag ‘–rsa-key-size 4096’ pour la passer en 4096 bits. D’après le Référentiel Général de Sécurité du 21 février 2014 de l’ANSSI il recommandé d’avoir une clé RSA de au minimum 3072 bits. (Soit dit en passant, lorsque l’on regarde la taille de la clé RSA de l’ANSSI elle est de 2048 bits …)

Attention Let’s Encrypt n’accepte pas le Wildcard ‘*.’, vous devez donc définir tous les domaines et tous les sous-domaines individuellement. 

L’avantage d’utiliser les flags ‘–apache’ ou ‘–nginx’ est que vous n’aurez pas de besoin de libérer les ports 80 et 443 pour la création des certificats.

# Pour Apache
certbot-auto --apache --cert-name monsuperdomaine.fr -d monsuperdomaine.fr -d www.monsuperdomaine.fr -d subdomain.monsuperdomaine.fr -d www.subdomain.monsuperdomaine.fr --rsa-key-size 4096 --email monsuper@email.fr

# Pour Nginx
certbot-auto --nginx --cert-name monsuperdomaine.fr -d monsuperdomaine.fr -d www.monsuperdomaine.fr -d subdomain.monsuperdomaine.fr -d www.subdomain.monsuperdomaine.fr --rsa-key-size 4096 --email monsuper@email.fr

La suite avec Certbot est très Step-by-Step, vous n’aurez aucun mal. Si tous se passent bien Certbot va voir tout les virtual host concerné. Il vous demandera si vous voulez être en mode ‘Easy‘ ou ‘Secure‘. En sélectionnant ‘Secure’, il va automatiquement créer des virtual host SSL et va rediriger toutes les requêtes concerné de HTTP en HTTPS. En Easy il va automatiquement créer des virtual host SSL sans rediriger toutes les requêtes concerné. Je vous conseil de choisir ‘Secure‘.

Please choose whether HTTPS access is required or optional.
-----------------------------------------------------------
1: Easy - Allow both HTTP and HTTPS access to these sites
2: Secure - Make all requests redirect to secure HTTPS access
-----------------------------------------------------------
select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Vous avez maintenant normalement réussi à créer vos beaux certificats Let’s Encrypt. Je ne détaillerais pas dans cet article les configurations des virtual host. Ils ont était modifier automatiquement par Certbot. J’aborderais plus en détails la configuration des virtual host avec la configuration des Header dans un prochain article.

Les certificats que vous venez créer ci-dessus, vous pourrez les retrouver dans le dossier ‘/etc/letsencrypt/live/monsuperdomaine.fr/’.

ls /etc/letsencrypt/live/monsuperdomaine.fr

cert.pem # Certificat Serveur

chain.pem # Certificat Intermédiaire

fullchain.pem # Serveur + Intermédiaire Certificat

privkey.pem # Clé Privé

Vérification du certificat

Maintenant que vous avez réussi à installer votre certificat TLS, vous pouvez tester votre certificat TLS avec l’outil SSLLabs de Qualys. Il existe aussi l’outil d’Aeris pour tester votre TLS.

Superviser vos certificats

Vous pouvez visualiser tous les certificats Let’s Encrypt en cours de validité et connaître leur date d’expiration.

certbot-auto certificates

Found the following certs:
  Certificate Name: monsuperdomaine.fr
    Domains: monsuperdomaine.fr, www.monsuperdomaine.fr
    Expiry Date: 2017-02-19 19:53:00+00:00 (VALID: 30 days)
    Certificate Path: /etc/letsencrypt/live/monsuperdomaine.fr/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/monsuperdomaine.fr/privkey.pem

Renouveler les certificats manuellement

Comme expliquer plus haut dans l’article, les certificats délivrer par Let’s Encrypt ont une durée maximale de 90 jours. Il faut donc les renouveler, nous verrons après comment automatiser le renouvellement de vos certificats. Pour renouveler vos certificats manuellement rien de plus simple. Vous pourrez renouveler vos certificats 30 jours avant leur date d’expiration.

cd /usr/local/sbin

# Pour Apache2
certbot-auto renew --apache

# Pour Nginx
certbot-auto renew --nginx

Renouveler les certificats automatiquement

Nous allons faire en sorte que vos certificats se renouvelle automatiquement. Pour cela rien de plus simple, nous allons faire une crontab qui va se lancer tous les jours à 4h00 du matin.

Cela n’exclut pas de vérifier manuellement la validité de vos certificats aux dates anniversaires.

# Ouverture des crontab
crontab -e

# Pour Apache2
0 4 * * * /usr/local/sbin/certbot-auto renew --apache -q

# Pour Nginx
0 4 * * * /usr/local/sbin/certbot-auto renew --nginx -q

Révoquer un certificat

Pour révoquer un certificat, il faut révoquer le certificat serveur en spécifiant bien le chemin vers le ‘cert.pem’ concerné, ont pourra également donnée une raison à la révocation du certificat avec le flag ‘–reason’. Puis ensuite, il ne reste plus qu’à supprimer les autres fichiers via Certbot.

# Révocation du certificat
certbot-auto revoke --cert-path /etc/letsencrypt/live/monsuperdomaine.fr/cert.pem --reason keycompromise

# Suppression des autres fichier
certbot-auto delete --cert-name monsuperdomain.fr

Conclusion

Vous avez dès à présent réussi à mettre en place un certificat Let’s Encrypt TLS sur votre site web. Je vous invite faire une donation ou des donations mensuelles à Lets Encrypt et également à l’EFF pour soutenir leurs projets et outils qui sont mis à disposition gratuitement.
Il ne reste plus qu’à avoir de jolie en-tête HTTP pour mieux sécurisé votre site web. Je ferais probablement un long article concernant les en-têtes HTTP avec Apache2.

Sources :

Laisser un commentaire

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