Let’s Encrypt est une autorité de certification gratuite, automatisée et libre. C’est une organisation délivrant des certificats SSL, légitimes sur le web, par tous les services et navigateurs. Let’s encrypt est gratuit, vous pouvez donc générer des certificats SSL sans débourser un centime. C’est aujourd’hui la première et seule organisation délivrant des certificats SSL sans aucune souscription. Le processus de génération est automatisé, il est donc possible de créer et renouveler vos certificats via des scripts, sans aucune intervention manuelle.
Let’s Encrypt est sorti en décembre 2015, et a pour vocation de faciliter et généraliser l’utilisation de certificats SSL. Cela donne plus de liberté aux administrateurs systèmes, leur permettant de créer des certificats en quelques minutes, et permettre aux personnes ne souhaitant pas acheter de certificats de pouvoir tout de même sécuriser leurs services.
Apprenez comment l’installer, générer vos propres certificats, et les implémenter sur vos sites web.
Cet article a été rédigé pour un système Debian, mais la procédure est identique sur les distributions dérivées comme ubuntu ou mint, en ajoutant sudo devant chaque commande.
Dois je utiliser Let’s Encrypt ?
Tout d’abord, je vous conseille de lire mon guide pour tout savoir sur SSL, j’explique dans celui-ci ce qu’est un certificats SSL, et les différentes méthodes pour en créer. Un certificat auto signé est habituellement utilisé uniquement pour des tests, des serveurs de recette ou des services non accessibles au public. Dans le cas contraire, il faut utiliser un certificat provenant d’une autorité reconnue.
Et donc, dois je utiliser Let’s Encrypt ou une autorité payante ? Quelle est la principale différence ?
Réponse rapide : la principale différence entre Let’s Encrypt et une autorité tierce payante est une assurance sur les transactions financières.
Lorsque vous achetez un certificat, vous achetez également une assurance. Celle ci varie selon l’autorité et le prix du certificat, chaque organisme ayant ses règles et options. Si vous possédez un site e-commerce permettant des transactions bancaires, je vous conseille fortement d’utiliser un certificat SSL d’une autorité fournissant une assurance correspondant au montant anticipé de vos paiement en ligne.
Par contre, si vous ne proposez aucun paiement sur votre site (ou si vos paiement sont décentralisés sur un service tiers, comme votre banque), Let’s Encrypt est parfait pour vous. Il vous permettra de sécuriser vos services et de renouveler ceux-ci automatiquement, contrairement à des autorités tierces. Une fois installé, vous n’aurez plus à vous en préoccuper, il s’auto-gérera. Etre assuré de ne jamais avoir un certificat dont la date de validité est dépassée est clairement un gros bonus pour vous.
Part de marché de Let’s Encrypt
Au jour ou j’écris cet article, Let’s Encrypt a déjà délivré presque 50M de certificats actifs (47.6M certificats en décembre 2017). Il y a tout juste un an, 13% de tous les sites web utilisant un certificat SSL passaient par Let’s Encrypt. Cela le place en 3e fournisseur mondial, après Comodo et Symantec (source : cet excellent article sur son impact auprès du marché du SSL).
En moyenne, ce sont environ 600K certificats qui sont délivrés chaque jour.
1 – Installez Let’s encrypt
Pour commencer, vous devez installer Let’s Encrypt sur votre serveur. Ce programme vous permet de générer vos certificats sans connaître une seule commande OpenSSL. Vous avez juste à lancer celui ci et renseigner vos informations de certificats (nom de domaine et email de contact). Il est installable depuis github, vous aurez donc besoin d’installer git en premier lieu (s’il n’est pas déjà présent) :
apt install git
git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt --depth=1
Let’s Encrypt est maintenant disponible sur votre serveur, dans le dossier /opt/letsencrypt/.
2 – Générez vos certificats SSL
Let’s Encrypt devra communiquer avec l’autorité principale pour valider votre nom de domaine. Il aura donc besoin d’un serveur web présent pour effectuer cette vérification. Il existe 2 moyens pour cela : configurer votre propre serveur web pour rediriger toute requête de Let’s Encrypt, ou utiliser le serveur web intégré à Let’s Encrypt. La seconde solution étant la plus simple, nous utiliserons celle ci. Elle nécessitera néanmoins de couper votre serveur web durant quelques secondes.
cd /opt/letsencrypt/
service nginx stop
Vous pouvez maintenant générer vos certificats SSL. Je conseille fortement d’utiliser une clé RSA de 4096 bits (avec l’argument rsa-key-size). Indiquez votre nom de domaine avec l’argument d (ici www.isicca.com). Attention, le nom de domaine utilisé doit pointer vers votre serveur.
Lors du premier lancement, Let’s Encrypt téléchargera tous les paquets nécessaires à la génération, laissez le s’occuper de tout pour vous.
/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 certificats sont maintenant prêts et disponibles dans le dossier mentionné. Vous y trouverez les fichiers fullchain.pem, contenant à la fois le certificat public et la chaîne d’autorité, et la clé privée privkey.pem.
ls -hal /etc/letsencrypt/live/www.isicca.com/
Vous pouvez maintenant redémarrer votre serveur web
service nginx start
3 – Renouvelez vos certificats
Par défaut, les certificats générés ont une durée de validité de 3 mois. Bien qu’il soit possible de leur donner une période plus longue lors de la génération, il faudra, à un moment donné, les renouveler.
Il possible de renouveler tous les certificats présents sur le serveur, ou de spécifier un certificat particulier. Pour automatiser ce process, le plus simple est d’utiliser cron :
vi /etc/crontab
//renouveler un certificat 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 //renouveler tous les certificats mensuellement 00 0 1 * * root service nginx stop && /opt/letsencrypt/letsencrypt-auto renew --quiet && service nginx start
4 – Implementez vos certificats dans Nginx ou Apache
Il est assez simple d’implémenter vos certificats SSL dans votre serveur web. Avec Nginx, il suffit juste de changer le port (ou d’ajouter un nouveau vhost) et d’indiquer dans quel dossiers trouver les certificats. La méthode est la même pour Apache, mais il faudra également activer le module ssl avant.
Si vous ne possédez pas encore de serveur web, je vous conseille de lire mon article sur comment installer et configurer LEMP facilement en 4 étapes.
4.1 – Nginx
Editer votre vhost avec les paramètres suivants :
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/; index index.php; }
4.2 – Apache
Premièrement, activez le module SSL, puis, désactivez le vhost SSL fournit par défaut. Ajoutez enfin ces paramètres dans votre configuration :
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>
Finalement, activez le vhost, et relancez Apache :
a2ensite website && service apache2 reload
5 – Plus d’options pour maîtriser Let’s Encrypt comme un pro
5.1 – Générer un certificat pour plusieurs domaines
Il est bien sur possible d’indiquer plusieurs domaines à prendre en charge pour un seul certificat. Ces domaines peuvent être différents, ou il peut s’agir just de sous domaines :
/opt/letsencrypt/letsencrypt-auto certonly --rsa-key-size 4096 --standalone -d www.isicca.com,isicca.com,subdomain.isicca.com,anotherdomain.com
5.2 – Générer un certificat wildcard
Les certificats wildcard seront pris en charge par Let’s Encrypt à partir de février 2018.
5.3 – Utiliser des hooks pour contrôler votre serveur web
Personnellement, je préfère utiliser les commandes de mon serveur pour stopper et démarrer Nginx, mais Let’s encrypt peut gérer cette partie pour nous :
/opt/letsencrypt/letsencrypt-auto certonly --rsa-key-size 4096 --standalone -d www.isicca.com --pre-hook "service nginx stop" --post-hook "service nginx start"
5.4 – Choisir HTTP ou HTTPS pour le serveur web intégré à Let’s Encrypt
Par défaut, le serveur web intégré écoute sur le port 80 (HTTP). Voici comment changer l’écouter pour le port 443 (HTTPS) :
/opt/letsencrypt/letsencrypt-auto certonly --rsa-key-size 4096 --standalone -d www.isicca.com --preferred-challenges tls-sni
5.4 – Générer des certificats depuis un serveur tiers
Si vous n’avez pas accès au terminal de votre serveur, vous pouvez également générer les certificats depuis un autre ordinateur. Dans ce cas, le nom de domaine à sécuriser n’a pas besoin de rediriger vers ce nouveau poste. Il suffit d’indiquer une entrée dans votre configuration 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
5.5 – Ajouter des noms de domaine à un certificat existant
Vous possédez déjà un certificat et souhaitez ajouter un nom de domaine à celui ci :
/opt/letsencrypt/letsencrypt-auto certonly --rsa-key-size 4096 --standalone --cert-name www.isicca.com -d isicca.com
5.6 – Forcer le renouvellement d’un certificat
Si vous essayez de renouveler un certificat, Let’s Encrypt peut refuser la manipulation s’il considère que cela n’est pas nécessaire (plusieurs mois avant la fin de la validité de celui ci par exemple). Mais il est heureusement possible de forcer le renouvellement :
/opt/letsencrypt/letsencrypt-auto certonly --quiet --standalone --force-renewal -d www.isicca.com
5.7 – Révoquer un certificat
Si votre clé est compromise, vous pouvez révoquer votre certificat :
/opt/letsencrypt/letsencrypt-auto revoke --cert-path /etc/letsencrypt/live/www.isicca.com/fullchain.pem --reason keycompromise
Il est également possible de le supprimer totalement du système :
/opt/letsencrypt/letsencrypt-auto delete --cert-name www.isicca.com
5.8 – Changer la rotation des logs
Par défaut, Let’s Encrypt créera un nouveau fichier de log après 1000 entrées dans celui ci. Pour changer cette valeur, il existe un argument spécifique :
/opt/letsencrypt/letsencrypt-auto certonly --rsa-key-size 4096 --standalone -d www.isicca.com --max-log-backups 99
Conclusion
Félicitations, vous avez maintenant générer vos propres certificats avec let’s Encrypt, et sécuriser vos serveurs web avec ceux ci.