Après de nombreuses années j'ai décidé de passer ce site en HTTPS exclusif, là encore Haproxy m'a simplifié la tâche car il permet de :
- rediriger le HTTP vers le HTTPS (envoi d'un code 301)
- gérer la connexion HTTPS
Par contre pour ne pas "perdre" l'information IP du client d'origine il faut veiller à bien positionner l'option "forwardfor" et à configurer le log de Apache (ici 2.4.x) pour récupérer l'information du header X-Forwarded-For inséré par Haproxy.
Redirection HTTP --> HTTPS.
Le "Backend" de la partie HTTP devient :
#-------------------------------------------------------------
backend PERF
mode http
option forwardfor
http-request redirect scheme https code 301
On ne peut guère faire plus simple !
Partie HTTPS, frontend et backend.
J'ai choisi de rester en HTTPS pour "sortir" de Haproxy et aller sur le serveur WEB car Haproxy est installé sur un "frontal" alors que le serveur Apache est "derrière" (c'est en fait une Machine Virtuelle KVM).
Frontend.
Il faut positionner un certain nombre de caractéristiques liées à SSL, par exemple éviter SSLV3 ! Cette partie a été copiée (sauf "tune.ssl.default-dh-param 2048") du site Haproxy.
# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL). This list is from:
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
ssl-default-bind-ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
ssl-default-bind-options no-sslv3
tune.ssl.default-dh-param 2048