Le trafic de votre serveur circule en clair. Quel protocole faudrait-il mettre en place pour le chiffrer ?
HTTPS, c’est-à-dire HTTP sur TLS (anciennement SSL).
Concrètement :
- activer le module :
a2enmod ssl ;
- configurer un VirtualHost sur le port 443 avec un certificat ;
- rediriger le port 80 vers 443.
Le certificat peut être auto-signé en TP, ou délivré par une autorité comme Let’s Encrypt en production.
Mise en place pas à pas (certificat auto-signé)
1. Activer le module SSL
2. Générer la clé et le certificat (valable un an)
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/apache-tp.key \
-out /etc/ssl/certs/apache-tp.crt \
-subj "/C=FR/O=TP BTS CIEL/CN=kali.local"
-x509 produit directement un certificat auto-signé.
-nodes laisse la clé sans mot de passe, sinon Apache le demanderait à chaque démarrage.
CN doit correspondre au nom ou à l’IP utilisé dans le navigateur.
3. Créer le VirtualHost dans /etc/apache2/sites-available/tp-ssl.conf
<VirtualHost *:443>
ServerName kali.local
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/ssl/certs/apache-tp.crt
SSLCertificateKeyFile /etc/ssl/private/apache-tp.key
ErrorLog ${APACHE_LOG_DIR}/ssl_error.log
CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
</VirtualHost>
Sur KaliUn modèle existe déjà : a2ensite default-ssl l’active directement, avec le certificat « snakeoil » fourni par le système.
4. Activer le site, tester la syntaxe, recharger
$ a2ensite tp-ssl
$ apachectl configtest # doit afficher : Syntax OK
$ systemctl reload apache2
5. Vérifier
$ ss -tlnp | grep :443
$ curl -kI https://localhost
-k dit à curl d’accepter le certificat auto-signé.
6. Rediriger le port 80 vers 443 (facultatif) : dans le <VirtualHost *:80> de 000-default.conf, ajoutez
Redirect permanent / https://kali.local/
puis systemctl reload apache2.
À savoirLe navigateur affichera un avertissement « connexion non sécurisée » : personne n’a signé ce certificat, mais le chiffrement fonctionne. En production, utilisez Let’s Encrypt (certbot --apache) avec un nom de domaine public. La clé privée reste dans /etc/ssl/private/, illisible pour les autres utilisateurs.