Aller au contenu principal

Mise en place de l'HTTPS

Création d'un certificat auto-signé, pour Apache et Nginx.

Notions théoriques

L'HTTPS (HyperText Transfer Protocol Secure) est une version sécurisée du protocole HTTP.

L'HTTPS utilise un chiffrement TLS (Transport Layer Security) pour protéger les données échangées entre le client Web (navigateur) et le serveur Web.

Cela garantit :

  1. Confidentialité : Les données échangées sont chiffrées et illisibles pour les tiers.
  2. Authenticité : Le client peut vérifier qu'il communique bien avec le serveur attendu.
  3. Intégrité : Les données ne peuvent pas être altérées en transit.

Pour mettre en place HTTPS, un certificat SSL/TLS est nécessaire.

Ce certificat peut être :

  • signé par une autorité de certification (comme Let's Encrypt) https://letsencrypt.org/fr/
  • ou généré en interne avec un certificat auto-signé pour des environnements de test.
remarque

HTTPS est un protocole de communication Internet qui, associé au protocole TLS (ou plus anciennement SSL), permet de garantir au client 3 niveaux de protection :

  • Authentification du site Web : le client est sûr de communiquer avec le bon site Web.
  • Confidentialité des données : les données transmises par le client, entre le navigateur et le serveur Web, sont chiffrées.
  • Intégrité des données : les données ne sont ni modifiées, ni corrompues durant leur transfert.

Comparaison certificat signé / auto-signé

Différences entre un certificat signé et un certificat auto-signé

Certificat signéCertificat auto-signé
Certifié par une autorité de certificationCréé et signé localement par le serveur lui-même
Fiable et reconnu par les navigateursConsidéré comme non sécurisé par les navigateurs
Utilisé en productionUtilisé pour des tests ou environnements internes

Exemple pratique

Nous allons voir comment configurer un certificat auto-signé pour Apache et Nginx.

Configurer HTTPS sur Apache

Étapes :

  1. Activer le module SSL

    sudo a2enmod ssl

    puis redémarrer le serveur Web

    sudo systemctl restart apache2

    ou

    sudo service apache2 restart
  2. Générer un certificat auto-signé et une clé privée

    Créez un certificat auto-signé avec OpenSSL :

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

    Lors de l'exécution, vous serez invité à fournir des informations :

    • Country Name (Code du pays, ex : FR)
    • State (Région, ex : Ile-de-France)
    • Locality (Ville, ex : Paris)
    • Organization Name (Nom de l'organisation)
    • Common Name (Nom du domaine, ex : site1.fr)
  3. Créer un fichier de configuration SSL pour Apache

    Créez un fichier spécifique pour votre site en HTTPS :

    sudo nano /etc/apache2/sites-available/site1-ssl.conf

    Contenu du fichier :

    <VirtualHost *:443>
    ServerName site1.fr
    DocumentRoot /var/www/site1

    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
    SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key

    <Directory /var/www/site1>
    AllowOverride All
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/site1_error.log
    CustomLog ${APACHE_LOG_DIR}/site1_access.log combined
    </VirtualHost>
  4. Modifier le fichier hosts sur la machine cliente (si nécessaire)

    Ajoutez l'adresse IP du serveur avec le nom de domaine :

    ip_serveur site1.fr
    info

    Si vous n'avez pas accès à un serveur DNS (Domain Name System), vous devez modifier le fichier hosts de votre machine pour établir une association manuelle entre l'adresse IP du serveur et le nom de domaine souhaité.

    Le fichier hosts agit comme une petite base de données locale, permettant à votre système d'exploitation de résoudre un nom de domaine (par exemple, site1.fr) en une adresse IP (par exemple, 192.168.1.10) sans passer par un serveur DNS.

    Cette méthode est utile pour les environnements de développement ou de test où il n'est pas nécessaire de configurer un DNS public ou interne.

    En pratique, cela vous permet de configurer un virtualhost et d'accéder à vos sites hébergés en saisissant des noms de domaine personnalisés dans votre navigateur, plutôt que de devoir utiliser des adresses IP directement.

  5. Activer la configuration et redémarrer Apache

    Activez le site HTTPS :

    sudo a2ensite site1-ssl

    et redémarrez Apache :

    sudo systemctl restart apache2

    ou
    ```bash
    sudo service apache2 restart
  6. Tester dans un navigateur

    Accédez à https://site1.fr.

    astuce

    Vous recevrez une alerte indiquant que le certificat n'est pas sécurisé, car il est auto-signé.

    Vous pouvez ignorer l'avertissement pour poursuivre.

Configurer HTTPS sur Nginx

Étapes :

  1. Générer un certificat auto-signé et une clé privée

    Utilisez la commande suivante pour générer un certificat et une clé privée :

    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    -keyout /etc/ssl/private/nginx-selfsigned.key \
    -out /etc/ssl/certs/nginx-selfsigned.crt
  2. Créer une configuration Nginx pour HTTPS

    Modifiez ou créez un fichier de configuration pour votre site :

    sudo nano /etc/nginx/sites-available/site1

    Contenu du fichier :

    server {
    listen 443 ssl;
    server_name site1.fr;

    ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
    ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;

    root /var/www/site1;
    index index.html;

    location / {
    try_files $uri $uri/ =404;
    }
    }
  3. Activer le site HTTPS et désactiver HTTP

    Si vous voulez désactiver HTTP (port 80), modifiez ou supprimez le bloc server pour le port 80 dans le même fichier :

    server {
    listen 80;
    server_name site1.fr;
    return 301 https://$host$request_uri;
    }
  4. Activer la configuration et redémarrer Nginx

    Créez un lien symbolique vers sites-enabled :

    sudo ln -s /etc/nginx/sites-available/site1 /etc/nginx/sites-enabled/
    sudo nginx -t

    et redémarrez Nginx :
    ```bash
    sudo systemctl restart nginx

    ou

    sudo service nginx restart
  5. Tester dans un navigateur

    Accédez à https://site1.fr.

    astuce

    Comme pour Apache, vous recevrez une alerte de certificat non sécurisé que vous pouvez ignorer.

Comparaison Apache / Nginx pour HTTPS

CritèreApacheNginx
Gestion de TLS/SSLModule mod_ssl à ajouterConfiguration intégrée
Redirection HTTP -> HTTPSVia .htaccess ou fichier configDirectement dans le bloc server
SimplicitéNécessite parfois des modulesConfigurations plus concises

Test de mémorisation/compréhension


Qu'est-ce que l'HTTPS ?


Qu'est-ce qu'un certificat auto-signé ?


Quel fichier configure les certificats SSL pour Apache ?


Quelle commande permet de vérifier la validité de la configuration Nginx ?


Quelle directive désactive HTTP dans Nginx ?


TP pour réfléchir et résoudre des problèmes

Dans ce TP, vous allez configurer l'HTTPS sur deux serveurs (Apache et Nginx) avec les spécifications suivantes :

  1. Sites à configurer :

    • portfolio.fr : hébergé sur Apache
    • projet.fr : hébergé sur Nginx
  2. Prérequis :

    • Générer des certificats auto-signés pour chaque serveur.
    • Configurer les VirtualHosts pour chaque site.
    • Ajouter une redirection de HTTP vers HTTPS.
  3. Étapes :

    • Apache : Configurez portfolio.fr avec HTTPS en suivant les étapes indiquées dans l'exemple pratique.
    • Nginx : Configurez projet.fr avec HTTPS en suivant les étapes indiquées dans l'exemple pratique.
  4. Modifier le fichier hosts pour tester localement.

  5. Bonus : Testez l'installation avec votre navigateur (ou avec curl).

Une solution