HTTPSCet article décrit la mise en place d’un hébergement sécurisé sur un serveur Apache tournant sous CentOS 7. Le protocole HTTP (Hypertext Transfer Protocol) transmet les données entre le serveur et le navigateur « en clair ». Les données personnelles, mots de passe et autres numéros de Carte Bleue sont donc interceptables. Pour résoudre ce problème, on utilisera le protocole HTTPS, qui ajoute une couche de chiffrement SSL (Secure Sockets Layer) au protocole HTTP.

Le transfert chiffré des données ne constitue qu’un aspect dans l’établissement d’une connexion sécurisée. L’autre aspect tout aussi important, c’est que l’utilisateur doit être sûr de communiquer avec la bonne personne. Autrement dit, votre numéro de Carte Bleue a beau être transmis de façon sécurisée, encore faut-il que la plateforme de paiement ne soit pas située sur un serveur géré par la mafia albanaise.

Pour savoir si l’on a bien affaire au bon interlocuteur, on utilisera un certificat. Cette véritable carte d’identité électronique contient non seulement la clé publique du serveur pour chiffrer les transmissions, mais également des renseignements sur le site ainsi que la signature de l’autorité de certification.

La génération d’un certificat électronique fait l’objet d’un article à part. Pour nos essais, nous utiliserons un certificat SSL/TLS fourni par le client Certbot. Dans l’exemple ci-dessous, nous allons configurer un hébergement public https://www.slackbox.fr.

Prérequis

Le protocole HTTPS utilise le port 443. Il faut donc songer avant toute chose à ouvrir ce port dans le pare-feu.

Installation

Le chiffrement SSL/TLS pour Apache est fourni par le paquet mod_ssl.

$ sudo yum install mod_ssl

On notera l’apparition d’un fichier de configuration ssl.conf dans /etc/httpd/conf.d.

Configurer Apache et SSL

Avant de continuer, effectuer une copie de sauvegarde du fichier de configuration par défaut.

$ cd /etc/httpd/conf.d
$ sudo cp ssl.conf ssl.conf.orig

Si l’on part d’un répertoire /var/www/html vide, on peut récupérer un peu de contenu statique pour avoir quelque chose à nous mettre sous la dent.

$ cd /var/www/html/
$ sudo cp -R /usr/share/httpd/noindex/* .

Régler les permissions de l’arborescence de fichiers téléchargés.

$ sudo chown -R microlinux:microlinux *
$ find . -type d -exec chmod 0755 {} \;
$ find . -type f -exec chmod 0644 {} \;

Ensuite, éditer /etc/httpd/conf.d/ssl.conf en renseignant les directives DocumentRoot et ServerName ainsi que l’emplacement du certificat SSL et de la clé privée.

##
## SSL Virtual Host Context
##
<VirtualHost _default_:443>
DocumentRoot "/var/www/html"
ServerName www.slackbox.fr:443
...
SSLCertificateFile /etc/letsencrypt/live/slackbox.fr/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/slackbox.fr/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/slackbox.fr/fullchain.pem
...
</VirtualHost>

Redémarrer Apache.

$ sudo systemctl restart httpd

Ouvrir le site https://www.slackbox.fr avec Firefox. On notera la présence du petit cadenas vert en haut à gauche dans la barre d’adresses pour indiquer l’établissement d’une connexion sécurisée.

Apache SSL

Améliorer la sécurité de notre hébergement

Rendons-nous sur la page SSL Server Test du portail Qualys SSL Labs pour effectuer un audit de la sécurité de notre hébergement.

Qualys Labs SSL Test

Pour l’heure, le résultat n’est pas parfait et nous indique que nous pouvons faire mieux. Pour nous débarrasser de la seule vulnérabilité affichée, il suffit de décommenter l’option suivante dans /etc/httpd/conf.d/ssl.conf.

SSLHonorCipherOrder on

Recharger la configuration d’Apache.

$ sudo systemctl reload httpd

Relancer un test sur le site de Qualys Labs en cliquant sur Clear cache.

Qualys Labs SSL Test

La politique HSTS

HSTS (HTTP Strict Transport Security) est un mécanisme de politique de sécurité proposé pour HTTP, permettant à un serveur web de déclarer à un agent utilisateur (navigateur web) compatible qu’il doit interagir avec lui en utilisant une connexion sécurisée (comme HTTPS). La politique est donc communiquée à l’agent utilisateur par le serveur via la réponse HTTP, dans le champ d’en-tête nommé Strict-Transport-Security. La politique spécifie une période de temps durant laquelle l’agent utilisateur doit accéder au serveur uniquement de façon sécurisée.

Pour activer cette politique dans la configuration d’Apache, il suffit d’ajouter la ligne suivante dans la définition de l’hôte virtuel.

<VirtualHost _default_:443>
# HSTS
Header always set Strict-Transport-Security \
  "max-age=63072000; includeSubDomains"
...
</VirtualHost>

L’audit de sécurité nous montre qu’on est assez proche de la perfection.

Qualys Labs SSL Test

Héberger plusieurs sites sécurisés

Si l’on souhaite héberger plusieurs sites sécurisés sous forme d’hôtes virtuels Apache, la solution la plus propre consiste à éditer /etc/httpd/conf.d/ssl.conf pour ne garder que les options globales, comme ceci par exemple.

# /etc/httpd/conf.d/ssl.conf
Listen 443 https
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLSessionCache         shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout  300
SSLRandomSeed startup file:/dev/urandom  256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA
SSLHonorCipherOrder on

Ensuite, chaque hôte virtuel disposera de son propre fichier de configuration dans /etc/httpd/conf.d. Voici un exemple.

# /etc/httpd/conf.d/10-www.slackbox.fr.conf

# http://www.slackbox.fr -> https://www.slackbox.fr
<VirtualHost *:80>
  ServerName www.slackbox.fr
  ServerAlias slackbox.fr
  Redirect / https://www.slackbox.fr
</VirtualHost>

# https://www.slackbox.fr
<VirtualHost _default_:443>
  Header always set Strict-Transport-Security \
    "max-age=63072000; includeSubDomains"
  ServerAdmin info@microlinux.fr
  DocumentRoot "/var/www/slackbox-site/html"
  ServerName www.slackbox.fr:443
  ServerAlias slackbox.fr
  SSLEngine on
  SSLCertificateFile /etc/letsencrypt/live/slackbox.fr/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/slackbox.fr/privkey.pem
  SSLCertificateChainFile /etc/letsencrypt/live/slackbox.fr/fullchain.pem
  BrowserMatch "MSIE [2-5]" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0
  ErrorLog logs/www.slackbox.fr-error_log
  CustomLog logs/www.slackbox.fr-access_log common
</VirtualHost>

Téléchargement

Des fichiers modèles pour l’hébergement sécurisé avec Apache sont disponibles dans mon dépôt Github, dans le répertoire el7/config/httpd.

$ git clone https://github.com/kikinovak/centos

La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

 


5 commentaires

Sytoka · 18 mars 2019 à 8 h 45 min

On ne dit pas crypté mais chiffré : https://chiffrer.info/

Si vous pouviez corriger votre texte, cela pique un peu aux yeux.

Sinon, votre billet est bien intéressant.

    kikinovak · 18 mars 2019 à 9 h 03 min

    Et quand tout le monde fait la même erreur, ça finit dans le Larousse. C’est comme ça que fonctionnent les langues. C’est enseigné en 3ème année de Lettres Modernes, en cours de linguistique. Bonne journée.

      Sytoka · 18 mars 2019 à 9 h 34 min

      C’est pas parce qu’un paquet de personne font l’erreur qu’il faut la faire aussi. Surtout que cela ne coûte pas grand chose d’utiliser le verbe chiffrer qui est je trouve bien joli.

        kikinovak · 18 mars 2019 à 10 h 32 min

        Voili voilou. C’est corrigé.

          Sytoka · 18 mars 2019 à 10 h 33 min

          Merci 😉

Répondre à kikinovak Annuler la réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.