Let’s Encrypt : Guide ultime pour générer gratuitement des certificats SSL

Mis à jour le , par Jacky Thierry, dans la catégorie #Sécurité & adminsys

Lets encrypt

A propos de l'auteur

Jacky THIERRY

CTO, Project Manager, Startup owner

Travaillant depuis plus de 15 ans dans le digital, j'ai dirigé de nombreux projets pour des grosses companies mondiales, des agences web, et des associations locales. Je suis spécialisé dans le développement agile avec des équipes outsourcées.

  • Jacky Thierry linkedin
  • Jacky Thierry twitter
  • Jacky Thierry instagram
  • Jacky Thierry RSS feed
Jacky Thierry

Découvrir Let’s Encrypt

1 – Qu’est ce que Let’s Encrypt : Présentation

Let’s Encrypt est une autorité de certification distribuant des certificats SSL / TLS de manière automatisée, libre et gratuite.

C’est aujourd’hui la première autorité de certification distribuant des certificats gratuitement.

Le service étant automatisé, il est bien plus facile pour les acquéreurs de générer des certificats en s’affranchissant de contraintes techniques jugées fastidieuse qui sont réalisées par l’outil certbot, mit à disposition par Let’s Encrypt.

Let’s Encrypt est disponible depuis décembre 2015, et a pour but de faciliter l’acquisition de certificats sécurisés afin d’en généraliser l’utilisation.

Let’s encrypt est à la fois une autorité de certification et un outil système de génération de certificats.

Si vous n’êtes pas familiers avec SSL, je vous invite à découvrir mon guide sur les certificats SSL / TLS, celui ci vous aidera à mieux comprendre la suite de cet article.

2 – Pourquoi utiliser Let’s encrypt : vs autorités payantes

La principale différence entre Let’s Encrypt et les autres autorités de certification est la garantie en cas de fraude.

Lorsque vous acheter un certificat SSL, vous achetez également une assurance à la fraude (qui diffère selon l’autorité et le coût du certificat) pour les transactions financières réalisés derrière ce certificat.

Si vous vendez donc des produits ou des services sur votre sites web, ou si votre certificat sera utilisé pour faire transiter des données bancaires, je vous conseille fortement d’acheter un certificat avec une assurance à la hauteur de vos ventes.

Dans le cas contraire, Let’s encrypt est aussi bon que ses concurrents, voir même meilleur avec certains avantages non négligeable :

  1. Gratuité des certificats
  2. Automatisation du processus réalisé en quelques minutes
  3. Automation possible des actions de renouvellement (à faire vous même)

Avoir la possibilité de renouveler automatiquement ses certificats avec un simple script et sans aucune action manuelle est pour moi, le gros avantage de Let’s Encrypt. Un oubli de renouvellement, est généralement vite arrivé et peut avoir des conséquences désastreuses, s’affranchir de ce risque permet à plus d’un administrateur système de dormir tranquille.

3 – Parts de marché de Let’s Encrypt

Au moment ou j’écris cet article, Let’s Encrypt a déjà délivré plus de 50 millions de certificats actifs (47.6M certificats en décembre 2017). Il y a un an, 13% de tous les sites web utilisant un certificat internet avaient été générés via Let’s Encrypt. Cela place l’autorité en 3e place des fournisseurs de certificats, après Comodo et Symantec (vous pouvez lire cet article très intéressant sur l’impact de l’autorité sur le marché du SSL)

En moyenne, environ 600 000 certificats sont générés par jour avec Let’s Encrypt.

Implémenter Let’s Encrypt

1 – Installer Let’s Encrypt

Pour commencer, il faut installer le program let’s Encrypt sur votre serveur. Celui ci permettra de générer vos certificats sans que vous ayez besoin de la moindre connaissance d’OpenSSL (le programme servant à générer des fichiers SSL).

Il suffit juste de lancer Let’s Encrypt et de renseigner vos informations personnelles (email et nom de domaine).

Le programme est disponible sur un dépot git, vous aurez donc besoin de celui ci d’installé (ou de télécharger une archive depuis la page internet du dépot github) :

apt install git

git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt --depth=1

C’est tout, le programme est maintenant disponible dans le dossier /opt/letsencrypt/

2 – Générer vos certificats SSL

Avant de générer vos certificats, il faut s’assurer que votre nom de domaine pointe bien vers votre serveur (vérifiez vos DNS), et que Let’s encrypt puisse le vérifier. Celui ci aura besoin d’un serveur web d’installé sur le serveur. Pour cela, il existe 2 possibilités :

  1. Utiliser votre serveur web existant ou en installer un vous même (comme nginx ou apache)
  2. Utiliser le serveur pré-intégré par Let’s Encrypt

Le 2e solution étant plus simple, vous utiliserons celle ci dans cet article. Si vous avez donc Nginx ou Apache d’installé, il vous faudra stopper celui ci pendant quelques secondes :

service nginx stop

cd /opt/letsencrypt/

Vous pouvez maintenant générer vos certificats. Nous utilisons l’algorithme de chiffrement RSA avec une clef de 4096 bits (l’argument rsa-key-size de la commande ci dessus), et indiquons notre nom de domaine (ici www.isicca.com avec l’argument d).

A la première utilisation de Let’s encrypt, celui ci téléchargera toutes les dépendances nécessaires, laissez le donc faire.

/opt/letsencrypt/letsencrypt-auto certonly --rsa-key-size 4096 --standalone -d www.isicca.com

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): xxx@isicca.com

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A

-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: N
Obtaining a new certificate
Performing the following challenges:
tls-sni-01 challenge for www.isicca.com
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/www.isicca.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/www.isicca.com/privkey.pem
Your cert will expire on 2018-03-19. To obtain a new or tweaked
version of this certificate in the future, simply run
letsencrypt-auto again. To non-interactively renew *all* of your
certificates, run "letsencrypt-auto renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

Vos certofocats sont maintenant générés et disponibles dans le dossier mentionné.

En listant les fichiers de celui ci, vous trouverez :

  1. Le fichier fullchain.pem, contenant à la fois votre clef publique et la clef de légitimité fournie par l’autorité
  2. Le fichier privkey.pem, contenant votre clef privée

N’oubliez pas maintenant de redémarrer votre serveur web :

service nginx start

3 – Renouveler automatiquement vos certificats

La configuration par défaut de Let’s Encrypt indique une durée de vie des certificats de 3 mois.

Il est bien évidement possible de les générer pour une durée plus longue, mais il faudra à un moment les renouveler.

Vous pouvez renouveler tous les certificats présents sur votre serveur, ou choisir un certificat particulier.

Pour automatiser le process de renouvellement, nous utiliserons cron :

vi /etc/crontab

//pour renouveler un certificat particulier mensuellement
00 0 1 * * root service nginx stop && /opt/letsencrypt/letsencrypt-auto certonly --quiet --standalone --renew-by-default -d www.isicca.com && service nginx start
//pour renouveler tous les certificats mensuellement
00 0 1 * * root service nginx stop && /opt/letsencrypt/letsencrypt-auto renew --quiet && service nginx start

4 – Configurer vos certificats SSL dans Nginx ou Apache

C’est assez simple d’implémenter vos certificats dans votre serveur web. cela ne nécessite que quelques lignes de conf dans vos virtual hosts.

Il faudra juste changer le port d’écoute et indiquer au serveur la localisation des fichiers clefs.

4.1 – Nginx

Editez votre virtual host avec de la manière suivante et relancez le service :

vi /etc/nginx/sites-available/website

server {
server_name www.isicca.com;
listen 443 ssl;
ssl_protocols TLSv1.2;
ssl_certificate /etc/letsencrypt/live/www.isicca.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.isicca.com/privkey.pem;
root /var/www/;
}

service nginx reload

4.2 – Apache

Sous Apache, il faudra également activer le module SSL au préalable et supprimer le site par défaut, puis vous pourrez modifier votre vhost de la manière suivante :

a2enmod ssl && a2dissite default

vi /etc/apache2/sites-available/website.conf

<VirtualHost *:443>
ServerName www.isicca.com
DocumentRoot /var/www
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/www.isicca.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.isicca.com/fullchain.pem
</VirtualHost>

Enfin, on relance le service :

service apache2 reload

9 astuces d’expert pour maîtriser Let’s Encrypt comme un pro

1 – Générer un certificat pour plusieurs domaines

Il est bien evidemment possible de générer un seul certificat capable de gérer plusieurs noms de domaines. Ces domaines peuvent être totalement indépendants ou juste des sous domaines :

/opt/letsencrypt/letsencrypt-auto certonly --rsa-key-size 4096 --standalone -d www.isicca.com,isicca.com,subdomain.isicca.com,anotherdomain.com

2 – Générer un certificat wildcard

Les certificats Wilcards seront supportés courant 2018.

3 – Utiliser des hooks pour contrôler votre serveur web

Il est également possible de laisser Let’s Encrypt controller l’arrêt et le redémarrage du serveur web au renouvellement de certificats :

/opt/letsencrypt/letsencrypt-auto certonly --rsa-key-size 4096 --standalone -d www.isicca.com --pre-hook "service nginx stop" --post-hook "service nginx start"

4 – Choisir entre une connexion HTTP et HTTPS pour le serveur web pré-intégré

Par défaut, le serveur web pré-intégré de Let’s Encrypt écoute sur le port 80 (http). Si vous souhaitez utiliser le port 443 (https), utilisez cette argument :

/opt/letsencrypt/letsencrypt-auto certonly --rsa-key-size 4096 --standalone -d www.isicca.com --preferred-challenges tls-sni

5 – Générer des certificats depuis un serveur différent

Si vous n’avez pas accès au terminal de votre serveur, vous pouvez également générer les certificats depuis une autre machine, même si le nom de domaine ne correspond pas à celle ci. Il vous faudra entrer une valeur TXT dans votre DNS et générer manuellement le certificat :

/opt/letsencrypt/letsencrypt-auto certonly --rsa-key-size 4096 --standalone -d www.isicca.com --manual --preferred-challenges dns

6 – Ajouter des domaines à un certificat existant

Vous avez déjà un certificat et souhaitez ajouter des domaines à celui ci ? Ajoutez l’argument –cert-name pour spécifier le certificat existant et ajouter vos nouveau noms :

/opt/letsencrypt/letsencrypt-auto certonly --rsa-key-size 4096 --standalone --cert-name www.isicca.com -d isicca.com

7 – Forcer le renouvellement d’un certificat

Let’s Encrypt peut refuser de renouveler un certificat s’il ne juge par le renouvellement pertinent. VVous pouvez le forcer à effectuer l’opération avec l’argument –force-renewal:

/opt/letsencrypt/letsencrypt-auto certonly --quiet --standalone --force-renewal -d www.isicca.com

8 – Bannir un certificat

Si jamais votre clef privée est compromise, bannissez immédiatement votre certificat avec l’argument revoke :

/opt/letsencrypt/letsencrypt-auto revoke --cert-path /etc/letsencrypt/live/www.isicca.com/fullchain.pem --reason keycompromise

Vous pouvez également le supprimer de votre serveur :

/opt/letsencrypt/letsencrypt-auto delete --cert-name www.isicca.com

9 – Changer la valeur de rotation des logs

Par défaut, Let’s Encrypt archive son fichier de logs toutes les 1000 entrées. Changez cette valeur avec l’argument –max-log-backups :

/opt/letsencrypt/letsencrypt-auto certonly --rsa-key-size 4096 --standalone -d www.isicca.com --max-log-backups 99