Mise en place de TLS/SSL

Nous avons nos deux Virtual Hosts bien configurés, notre WAF en place et un module anti Dos. La dernière chose qu’il nous manque ici, c’est du SSL. Bah ouais… On va pas laisser nos utilisateurs envoyer leurs identifiants en clair sur le réseau quand même !

Pour suivre cet article vous allez avoir besoin d’un certificat. Soit vous le créez vous même en l’auto signant (coucou OpenSSL), soit vous en récupérez un chez une autorité de certification gratuite comme Let’s Encrypt.

Pour ma part je vais utiliser un certificat auto signé déjà créé afin d’implémenter SSL sur mon premier Virtual Host c’est à dire le site site1.com.

Nous allons donc avoir besoin d’une clé privée, une clé publique et un certificat auto signé :

ss1.png

Voici les lignes de configuration nécessaires pour impléementer SSL sur un Virtual Host :

# Mise en place du HSTS
Header always set Strict-Transport-Security "max-age=63072000;include Subdomains;"
# Activation du SSL
SSLEngine on
# Chemin vers le certificat
SSLCertificateFile "/etc/ssl/ca/localhost.crt"
# Chemin vers la clé privée
SSLCertificateKeyFile "/etc/ssl/ca/keyserveur.pem"
# Les protocoles SSL supportés
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
# Le CipherSuite
SSLCipherSuite RSA
# Et quelques paramètres supplémentaires
SSLCompression off
SSLSessionTickets off

Ici nous nous servons du modules headers afin d’ajouter le header HSTS. Cependant ce module n’est pas activé par défaut. Il faudra donc l’activer (et en passant on activera aussi le module SSL) :

a2enmod headers
a2enmod ssl

En plus de ça il faudra modifier le port d’écoute du Virtual Host :

"<VirtualHost *:443>"

Voici à quoi ressemble le fichier de configuration du Virtual Host avec la configuration SSL :

ssl2.png

Nous n’aurons plus qu’à reload la configuration du serveur :

systemctl reload apache2

Et fournir le mot de passe de la clé privée :

ssl3.png

Pour que notre site soit accessible via HTTPS :

ssl4.png

Le problème ici c’est que notre site ne sera accessible en HTTPS que si l’utilisateur tape dans l’URL : https://site2.com. Et ça niveau sécurité c’est pas folichon… L’idéal, ça serait que l’utilisateur, peu import s’il écrit HTTP ou HTTPS dans sa barre de recherche, tombe directement sur la version HTTPS.

Voici comment moi je fais pour implémenter ce comportement. Tout d’abord, dans le même fichier de configuration je vais créer un Virtual host qui écoute sur le port 80 et lui donner une seule directive qui va lui dire de rediriger tout le trafic en provenance du port 80 vers le port 443 :

ssl5.png

Puis, juste en dessous, je vais créer un second Virtual Host qui écoutera sur le port 443 et dans lequel je placerai toutes les directives relatives à la configuration du site et du SSL :

ssl6.png

Au final voici à quoi ressemblera mon fichier de configuration :

ssl7.png

Ce que nous venons de faire, c’est de l’URL rewriting or pour l’utiliser il faudra activer le module rewrite :

sudo a2enmod rewrite

A partir de maintenant, à chaque fois qu’un utilisateur tapera l’URL http://site1.com, il sera redirigé vers la version HTTPS ! Voilà à partir de maintenant notre serveur est plutôt bien sécurisé  !