Comment sécuriser son site web en HTTPS ?

Comment sécuriser son site web en HTTPS ?

Introduction

L’utilisation d’HTTPS (HyperText Transfer Protocol Secure) est essentielle pour sécuriser les communications entre un client et un serveur web. Il repose sur le protocole SSL/TLS (Secure Sockets Layer / Transport Layer Security) qui chiffre les données échangées, garantissant ainsi confidentialité, l'intégrité et authentification.

Les serveurs web comme Nginx et Apache2 par exemple, permettent d’implémenter HTTPS en utilisant un certificat SSL/TLS auto signé grâce à OpenSSL.

Qu’est ce que le HTTPS ?

Le HTTPS (HyperText Transfer Protocol Secure) est une version sécurisée du HTTP. Le « S » à la fin de HTTPS signifie « sécurisé ». Cela signifie que toutes les communications entre votre navigateur et le site web sont chiffrées, c’est-à-dire que les données ne sont pas lisibles par un humain ou une machine tant qu'elles n'ont pas été déchiffrées.

Le protocole HTTPS est utilisé pour sécuriser le transport des données de vos utilisateurs et des données sensibles (de paiement par exemple), mais il ne garantit pas que le site web lui-même est fiable. Il ne protège pas non plus d’éventuelles intrusions malveillantes sur le site.

Pourquoi passer au HTTPS ?

Le HTTPS, grâce à un certificat SSL/TLS, protège votre site internet des intrusions malveillantes. Il agit comme un fourgon blindé qui sécurise les échanges entre votre site et ses utilisateurs.

Sans chiffrement SSL/TLS, les hackers peuvent exploiter toute ressource non protégée qui transite entre votre site et votre utilisateur, comme les images, cookies, scripts ou fichiers HTML. Ces attaques peuvent survenir à différents niveaux du réseau, que ce soit via le Wifi public, le fournisseur d’accès à Internet (FAI) ou d'autres points d’interception.

En utilisant HTTPS, vous empêchez que le trafic soit intercepté et lu par un attaquant, mais il ne bloque pas les intrusions visant à injecter des logiciels malveillants ou insérer des publicités non souhaitées. HTTPS protège l’intégrité, la confidentialité et la sécurité des échanges en chiffrant chaque requête, empêchant ainsi la fuite de données sensibles comme des mots de passe ou des informations bancaires.

Qu’est-ce qu’un certificat SSL/TLS

Un certificat SSL/TLS (Secure Sockets Layer / Transport Layer Security en anglais ) est un fichier numérique qui authentifie l'identité d'un site web et permet d'établir une connexion sécurisée entre un serveur et un client ( généralement un navigateur web ). Il garantit la confidentialité et l'intégrité des données échangées grâce au chiffrement.

Il existe plusieurs types de certificats :

  • DV ( Domain Validation ) : Vérifie seulement que le demandeur possède le domaine.
  • OV ( Organization Validation ) : Vérifie l'existence de l'organisation derrière le site.
  • EV ( Extended Validation ) : Vérification approfondie, souvent utilisée par les banques et grandes entreprises.

Installation du HTTPS

L'installation ce fait sur un serveur web. Nous allons voir comment activer le HTTPS sur Apache et sur Nginx dans un environnement Linux Debian.

Dans un premier temps, nous allons mettre à jour l'appareil sur lequel est hébergé le serveur web :

sudo apt update & apt upgrade

Vous avez deux solutions pour mettre en place votre certificat SSL : un certificat auto-signé ou un certificat délivré par une autorité de certification comme Let’s Encrypt.
Le certificat auto-signé est généré par vous-même, sans validation externe, ce qui le rend gratuit mais non reconnu par les navigateurs et ils afficheront un avertissement de sécurité aux visiteurs.

À l’inverse, un certificat émis par Let’s Encrypt est également gratuit, mais il est signé par une autorité de certification reconnue, ce qui garantit la confiance des navigateurs et évite les alertes de sécurité. En choisissant Let’s Encrypt, vous bénéficiez donc d’un bon compromis entre un coût faible et une sécurité reconnue.

Génération du certificat par Let's Encrypt

sudo apt install certbot python3-certbot-nginx  # Pour Nginx
# ou
sudo apt install certbot python3-certbot-apache # Pour Apache

Pour Nginx :

sudo certbot --nginx

Pour Apache :

sudo certbot --apache

Certbot va donc :

  • détecter automatiquement tes hôtes virtuels configurés
  • vous demandez pour quel domaine vous voulez activer HTTPS
  • générer le certificat
  • et configurer le serveur automatiquement

Par défaut Let's Encrypt délivre des certificats valables pendant 90 jours, mais Certbot configure un renouvellement automatique via cron.

Création du certificat auto-signé

Pour mettre en place notre certificat auto-signé, nous allons utiliser OpenSSL.

OpenSSL est un outil open-source qui implémente les protocoles SSL (Secure Sockets Layer) et TLS (Transport Layer Security) pour sécuriser les communications. Il fournit des bibliothèques et des outils en ligne de commande permettant de gérer le chiffrement, les certificats et la sécurité des connexions réseau.

Si vous ne disposez pas de OpenSSL, nous allons l'installer grâce à cette commande :

sudo apt install openssl -y

Nous allons maintenant générer notre certificat avec OpenSSL :

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/certificat.key -out /etc/ssl/certs/certificat.crt

Explication de la commande :

  • -X509 : génère un certificat auto-signé
  • -nodes : n’exige pas de phrase secrète car sinon ça va bloquer au redémarrage de Nginx ou Apache
  • -days 365 : durée de validité du certificat (1 an)
  • -newkey rsa:2048 : crée une clé RSA de 2048 bits
  • -keyout et -out : spécifient les chemins des fichiers de la clé privée et du certificat.

Configurer l'utilisation des certificats sur Nginx

Éditez votre fichier de configuration Nginx :

sudo nano /etc/nginx/sites-available/default
server {
    listen 80;
    server_name exemple.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name exemple.com;

    ssl_certificate /etc/ssl/certs/certificat.crt;
    ssl_certificate_key /etc/ssl/private/certificat.key;

    location / {
        root /var/www/html;
        index index.html;
    }
}
  • listen 80; : Active l'écoute sur le port HTTP (non sécurisé)
  • return 301 https://$host$request_uri; : Redirige toutes requêtes HTTP vers HTTPS
  • listen 443 ssl; : Active l'écoute sur le port HTTPS avec SSL/TLS
  • server_name exemple.com; : Définit le nom de domaine à gérer
  • ssl_certificate : Chemin vers le certificat
  • ssl_certificate_key : Chemin vers la clé privée associée
  • root /var/www/html; : Répertoire des fichiers à servir
  • index index.html; : Fichier affiché par défaut

Pour que les fichiers de configuration de Nginx soient pris en compte, ils doivent être également placés dans le répertoire /etc/nginx/sites-enabled. Vous pouvez soit copier directement le fichier de configuration dans ce répertoire, soit créer un lien symbolique vers le fichier source à l'aide de la commande suivante :

ln -s /etc/nginx/sites-available/votre_fichier.conf /etc/nginx/sites-enabled/

Cela permet à Nginx de charger correctement la configuration lors de son redémarrage.

Puis redémarrer Nginx :

sudo systemctl restart nginx

Configurer l'utilisation des certificats sur Apache2

Modifier également votre fichier de configuration Apache :

sudo nano /etc/apache2/sites-available/default-ssl.conf
<VirtualHost *:80>
    ServerName exemple.com
    ServerAlias www.exemple.com

    # Redirection permanente vers HTTPS
    Redirect permanent / https://exemple.com/
    
</VirtualHost>

<VirtualHost *:443>
    ServerAdmin [email protected]
    ServerName exemple.com
    DocumentRoot /var/www/html

    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/certificat.crt
    SSLCertificateKeyFile /etc/ssl/private/certificat.key

    <Directory /var/www/html>
        AllowOverride All
    </Directory>
</VirtualHost>

Explication de la configuration :

  • Redirect permanent / https://exemple.com/ : cette ligne redirige tout le trafic HTTP vers l’URL HTTPS correspondante (https://exemple.com/).
  • permanent indique une redirection 301 (redirection permanente), ce qui dit aux navigateurs : " Utilisez désormais cette nouvelle URL de façon définitive."
  • Le / signifie que tout chemin demandé sera redirigé.
  • <VirtualHost *:80> : cela définit un hôte virtuel qui écoute toutes les adresses IP de l'appareil (*) sur le port 80, c’est-à-dire le trafic HTTP non sécurisé.
  • <VirtualHost *:443> : Cela permet à apache d'écouter sur le port 443 également avec toutes les adresses IP que possède l'appareil grâce à "*"
  • DocumentRoot /var/www/html : Répertoire ou se trouvent les fichiers du site (HTML, CSS, images ... )
  • SSLEngine on: Active le support SSL/TLS
  • SSLCertificateFile : Indique le chemin du certificat
  • SSLCertificateKeyFile : Spécifie le chemin de la clé privée

Activez ensuite le module SSL et HTTPS puis redémarrez apache :

a2enmod ssl
a2ensite default-ssl
systemctl restart apache2

Vous pourrez désormais accéder à votre site web en HTTPS !

Conclusion

Vous savez désormais comment activer HTTPS sur votre serveur web pour sécuriser les échanges entre vos utilisateurs et votre site. Cette mise en place est essentielle pour protéger les données en transit et renforcer la confiance des visiteurs.

Toutefois, HTTPS ne fait pas tout : pour garantir une sécurité optimale, pensez également à maintenir votre serveur à jour, configurer correctement vos certificats et surveiller régulièrement les vulnérabilités potentielles.

Nous espérons que ce tutoriel vous a été utile ! N’hésitez pas à explorer d’autres tutoriels sur notre site ! L'équipe Make in lab vous remercie !


Pour nous aider à nous améliorer, n'hésitez pas à faire part de vos avis en commentaires ou même à poser vos questions si vous avez besoin d'aide supplémentaire.

Vous pouvez également partager cet article et nous suivre sur Twitter/X :

x.com

ainsi que sur Instagram :

Makeinlab (@ma.in.lab) • Instagram photos and videos
6 Followers, 5 Following, 12 Posts - See Instagram photos and videos from Makeinlab (@ma.in.lab)

Lire plus