Passer son site en HTTPS avec NGINX et Let’s Encrypt

Depuis quelques années maintenant, le HTTPS est devenu la norme plus pas plupart des sites internet que vous consultez. Même si vous ne faites que consulter le site sans interagir avec en remplissant un formulaire par exemple, il pourrait avoir été modifié avant de s’afficher devant vous. Par contre, si le site n’est pas en HTTPS et que vous remplissez des formulaires de connexion par exemple, les informations passent en clair … Attention, le HTTPS ne garantit absolument pas une sécurité parfaite et sans faille.

N’importe qui peut faire un joli petit cadenas avec un faux site qui ressemblent au vrai. C’est un exemple parmi tant d’autres donc non le HTTPS n’est pas un signe qu’il faut faire une confiance absolue. Je dirais même que c’est juste normal de le proposer sur son site, surtout depuis l’arrivée de Let’s Encrypt. Mais avant toute chose, essayons d’en savoir un peu plus pour bien comprendre de quoi il s’agit.

C’est quoi le HTTPS ?

Le HTTPS est une version améliorée du protocole HTTP, utilisé pour transférer des données entre votre navigateur et un site web. La différence majeure est que HTTPS ajoute une couche de sécurité appelée « SSL/TLS » pour chiffrer les données échangées.

Lorsque vous visitez un site en HTTPS, une « poignée de main » sécurisée s’effectue entre votre navigateur et le serveur du site. Cette étape permet de vérifier l’authenticité du site (grâce à un certificat SSL) et d’établir une clé de chiffrement unique pour la session en cours.

Une fois la connexion établie, toutes les données échangées entre vous et le site sont chiffrées. Cela signifie que si quelqu’un intercepte ces données, il ne pourra pas les lire ni les modifier, car elles seront illisibles sans la clé de chiffrement.

Quel rapport entre le HTTPS et Let’s Encrypt ?

Let’s Encrypt est un service gratuit et automatisé qui fournit des certificats SSL/TLS pour sécuriser les sites internet avec le protocole HTTPS. Cette autorité de certification a pour mission de rendre la sécurité en ligne accessible à tous, en simplifiant le processus d’obtention et d’installation de certificats SSL.

Le rapport entre Let’s Encrypt et HTTPS est étroit, car un certificat SSL est nécessaire pour activer le protocole HTTPS sur un site web. Grâce à Let’s Encrypt, les propriétaires de sites web peuvent obtenir un certificat SSL sans frais et sans complications. Cela encourage l’adoption généralisée du HTTPS, rendant le web plus sûr pour tout le monde. Il faut savoir qu’avant l’arrivée de cette solution, il fallait payer pour obtenir un certificat pour proposer un site en HTTPS. Croyez-moi ce n’était pas donné. Si vous le voulez, vous pouvez d’ailleurs encore payer vos certificats à d’autres fournisseurs que Let’s Encrypt.

Ici on va utiliser Let’s Encrypt comme la plupart des gens aujourd’hui qui veulent passer leur site en HTTPS, c’est gratuit, facile et rapide à mettre en place, et ça marche bien. Heureusement qu’ils sont arrivés sur le marché des certificats SSL/TLS !

Changer son site en HTTPS avec Let’s Encrypt ?

Avant de commencer, voici quelques observations que j’ai pu faire. Si vous lancez un nouveau site, et je vous conseille de passer votre configuration directement en HTTPS avant d’installer quoi que ce soit d’autre comme un WordPress par exemple. Dans ce cas, je vous conseille de faire un simple fichier index.html ou index.php pour avoir la racine de votre site qui répond sur une page toute simple. Vous pouvez même utiliser l’index par défaut fourni par NGINX, cela évite des complications inutiles.

En effet, si vous installez votre CMS ou application avant le HTTPS, il faudra ensuite selon votre CMS, modifier à nouveau la configuration pour le forcer en HTTPS. Si votre domaine est déjà en HTTPS, il devrait normalement s’installer directement sur la bonne URL en HTTPS. Bien évidemment, cela dépend, selon ce que vous allez utiliser comme logiciel, mais par exemple WordPress prendra l’URL de base lors de l’installation et il faudra ensuite la changer.

Si votre site est déjà en production, là, c’est autre chose. J’ai un mot qui me vient à l’esprit, prudence. Mais je suis d’accord avec cette idée, il faut passer votre site en HTTPS pour de nombreuses raisons. Il faudra éventuellement faire des redirection même si avec ce qui va suivre, c’est déjà plus ou moins forcé vers le HTTPS dans NGINX. Vérifiez bien en amont ce qu’il faut éventuellement changer dans votre CMS ou l’application que vous utilisez pour ne pas casser votre référencement. Avoir des pages qui répondent en HTTP et en HTTPS est un autre exemple parmi d’autres de trucs pas très sympathiques qu’il veut mieux éviter tout simplement. Cet aspect mériterait encore une fois un article complet sur le sujet, mais ce n’est pas l’objet de ce post. 

Pour terminer sur cet aspect malgré tout, si vous avez les compétences et envie de bien faire pour les moteurs de recherche, passez votre site en HTTPS même s’il est très simple. C’est un bon signal.

Installer Let’s Encrypt pour avoir le HTTPS sur son site

Pour la suite, je vais partir du principe que vous avez un site basique en HTTP normal sur le port 80. Normalement, votre fichier de configuration dans NGINX pour votre site devrait ressembler à quelque chose comme ça :

server {
    listen 80;
    listen [::]:80;

    root /var/www/tuto-zonetuto.fr;
    index index.php;

    server_name tuto-zonetuto.fr;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        include fastcgi_params;
    }
}

Une configuration d’exemple classique et minimale pour faire fonctionner un site web avec NGINX. Maintenant rendez-vous sur votre serveur Ubuntu ou Debian et commencez par installer le paquet Let’s Encrypt :

sudo apt install letsencrypt

Let’s Encrypt va également installer quelque chose qui est un utilitaire qui est le « certbot.timer ». Il est prévu pour assurer le renouvellement automatique des certificats. Ce serait dommage que le HTTPS tombe un beau dimanche matin avec une horrible erreur de sécurité concernant un certificat invalide. Ça marche aussi quand vous partez en vacances pour information. Il vérifie la validité des certificats SSL dans le système deux fois par jour et prolonge ceux qui expirent dans les 30 prochains jours. Pour vous assurer qu’il fonctionne, entrez :

sudo systemctl status certbot.timer

S’il y a du vert, c’est bon, c’est que ça marche ! Pour poursuivre la mise en place du HTTPS sur votre site de la manière la plus facile possible, installez ensuite ce paquet :

sudo apt install python3-certbot-nginx

Maintenant, on passe aux choses sérieuses et certbot va passer notre site en HTTPS en modifiant la configuration NGINX de votre site, tapez la commande suivante :

sudo certbot --nginx --agree-tos --preferred-challenges http -d tuto-zonetuto.fr

Cette commande travaille un peu et devrait vous donner quelque chose qui ressemble à ça avec votre propre nom de domaine :

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for tuto-zonetuto.fr

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/tuto-zonetuto.fr/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/tuto-zonetuto.fr/privkey.pem
This certificate expires on 2023-07-02.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for tuto-zonetuto.fr to /etc/nginx/sites-enabled/tuto-zonetuto.fr
Congratulations! You have successfully enabled HTTPS on https://tuto-zonetuto.fr

Voilà, c’est déjà bon … Facile non ? N’oubliez pas de changer vos URL dans votre application pour éviter tout conflit. Comme je vous l’ai dit plus haut ça dépend, mais cela peut parfois générer des conflits. Ensuite, ça devrait rouler pour longtemps avec un beau site en HTTPS qui fait sérieux. À la prochaine pour le prochain tuto sur ZoneTuto ! 

1 réflexion au sujet de « Passer son site en HTTPS avec NGINX et Let’s Encrypt »

Laisser un commentaire