Comment sécuriser Nginx avec Let’s Encrypt sur Rocky Linux 9



De nos jours, l’utilisation d’un serveur web dépourvu de la protection SSL/TLS est inconcevable. L’absence de cette sécurité non seulement compromet vos données et celles de vos visiteurs, mais peut aussi impacter négativement votre référencement sur les moteurs de recherche. Let’s Encrypt se présente comme une autorité de certification (CA) gratuite et automatisée, offrant des certificats SSL/TLS. Rocky Linux, une distribution Linux robuste et performante, est une plateforme idéale pour héberger votre serveur web Nginx. Dans ce guide, nous vous expliquons en détail comment sécuriser votre serveur Nginx sous Rocky Linux 9 en utilisant Let’s Encrypt.

Prérequis Essentiels

Avant de débuter, assurez-vous de disposer des éléments suivants :

  • Une installation fonctionnelle de Rocky Linux 9.
  • Nginx installé et correctement configuré.
  • Un nom de domaine pointant vers votre serveur.
  • Un compte utilisateur avec privilèges root ou sudo.

Installation de Certbot

Certbot est un outil puissant et facile d’utilisation, conçu pour l’obtention et la gestion des certificats Let’s Encrypt. Il propose une interface en ligne de commande intuitive et prend en charge divers serveurs web, y compris Nginx.

1. Mise à jour des dépôts:

sudo dnf update

2. Installation du paquet EPEL:

Le paquet EPEL (Extra Packages for Enterprise Linux) enrichit Rocky Linux de packages supplémentaires utiles.

sudo dnf install epel-release

3. Installation de Certbot:

sudo dnf install certbot

Configuration de Nginx pour Let’s Encrypt

Pour que Certbot puisse générer et installer automatiquement les certificats SSL/TLS pour votre serveur Nginx, certaines modifications de la configuration de votre serveur web sont nécessaires.

1. Création d’une directive d’hébergement Nginx:

Créez un nouveau fichier de configuration pour votre site web dans le répertoire /etc/nginx/conf.d/. Par exemple, pour un site nommé exemple.fr, créez le fichier exemple.fr.conf avec le contenu suivant:

server {
  listen 80;
  server_name exemple.fr www.exemple.fr;

  location / {
    root /var/www/html/exemple.fr;
    index index.html index.htm;
  }
}

server {
  listen 443 ssl http2;
  server_name exemple.fr www.exemple.fr;

  ssl_certificate /etc/letsencrypt/live/exemple.fr/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/exemple.fr/privkey.pem;
  include /etc/nginx/ssl-params.conf;

  location / {
    root /var/www/html/exemple.fr;
    index index.html index.htm;
  }
}

Explication du code:

  • listen 80;: Indique l’écoute du port HTTP (80).
  • listen 443 ssl http2;: Indique l’écoute du port HTTPS (443) avec SSL/TLS activé et prise en charge du protocole HTTP/2.
  • server_name exemple.fr www.exemple.fr;: Détermine les noms de domaine que ce serveur traitera.
  • ssl_certificate /etc/letsencrypt/live/exemple.fr/fullchain.pem;: Spécifie le chemin vers le certificat SSL/TLS combiné.
  • ssl_certificate_key /etc/letsencrypt/live/exemple.fr/privkey.pem;: Définit le chemin vers la clé privée SSL/TLS.
  • include /etc/nginx/ssl-params.conf;: Ajoute des paramètres SSL/TLS supplémentaires pour renforcer la sécurité.

2. Création d’un fichier de paramètres SSL:

Créez le fichier /etc/nginx/ssl-params.conf avec le contenu suivant :

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/exemple.fr/chain.pem;

Explication du code:

  • ssl_protocols TLSv1.2 TLSv1.3;: Précise les protocoles TLS supportés, en donnant la priorité aux versions les plus sûres.
  • ssl_ciphers ...: Indique les suites de chiffrement autorisées, en favorisant les algorithmes modernes et robustes.
  • ssl_prefer_server_ciphers on;: Laisse Nginx choisir la suite de chiffrement la plus sécurisée parmi celles négociées.
  • ssl_session_cache shared:SSL:10m;: Active la mise en cache des sessions SSL, diminuant la latence des connexions.
  • ssl_session_timeout 10m;: Fixe la durée pendant laquelle les sessions SSL sont conservées en cache.
  • ssl_stapling on;: Active la validation de la chaîne de certificats, améliorant la sécurité et la performance.
  • ssl_stapling_verify on;: Vérifie la validité des certificats dans la chaîne.
  • ssl_trusted_certificate /etc/letsencrypt/live/exemple.fr/chain.pem;: Précise le chemin vers le fichier de la chaîne de certificats.

3. Redémarrage de Nginx:

sudo systemctl restart nginx

Obtention et Installation d’un Certificat Let’s Encrypt

Une fois Nginx configuré pour Let’s Encrypt, vous pouvez obtenir votre certificat en utilisant l’outil Certbot.

1. Exécution de Certbot:

sudo certbot certonly --nginx -d exemple.fr -d www.exemple.fr

Explication des options:

  • certonly: Demande à Certbot de générer uniquement le certificat, sans automatiser de configuration supplémentaire.
  • --nginx: Indique à Certbot d’utiliser le plugin Nginx pour automatiser la configuration.
  • -d exemple.fr: Spécifie le domaine principal pour lequel vous désirez un certificat.
  • -d www.exemple.fr: Spécifie un domaine additionnel, si nécessaire.

2. Vérification de la configuration:

Après l’exécution de la commande, Certbot confirmera que le certificat a été généré avec succès. Vous pouvez vérifier que les certificats sont bien présents dans le répertoire /etc/letsencrypt/live/exemple.fr/.

3. Redémarrage de Nginx:

sudo systemctl restart nginx

Configuration du Renouvellement Automatique

Let’s Encrypt émet des certificats avec une validité de 90 jours. Afin d’éviter toute interruption de service, il est crucial de configurer le renouvellement automatique de ces certificats.

1. Activation du service Certbot:

sudo systemctl enable certbot

2. Configuration de la tâche cron:

Certbot intègre une commande renew pouvant être utilisée pour renouveler les certificats. Programmez une tâche cron pour exécuter cette commande régulièrement.

sudo crontab -e

Ajoutez la ligne suivante dans le fichier crontab:

0 0 * * * root /usr/bin/certbot renew --quiet >> /var/log/letsencrypt/renew.log 2>&1

Explication de la tâche cron:

  • 0 0 * * *: Exécute la commande chaque jour à 00h00.
  • root: Exécute la commande en tant qu’utilisateur root.
  • /usr/bin/certbot renew: Exécute la commande renew de Certbot.
  • --quiet: Supprime les messages de sortie standard et d’erreur.
  • >> /var/log/letsencrypt/renew.log: Redirige la sortie standard vers le fichier journal renew.log.
  • 2>&1: Redirige la sortie d’erreur vers le fichier journal.

Conclusion

En suivant les étapes décrites ci-dessus, vous avez sécurisé votre serveur web Nginx sous Rocky Linux 9 avec Let’s Encrypt. Vous avez appris à installer Certbot, à configurer Nginx pour l’intégration avec Let’s Encrypt, à obtenir et installer un certificat SSL/TLS, et à paramétrer le renouvellement automatique de vos certificats.

L’utilisation de certificats SSL/TLS est indispensable pour la sécurité de votre site web et la confiance de vos utilisateurs. En utilisant Let’s Encrypt, vous pouvez bénéficier de la protection SSL/TLS gratuitement et en toute simplicité. N’oubliez pas de suivre les recommandations de Let’s Encrypt pour le renouvellement automatique et de vérifier régulièrement l’état de vos certificats.

FAQ

1. Est-il possible de sécuriser plusieurs domaines avec un seul certificat Let’s Encrypt?

Oui, vous pouvez sécuriser plusieurs domaines avec un seul certificat Let’s Encrypt en utilisant l’option -d de la commande certbot certonly et en listant tous les domaines souhaités.

2. Que faire si j’obtiens une erreur lors de la génération du certificat?

Si vous rencontrez une erreur, consultez la documentation de Certbot et les messages d’erreur pour identifier le problème. Les problèmes courants incluent une configuration incorrecte de Nginx, des soucis de résolution de nom de domaine ou des restrictions de pare-feu.

3. Comment vérifier si le certificat est bien installé?

Vous pouvez vérifier l’installation correcte du certificat en utilisant un outil de test SSL/TLS tel que SSL Labs (https://www.ssllabs.com/ssltest/).

4. Quelle est la durée de validité d’un certificat Let’s Encrypt?

Les certificats Let’s Encrypt sont valides pendant 90 jours, mais Certbot les renouvelle automatiquement si vous avez configuré le renouvellement automatique.

5. Peut-on utiliser Let’s Encrypt avec un serveur web autre que Nginx?

Oui, Certbot prend en charge divers serveurs web, dont Apache, Caddy et Traefik.

6. Que faire si mon certificat expire?

Si votre certificat expire, votre site web affichera une erreur de sécurité. Bien que Certbot devrait renouveler automatiquement le certificat, il est essentiel de vérifier régulièrement l’état de vos certificats et de respecter les recommandations de Let’s Encrypt.

7. Qu’est-ce que le protocole HTTP/2 ?

HTTP/2 est une version améliorée du protocole HTTP, optimisant les performances et la sécurité des sites web. Compatible avec les navigateurs modernes, il réduit la latence des connexions.

8. Comment améliorer la sécurité SSL/TLS de mon serveur?

Renforcez la sécurité SSL/TLS de votre serveur en utilisant des suites de chiffrement robustes, en activant TLS 1.3 et en adoptant une configuration SSL/TLS appropriée.

9. Peut-on désactiver le renouvellement automatique de mon certificat?

Oui, désactivez le renouvellement automatique en supprimant la tâche cron créée ou en utilisant l’option --no-auto-renew de la commande certbot certonly.

10. Où puis-je trouver plus d’informations sur Let’s Encrypt et Certbot?

Consultez les sites web officiels de Let’s Encrypt et de Certbot pour plus d’informations :

Mots-clés:

Rocky Linux, Nginx, Let’s Encrypt, SSL/TLS, sécurité web, certificat numérique, Certbot, HTTP/2, renouvellement automatique, configuration serveur, guide pratique, sécurité informatique