Mise à jour : utiliser des certificats SSL/TLS Let’s Encrypt gratuits avec NGINX

NGINX | 28 janvier 2021

Note de la rédaction – L’article de blog décrivant la procédure initiale d’utilisation de Let’s Encrypt avec NGINX (publié en février 2016) redirige vers cette page. Les instructions qu’il contient sont obsolètes.

Cet article a été mis à jour afin de ne plus dépendre de certbot‑auto, que l’Electronic Frontier Foundation (EFF) a rendu obsolète dans Certbot 1.10.0 pour Debian et Ubuntu, et dans Certbot 1.11.0 pour tous les autres systèmes d’exploitation. Pour plus de détails et d’autres méthodes d’installation, consultez cet article de l’EFF.

Consultez également notre article de blog consacré à nginx.conf 2015, dans lequel Peter Eckersley et Yan Zhu de l’Electronic Frontier Foundation présentent Let’s Encrypt, qui était alors une nouvelle autorité de certification.

Il est bien connu que le chiffrement SSL/TLS de votre site web permet d’obtenir un meilleur classement dans les résultats de recherche et d’offrir une meilleure sécurité à vos utilisateurs. Cependant, plusieurs obstacles ont empêché les propriétaires de sites web d’adopter le protocole SSL.

Deux des principaux obstacles étaient le coût et les procédures manuelles nécessaires à l’obtention d’un certificat. Mais désormais, grâce à « Let’s Encrypt », ces problèmes ne se posent plus. Let’s Encrypt rend le chiffrement SSL/TLS accessible gratuitement à tous.

Let’s Encrypt est une autorité de certification (AC) gratuite, automatisée et ouverte. Oui, vous avez bien lu : des certificats SSL/TLS gratuits. Les certificats émis par Let’s Encrypt sont aujourd’hui reconnus par la plupart des navigateurs, y compris les plus anciens, comme Internet Explorer sous Windows XP SP3. De plus, Let’s Encrypt automatise entièrement l’émission et le renouvellement des certificats.

Dans cet article de blog, nous expliquons comment utiliser le client Let’s Encrypt pour générer des certificats et comment configurer automatiquement NGINX Open Source et NGINX Plus afin de les utiliser.

Fonctionnement de Let’s Encrypt

Avant d’émettre un certificat, Let’s Encrypt vérifie que vous êtes bien propriétaire de votre domaine. Le client Let’s Encrypt, exécuté sur votre hôte, crée un fichier temporaire (un jeton) contenant les informations requises. Le serveur de validation de Let’s Encrypt effectue ensuite une requête HTTP pour récupérer le fichier et valide le jeton, ce qui permet de vérifier que l’enregistrement DNS de votre domaine pointe vers le serveur sur lequel s’exécute le client Let’s Encrypt.

Prérequis

Avant de commencer avec Let’s Encrypt, vous devez :

  • Avoir installé NGINX ou NGINX Plus.
  • Possédez ou contrôlez le nom de domaine enregistré pour le certificat. Si vous ne disposez pas d’un nom de domaine enregistré, vous pouvez faire appel à un bureau d’enregistrement de noms de domaine, tel que GoDaddy ou dnsexit.
  • Créez un enregistrement DNS qui associe votre nom de domaine à l’adresse IP publique de votre serveur.

Vous pouvez maintenant configurer facilement Let’s Encrypt avec NGINX Open Source ou NGINX Plus (pour faciliter la lecture, nous utiliserons désormais simplement le terme « NGINX »).

Remarque : nous avons testé la procédure décrite dans cet article de blog sous Ubuntu 16.04 (Xenial).

1. Téléchargez le client Let’s Encrypt

Commencez par télécharger le client Let’s Encrypt, « certbot ».

Comme indiqué juste au-dessus, nous avons testé ces instructions sous Ubuntu 16.04. Voici les commandes appropriées pour cette plateforme :

$ apt-get update$ sudo apt-get install certbot
$ apt-get install python-certbot-nginx

Avec Ubuntu 18.04 et les versions ultérieures, utilisez plutôt la version Python 3 :

$ apt-get update$ sudo apt-get install certbot
$ apt-get install python3-certbot-nginx

2. Configurer NGINX

certbot peut configurer automatiquement NGINX pour SSL/TLS. Il recherche et modifie le bloc server de votre configuration NGINX qui contient une directive server_name avec le nom de domaine pour lequel vous demandez un certificat. Dans notre exemple, le domaine est www.example.com.

  1. En supposant que vous partiez d’une nouvelle installation de NGINX, utilisez un éditeur de texte pour créer un fichier dans le répertoire /etc/nginx/conf.d nommé nom-de-domaine.conf (donc, dans notre exemple, www.example.com.conf).
  2. Indiquez votre nom de domaine (ainsi que ses éventuelles variantes) à l’aide de la directive server_name :
server {    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    server_name example.com www.example.com;
}
  1. Enregistrez le fichier, puis exécutez cette commande pour vérifier la syntaxe de votre configuration et redémarrer NGINX :
$ nginx -t && nginx -s reload

3. Obtenir le certificat SSL/TLS

Le plug-in NGINX pour certbot se charge de reconfigurer NGINX et de recharger sa configuration chaque fois que nécessaire.

  1. Exécutez la commande suivante pour générer des certificats avec le plug-in NGINX :
$ sudo certbot --nginx -d example.com -d www.example.com
  1. Répondez aux invites de « certbot » pour configurer vos paramètres HTTPS. Vous devrez notamment saisir votre adresse e-mail et accepter les conditions d’utilisation de Let’s Encrypt.

Une fois la génération du certificat terminée, NGINX se recharge avec les nouveaux paramètres. certbot affiche un message indiquant que le certificat a bien été généré et précisant son emplacement sur votre serveur.

Congratulations! You have successfully enabled https://example.com and https://www.example.com 
-------------------------------------------------------------------------------------
IMPORTANT NOTES: 

Congratulations! Your certificate and chain have been saved at: 
/etc/letsencrypt/live/example.com/fullchain.pem 
Your key file has been saved at: 
/etc/letsencrypt/live/example.com//privkey.pem
Your cert will expire on 2017-12-12.

Remarque: les certificats Let’s Encrypt expirent au bout de 90 jours (le 12/12/2017 dans cet exemple). Pour savoir comment renouveler automatiquement les certificats, consultez la section « Renouvellement automatique des certificats Let’s Encrypt » ci-dessous.

Si vous examinez nom-de-domaine.conf, vous constatez que certbot l’a modifié :

server {    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    server_name  example.com www.example.com;

    listen 443 ssl; # managed by Certbot

    # RSA certificate
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot

    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

    # Redirect non-https traffic to https
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    } # managed by Certbot
}

4. Renouveler automatiquement les certificats Let’s Encrypt

Les certificats Let’s Encrypt expirent au bout de 90 jours. Nous vous recommandons de renouveler automatiquement vos certificats. Pour ce faire, nous ajoutons une tâche cron à un fichier crontab existant.

  1. Ouvrez le fichier « crontab ».
$ crontab -e
  1. Ajoutez la commande « certbot » afin qu’elle s’exécute quotidiennement. Dans cet exemple, nous exécutons la commande tous les jours à midi. La commande vérifie si le certificat du serveur expirera dans les 30 prochains jours et, le cas échéant, le renouvelle. L’option « --quiet » indique à « certbot » de ne générer aucune sortie.
0 12 * * * /usr/bin/certbot renew --quiet
  1. Enregistrez et fermez le fichier. Tous les certificats installés seront automatiquement renouvelés et rechargés.

Résumé

Nous avons installé l’agent Let’s Encrypt afin de générer des certificats SSL/TLS pour un nom de domaine enregistré. Nous avons configuré NGINX pour utiliser ces certificats et mis en place leur renouvellement automatique. Grâce aux certificats Let’s Encrypt pour NGINX et NGINX Plus, vous pouvez disposer en quelques minutes d’un site web simple, sécurisé et opérationnel.

Pour essayer vous-même Let’s Encrypt avec NGINX Plus, commencez votre essai gratuit de 30 jours dès aujourd’hui ou contactez-nous pour discuter de vos cas d’utilisation.

Documentation connexe

Sécurisation du trafic HTTP vers les serveurs en amont
Sécurisation du trafic TCP vers les serveurs en amont
Terminaison SSL avec NGINX


Partager

À propos de l’auteur

Articles de blog associés

Tendances actuelles des technologies cloud natives, de l’ingénierie de plateforme et de l’IA
NGINX | 13/10/2025

Tendances actuelles des technologies cloud natives, de l’ingénierie de plateforme et de l’IA

Découvrez les principaux enseignements tirés des réponses à l’enquête annuelle F5 NGINX sur les dernières tendances en matière de technologies cloud natives, de sécurité, d’ingénierie de plateforme et d’IA.

Quels contrôleurs Ingress NGINX sont affectés par les vulnérabilités CVE-2022-4886, CVE-2023-5043 et CVE-2023-5044 ?
NGINX | 03/11/2023

Quels contrôleurs Ingress NGINX sont affectés par les vulnérabilités CVE-2022-4886, CVE-2023-5043 et CVE-2023-5044 ?

Lorsque de nouvelles CVE sont signalées, il est facile de ne plus savoir si elles concernent un outil de contrôleur Ingress NGINX particulier, car il existe plusieurs projets. Cet article présente les CVE et explique comment distinguer les différents projets de contrôleurs Ingress afin de dissiper toute confusion.

Votre API est-elle en temps réel ? Testez sa latence avec l’outil rtapi de NGINX
NGINX | 11/03/2020

Votre API est-elle en temps réel ? Testez sa latence avec l’outil rtapi de NGINX

Votre API répond-elle aux requêtes en moins de 30 ms ? Si ce n’est pas le cas, il ne s’agit pas d’une API en temps réel offrant la faible latence exigée par la grande majorité des organisations. Mesurez la latence de votre API avec l’outil rtapi de NGINX et découvrez comment NGINX peut l’aider à offrir une réactivité en temps réel.

Un testeur d’expressions régulières pour NGINX et NGINX Plus
NGINX | 11/06/2019

Un testeur d’expressions régulières pour NGINX et NGINX Plus

Le testeur d’expressions régulières (regex) pour NGINX et NGINX Plus vous évite de tâtonner en vous indiquant si une expression régulière utilisée dans un bloc location ou map correspond aux valeurs comme prévu. Il génère la configuration appropriée et affiche les valeurs des groupes de capture.

Caches partagés avec les clusters de cache NGINX Plus, partie 1
NGINX | 24/01/2017

Caches partagés avec les clusters de cache NGINX Plus, partie 1

Optimisez la capacité de votre cache web en le répartissant entre plusieurs serveurs de cache web NGINX ou NGINX Plus. Découvrez comment procéder dans cet article.

Introduction aux microservices
NGINX | 19/05/2015

Introduction aux microservices

Les microservices suscitent actuellement beaucoup d’intérêt. Cet article de blog est le premier d’une série de sept consacrée à la conception, au développement et au déploiement de microservices.