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 :
- Confidentialité : Les données échangées sont chiffrées et illisibles pour les tiers.
- Authenticité : Le client peut vérifier qu'il communique bien avec le serveur attendu.
- 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.
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 certification | Créé et signé localement par le serveur lui-même |
Fiable et reconnu par les navigateurs | Considéré comme non sécurisé par les navigateurs |
Utilisé en production | Utilisé 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 :
-
Activer le module SSL
sudo a2enmod ssl
puis redémarrer le serveur Web
sudo systemctl restart apache2
ou
sudo service apache2 restart
-
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.crtLors 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
)
- Country Name (Code du pays, ex :
-
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> -
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
infoSi 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.
-
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 -
Tester dans un navigateur
Accédez à
https://site1.fr
.astuceVous 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 :
-
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 -
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;
}
} -
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;
} -
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 nginxou
sudo service nginx restart
-
Tester dans un navigateur
Accédez à
https://site1.fr
.astuceComme pour Apache, vous recevrez une alerte de certificat non sécurisé que vous pouvez ignorer.
Comparaison Apache / Nginx pour HTTPS
Critère | Apache | Nginx |
---|---|---|
Gestion de TLS/SSL | Module mod_ssl à ajouter | Configuration intégrée |
Redirection HTTP -> HTTPS | Via .htaccess ou fichier config | Directement dans le bloc server |
Simplicité | Nécessite parfois des modules | Configurations plus concises |
Test de mémorisation/compréhension
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 :
-
Sites à configurer :
portfolio.fr
: hébergé sur Apacheprojet.fr
: hébergé sur Nginx
-
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.
-
É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.
- Apache : Configurez
-
Modifier le fichier
hosts
pour tester localement. -
Bonus : Testez l'installation avec votre navigateur (ou avec
curl
).
Une solution
Vous devez être connecté pour voir le contenu.