Hébergement sécurisé avec Apache et SSL sous Slackware

Cet article décrit la mise en place d’un hébergement sécurisé sur un serveur Apache tournant sous Slackware. 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 cryptage SSL (Secure Sockets Layer) au protocole HTTP.

Le transfert crypté des données ne constitue qu’un aspect dans l’établissement d’une connexion sécurisé. 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 crypter 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. Si l’on décide de partir sur un certificat auto-signé, la configuration devra être adaptée en conséquence.

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.

Configurer Apache et SSL

Notre hébergement HTTPS sera rangé en-dessous de /srv/httpd/vhosts comme nos hôtes virtuels HTTP. Éditer le fichier /etc/httpd/extra/httpd-ssl.conf. La version par défaut de ce fichier est amplement commentée. Je ne reproduis ici que les directives sans les commentaires :

# /etc/httpd/extra/httpd-ssl.conf
Listen 443
SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4
SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4
SSLHonorCipherOrder on
SSLProtocol all -SSLv3
SSLProxyProtocol all -SSLv3
SSLPassPhraseDialog  builtin
SSLSessionCache        "shmcb:/var/run/ssl_scache(512000)"
SSLSessionCacheTimeout  300

# https://www.slackbox.fr
<VirtualHost 195.154.65.130:443>
DocumentRoot "/srv/httpd/vhosts/slackbox-secure/htdocs"
ServerName www.slackbox.fr:443
ServerAdmin info@microlinux.fr
ErrorLog "/var/log/httpd/www.slackbox.fr-error_log"
TransferLog "/var/log/httpd/www.slackbox.fr-access_log"
SSLEngine on
SSLCertificateFile "/chemin/vers/cert.pem"
SSLCertificateKeyFile "/chemin/vers/privkey.pem"
SSLCertificateChainFile "/chemin/vers/chain.pem"
<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>
BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0
CustomLog "/var/log/httpd/www.slackbox.fr-ssl_request_log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

Activer SSL dans la configuration d’Apache :

# /etc/httpd/httpd.conf
...
LoadModule .../modules/mod_socache_shmcb.so
...
LoadModule ssl_module lib64/httpd/modules/mod_ssl.so
...
# Secure (SSL/TLS) connections
Include /etc/httpd/extra/httpd-ssl.conf
...
  • L’astuce consiste ici à faire une recherche sur la chaîne de caractères « ssl » pour éditer le fichier.

Redémarrer Apache :

# /etc/rc.d/rc.httpd restart

Ouvrir notre site sécurisé :

Effectuer un audit de la sécurité de notre hébergement sur le site Qualys SSL Labs :

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 :

# /etc/httpd/extra/httpd-ssl.conf 
...
<VirtualHost 195.154.65.130:443>
# HSTS
Header always set Strict-Transport-Security \
  "max-age=63072000; includeSubDomains"
...
</VirtualHost>

Refaire un audit de sécurité :

Plusieurs hébergements SSL sur un même serveur

Les versions récentes d’Apache supportent plusieurs hébergements sécurisés grâce aux hôtes virtuels. Le fonctionnement est le même que pour les hôtes virtuels classiques, au détail près que les hôtes virtuels sécurisés seront également définis dans /etc/httpd/extra/httpd-ssl.conf. Bien évidemment, chaque hôte virtuel devra disposer de son propre certificat.

Sur les anciennes versions d’Apache, il fallait ajouter une option générale pour la configuration des hôtes virtuels sécurisés :

# /etc/httpd/extra/httpd-ssl.conf 
...
Listen 443
SSLStrictSNIVHostCheck off
...
Ce contenu a été publié dans Documentation Microlinux, Slackware, avec comme mot(s)-clé(s) , , , , , . Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

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