Sécuriser Nginx avec HTTPS : Un Guide Étape par Étape

Apprenez à sécuriser votre serveur web Nginx avec HTTPS dans ce guide complet étape par étape. Nous abordons l'obtention de certificats SSL/TLS gratuits auprès de Let's Encrypt en utilisant Certbot, la configuration de Nginx pour des connexions chiffrées, et la mise en œuvre de mesures de sécurité essentielles comme HSTS. Protégez vos données, renforcez la confiance des utilisateurs et améliorez votre SEO avec une configuration HTTPS correctement mise en place.

68 vues

Sécuriser Nginx avec HTTPS : Un Guide Pas à Pas

Dans le paysage numérique actuel, la sécurité est primordiale. L'activation de HTTPS (Hypertext Transfer Protocol Secure) sur votre serveur web Nginx n'est plus une option ; c'est une exigence fondamentale pour protéger les données sensibles, instaurer la confiance des utilisateurs et améliorer le classement de votre site web dans les moteurs de recherche. HTTPS chiffre la communication entre le navigateur d'un utilisateur et votre serveur, empêchant l'écoute clandestine et garantissant l'intégrité des informations transmises.

Ce guide vous accompagnera à travers les étapes essentielles pour sécuriser votre serveur Nginx avec un certificat SSL/TLS, en activant HTTPS. Nous aborderons l'obtention d'un certificat, la configuration de Nginx pour l'utiliser, et la réalisation d'une vérification de base pour s'assurer que tout fonctionne correctement. À la fin de ce guide, vous aurez une présence web plus sécurisée et plus fiable.

1. Comprendre les certificats SSL/TLS

Avant de plonger dans la configuration, abordons brièvement ce que sont les certificats SSL/TLS. Un certificat SSL/TLS est un certificat numérique qui authentifie l'identité d'un site web et permet une connexion chiffrée. Lorsqu'un navigateur se connecte à un site web via HTTPS, il vérifie le certificat du site pour en confirmer l'authenticité et établir un canal sécurisé et chiffré.

Il existe plusieurs types de certificats, mais pour la plupart des sites web, un certificat validé par domaine (DV - Domain Validated) est suffisant. Ce type de certificat vérifie que le demandeur contrôle le nom de domaine, mais n'effectue pas de vérifications approfondies sur l'organisation derrière le domaine.

2. Obtenir un certificat SSL/TLS

Il existe deux principales façons d'obtenir un certificat SSL/TLS pour votre serveur Nginx :

  • Let's Encrypt (Gratuit et Automatisé) : Let's Encrypt est une autorité de certification gratuite, automatisée et ouverte. Elle est fortement recommandée pour la plupart des utilisateurs en raison de sa facilité d'utilisation et de son rapport coût-efficacité. Vous pouvez automatiser le processus d'obtention et de renouvellement des certificats à l'aide d'outils comme Certbot.
  • Autorités de Certification Commerciales (Payantes) : Vous pouvez également acheter des certificats auprès d'AC commerciales comme Comodo, DigiCert ou GoDaddy. Celles-ci offrent souvent des certificats à Validation Étendue (EV - Extended Validation) ou à Validation d'Organisation (OV - Organization Validation), qui offrent un niveau de confiance plus élevé mais sont payants et nécessitent un processus de validation plus complexe.

Pour ce guide, nous nous concentrerons sur l'utilisation de Let's Encrypt avec Certbot, car c'est la méthode la plus accessible et la plus largement adoptée.

2.1 Installation de Certbot

Certbot est un client qui automatise le processus d'obtention et de renouvellement des certificats Let's Encrypt. Le processus d'installation varie légèrement en fonction de votre système d'exploitation et de votre configuration Nginx.

Pour Debian/Ubuntu :

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

Pour CentOS/RHEL/Fedora :

sudo yum install epel-release
sudo yum install certbot python3-certbot-nginx

Note Importante : Assurez-vous que Nginx est en cours d'exécution et accessible via son nom de domaine en HTTP avant de continuer. Certbot a besoin de communiquer avec votre serveur pour vérifier la propriété du domaine.

2.2 Obtention de votre certificat avec Certbot

Une fois Certbot installé, vous pouvez l'utiliser pour obtenir un certificat pour votre domaine. Certbot peut configurer automatiquement Nginx pour vous.

Accédez à votre répertoire de configuration Nginx. Le chemin exact peut varier, mais il s'agit couramment de /etc/nginx/sites-available/.

Exécutez la commande suivante, en remplaçant your_domain.com et www.your_domain.com par vos noms de domaine réels :

sudo certbot --nginx -d your_domain.com -d www.your_domain.com

Certbot va alors :

  1. Demander votre adresse e-mail : Celle-ci est utilisée pour les avis de renouvellement importants et les alertes de sécurité.
  2. Vous demander d'accepter les Conditions de service : Lisez et acceptez.
  3. Vous demander si vous souhaitez partager votre e-mail avec l'EFF : Facultatif.
  4. Détecter vos hôtes virtuels Nginx existants : Il listera les domaines qu'il a trouvés.
  5. Demander comment vous souhaitez gérer HTTPS : Vous aurez généralement deux options :
    • 1 : Pas de redirection - Servir à la fois HTTP et HTTPS, mais ne pas rediriger le trafic HTTP vers HTTPS.
    • 2 : Redirection - Rediriger automatiquement tout le trafic HTTP vers HTTPS. C'est l'option recommandée pour la plupart des utilisateurs.

Choisissez l'option 2 pour une configuration plus sécurisée.

En cas de succès, Certbot vous informera que votre certificat a été installé et configurera le renouvellement automatique.

3. Vérification de votre configuration Nginx

Une fois que Certbot a terminé, il modifie automatiquement vos fichiers de configuration Nginx pour utiliser le nouveau certificat SSL/TLS et configure la redirection si vous avez choisi cette option.

3.1 Vérification des fichiers de configuration Nginx

Vous pouvez examiner le fichier de configuration Nginx de votre site (par exemple, /etc/nginx/sites-available/your_domain.com) pour voir les modifications. Vous devriez trouver des directives telles que :

server {
    listen 80;
    server_name your_domain.com www.your_domain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name your_domain.com www.your_domain.com;

    ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;

    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # ... other configurations for your site ...
}
  • Le premier bloc server écoute sur le port 80 (HTTP) et redirige toutes les requêtes vers HTTPS.
  • Le deuxième bloc server écoute sur le port 443 (SSL/TLS) et spécifie les chemins vers votre certificat (ssl_certificate) et votre clé privée (ssl_certificate_key).
  • include /etc/letsencrypt/options-ssl-nginx.conf; inclut les paramètres SSL recommandés pour Nginx.
  • ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; est utilisé pour l'échange de paramètres Diffie-Hellman, améliorant la sécurité.

3.2 Test de la configuration Nginx

Avant de recharger Nginx, il est crucial de tester votre configuration pour les erreurs de syntaxe :

sudo nginx -t

Si le test est réussi, vous verrez une sortie comme :

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

3.3 Rechargement de Nginx

Une fois que le test de configuration est réussi, rechargez Nginx pour appliquer les modifications :

sudo systemctl reload nginx

3.4 Vérification de HTTPS dans votre navigateur

Ouvrez votre navigateur web et naviguez vers votre domaine en utilisant https://your_domain.com. Vous devriez voir une icône de cadenas dans la barre d'adresse, indiquant une connexion sécurisée. Cliquer sur le cadenas fournira souvent des détails sur le certificat.

4. Renouvellement automatique

Les certificats Let's Encrypt sont valides pendant 90 jours. Certbot configure automatiquement un service système (généralement une tâche cron ou un minuteur systemd) pour renouveler vos certificats avant leur expiration. Vous pouvez tester le processus de renouvellement sans réellement renouveler le certificat en exécutant :

sudo certbot renew --dry-run

Cette commande simule le processus de renouvellement et vous alertera de tout problème potentiel.

5. Configuration SSL/TLS avancée (Facultatif)

Bien que Certbot gère une grande partie de la configuration de base, vous pourriez vouloir affiner vos paramètres SSL/TLS pour une sécurité ou des performances améliorées.

5.1 Versions du protocole SSL

Il est recommandé de désactiver les versions de protocole SSL/TLS plus anciennes et non sécurisées comme SSLv2 et SSLv3, ainsi que TLSv1.0 et TLSv1.1. Les navigateurs et serveurs modernes prennent en charge TLSv1.2 et TLSv1.3.

Ajoutez ou modifiez la directive ssl_protocols dans votre bloc server (dans la configuration 443 ssl) :

ssl_protocols TLSv1.2 TLSv1.3;

5.2 Suites de chiffrement

Les suites de chiffrement déterminent les algorithmes de chiffrement utilisés pour la connexion SSL/TLS. Vous pouvez spécifier des suites de chiffrement préférées pour garantir un chiffrement fort.

ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;

Astuce : Vous pouvez utiliser des outils en ligne comme Mozilla SSL Configuration Generator pour générer des paramètres SSL recommandés adaptés aux capacités de votre serveur.

5.3 HSTS (HTTP Strict Transport Security)

HSTS est une fonctionnalité de sécurité qui force les navigateurs à interagir avec votre site web uniquement via HTTPS. Une fois qu'un navigateur a visité votre site avec HSTS activé, il utilisera automatiquement HTTPS pour toutes les futures visites, même si l'utilisateur tape http:// ou clique sur un lien http://.

Pour activer HSTS, ajoutez ce qui suit à votre bloc server écoutant sur le port 443 :

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
  • max-age=31536000 : Définit la durée pendant laquelle le navigateur doit se souvenir de n'utiliser que HTTPS (31 536 000 secondes = 1 an).
  • includeSubDomains : Applique la politique HSTS à tous les sous-domaines.

Attention : Activez HSTS avec prudence. Une fois défini, il peut être difficile de revenir en arrière. Commencez avec une valeur max-age courte (par exemple, 1 heure) pendant les tests. Assurez-vous que votre HTTPS fonctionne parfaitement avant de définir un max-age long.

6. Dépannage des problèmes courants

  • Certbot échoue à vérifier le domaine :
    • Assurez-vous que les enregistrements DNS de votre domaine pointent correctement vers l'adresse IP de votre serveur.
    • Vérifiez que Nginx est en cours d'exécution et accessible via HTTP sur le port 80.
    • Vérifiez les règles de pare-feu pour vous assurer que le port 80 est ouvert.
  • Nginx ne parvient pas à recharger :
    • Exécutez sudo nginx -t pour identifier les erreurs de syntaxe dans vos fichiers de configuration.
    • Vérifiez les journaux d'erreurs Nginx (/var/log/nginx/error.log).
  • Site web inaccessible via HTTPS :
    • Assurez-vous que le port 443 est ouvert dans votre pare-feu.
    • Vérifiez que la directive listen 443 ssl; est présente et correcte.
    • Vérifiez que les chemins vers ssl_certificate et ssl_certificate_key sont exacts.

Conclusion

Sécuriser votre serveur Nginx avec HTTPS est une étape cruciale pour établir une présence en ligne fiable et sécurisée. En suivant ce guide, vous avez appris à obtenir et à configurer des certificats SSL/TLS, à automatiser les renouvellements et à implémenter des améliorations de sécurité de base. L'examen régulier de votre configuration SSL/TLS et la mise à jour de votre logiciel de serveur sont des pratiques essentielles pour maintenir une sécurité robuste.

La mise en œuvre de HTTPS est une étape significative dans la gestion moderne des serveurs web. Elle protège non seulement les données de vos utilisateurs, mais a également un impact positif sur la réputation de votre site et sa visibilité dans les moteurs de recherche. Continuez à explorer les configurations Nginx avancées et les meilleures pratiques de sécurité pour améliorer encore les performances et la résilience de votre serveur.