Une introduction à Let's Encrypt

De Get Docs
Aller à :navigation, rechercher

Introduction

Let's Encrypt est une autorité de certification ouverte et automatisée qui utilise le protocole ACME (Automatic Certificate Management Environment) pour fournir des certificats TLS/SSL gratuits à tout client compatible. Ces certificats peuvent être utilisés pour chiffrer les communications entre votre serveur Web et vos utilisateurs. Il existe des dizaines de clients disponibles, écrits dans divers langages de programmation, et de nombreuses intégrations avec des outils d'administration, des services et des serveurs populaires.

Le client ACME le plus populaire, Certbot, est maintenant développé par l'Electronic Frontier Foundation. En plus de vérifier la propriété du domaine et de récupérer les certificats, Certbot peut configurer automatiquement TLS/SSL sur les serveurs Web Apache et Nginx.

Ce didacticiel abordera brièvement les autorités de certification et le fonctionnement de Let's Encrypt, puis passera en revue quelques clients ACME populaires.

Qu'est-ce qu'une autorité de certification ?

Les autorités de certification (CA) sont des entités qui signent cryptographiquement les certificats TLS/SSL pour garantir leur authenticité. Les navigateurs et les systèmes d'exploitation disposent d'une liste d'autorités de certification de confiance qu'ils utilisent pour vérifier les certificats de site.

Jusqu'à récemment, la plupart des AC étaient des opérations commerciales qui facturaient de l'argent pour leurs services de vérification et de signature. Let's Encrypt a rendu ce processus gratuit pour les utilisateurs en automatisant complètement la procédure et en s'appuyant sur le parrainage et les dons pour financer l'infrastructure nécessaire.

Pour plus d'informations sur les certificats et les différents types d'autorités de certification, vous pouvez lire " Une comparaison des autorités de certification Let's Encrypt, commerciales et privées et des certificats SSL auto-signés ".

Ensuite, nous verrons comment Let's Encrypt procède à la vérification automatisée du domaine.

Comment fonctionne Let's Encrypt

Le protocole ACME de Let's Encrypt définit la manière dont les clients communiquent avec ses serveurs pour demander des certificats, vérifier la propriété du domaine et télécharger des certificats. Il est actuellement en train de devenir une norme officielle IETF.

Let's Encrypt propose des certificats validés par domaine, ce qui signifie qu'ils doivent vérifier que la demande de certificat provient d'une personne qui contrôle réellement le domaine. Pour ce faire, ils envoient au client un jeton unique, puis effectuent une requête Web ou DNS pour récupérer une clé dérivée de ce jeton.

Par exemple, avec le défi basé sur HTTP, le client calculera une clé à partir du jeton unique et d'un jeton de compte, puis placera les résultats dans un fichier à servir par le serveur Web. Les serveurs Let's Encrypt récupèrent ensuite le fichier sur http://example.com/.well-known/acme-challenge/token. Si la clé est correcte, le client a prouvé qu'il peut contrôler les ressources sur example.com, et le serveur signera et renverra un certificat.

Le protocole ACME définit plusieurs défis que votre client peut utiliser pour prouver la propriété du domaine. Le défi HTTPS est similaire à HTTP, sauf qu'au lieu d'un fichier texte, le client fournira un certificat auto-signé avec la clé incluse. Le défi DNS recherche la clé dans un enregistrement DNS TXT.

Le client Certbot Let's Encrypt

Certbot est de loin le client Let's Encrypt le plus populaire. Il est inclus dans la plupart des principales distributions Linux et inclut des fonctionnalités de configuration automatique pratiques pour Apache et Nginx. Une fois installé, récupérer un certificat et mettre à jour votre configuration Apache peut se faire comme suit :

sudo certbot --apache -d www.example.com

Certbot posera quelques questions, exécutera le défi, téléchargera des certificats, mettra à jour votre configuration Apache et rechargera le serveur. Vous devriez alors pouvoir accéder à https://www.example.com avec votre navigateur Web. Un cadenas vert apparaîtra indiquant que le certificat est valide et que la connexion est cryptée.

Étant donné que les certificats Let's Encrypt ne sont valides que pendant quatre-vingt-dix jours, il est important de mettre en place un processus de renouvellement automatisé. La commande suivante renouvellera tous les certificats sur une machine :

sudo certbot renew

Mettez la commande ci-dessus dans une crontab pour l'exécuter tous les jours, et les certificats seront automatiquement renouvelés trente jours avant leur expiration. Si un certificat a été initialement créé avec les options --apache ou --nginx, Certbot rechargera le serveur après un renouvellement réussi.

Si vous souhaitez en savoir plus sur cron et les crontabs, veuillez vous référer au tutoriel "Comment utiliser Cron pour automatiser les tâches".

Autres clients

Comme le protocole ACME est ouvert et bien documenté, de nombreux clients alternatifs ont été développés. Let's Encrypt maintient une liste de clients ACME sur son site Web. La plupart des autres clients n'ont pas les fonctionnalités de configuration automatique du serveur Web de Certbot, mais ils ont d'autres fonctionnalités qui peuvent vous intéresser :

  • Il existe un client écrit dans la plupart des langages de programmation, y compris les scripts shell, Go et Node.js. Cela peut être important si vous créez des certificats dans un environnement contraint et préférez ne pas inclure Python et d'autres dépendances Certbot
  • Certains clients peuvent s'exécuter sans les privilèges root. C'est généralement une bonne idée d'exécuter le moins de code privilégié possible
  • De nombreux clients peuvent automatiser le défi basé sur DNS en utilisant l'API de votre fournisseur DNS pour créer automatiquement l'enregistrement TXT approprié. Le défi DNS permet certains cas d'utilisation plus délicats, tels que le chiffrement de serveurs Web qui ne sont pas accessibles au public.
  • Certains clients sont en fait intégrés dans des serveurs Web, des proxys inverses ou des équilibreurs de charge, ce qui facilite grandement la configuration et le déploiement.

Certains des clients les plus populaires sont :

  • lego : Écrit en Go, lego est une installation binaire à un fichier et prend en charge de nombreux fournisseurs DNS lors de l'utilisation du défi DNS
  • acme.sh : acme.sh est un simple script shell qui peut s'exécuter en mode non privilégié et également interagir avec plus de 30 fournisseurs DNS.
  • Caddy : Caddy est un serveur Web complet écrit en Go avec prise en charge intégrée de Let's Encrypt.

De nombreux autres clients sont disponibles et de nombreux autres serveurs et services automatisent la configuration TLS/SSL en intégrant la prise en charge de Let's Encrypt.

Conclusion

Nous avons passé en revue les bases du fonctionnement de Let's Encrypt et discuté de certains des logiciels clients disponibles. Si vous souhaitez des instructions plus détaillées sur l'utilisation de Let's Encrypt avec divers logiciels, les didacticiels suivants sont un bon point de départ :