Haproxy : passage en HTTPS

HAPROXY et HTTPS.

Depuis les événements frappant Internet (Snowden …) tout le monde veut passer en HTTPS avec des éléments récents (Heartbleed est passé par là).

J'utilise « Haproxy » pour gérer des sites et j'attendais avec impatience qu'il supporte SSL, ce qui semble fait dans les versions 1.5. Malheureusement il n'existe pas encore de version « stable » il faut donc passer par les versions « dev ». Il faudra suivre le rythme des développeurs pour rester à la pointe en attendant la version stable. Quelques séances de test en perspective à chaque avancée et de la doc à lire pour exploiter les nouvelles fonctionnalités.

L'avantage d'utiliser Haproxy pour gérer le SSL c'est qu'il n'y a rien à modifier dans la configuration Apache !

Pour les tests j'ai utilisé la dernière version de HAPROXY disponible, ici la version 1.5-dev24 à compiler avec :

make TARGET=linux2628 USE_OPENSSL=1 USE_ZLIB=1

Ce sont les paramètres « mini » permettant l'utilisation de SSL et de la compression.

Aux paramètres existants dans mon « haproxy.cfg » il m'a suffi d'ajouter les sections traitant le SSL (FRONTEND et BACKEND) :

 

frontend SSL-PUBLIC 
bind *:443 ssl crt /etc/haproxy/ssl/ssl-cert-snakeoil.pem 
# 
mode http 
option httpclose 
option forwardfor 
reqadd X-Forwarded-Proto:\ https 
# OK 
acl SS-PR1 hdr_beg(host) performance 
use_backend SS-PERF if SS-PR1 
# OK 
acl SS-CN1 hdr_beg(host) consult 
use_backend CONS if SS-CN1 
# OK 
acl SS-GN1 hdr_beg(host) gandizzop 
use_backend GAND if SS-GN1 
# OK 
acl SS-GAL hdr_beg(host) galerie 
use_backend GALERIE if SS-GAL 
# 
backend SS-PERF 
option httpchk balance roundrobin 
cookie SERVERID rewrite 
# cookie SERVERID insert indirect nocache 
server local 127.0.0.1:82 maxconn 127 
# 
option httpclose 
option abortonclose 
retries 2 
compression algo gzip 
compression offload 
backend SS-CONS 
option httpchk 
balance roundrobin 
cookie SERVERID rewrite 
# cookie SERVERID insert indirect nocache 
server local 127.0.0.1:83 maxconn 127 
# 
option httpclose 
option abortonclose 
retries 2 
compression algo gzip 
compression offload

Rien à changer du coté de la configuration Apache …. au passage on compresse les données envoyées avec gzip.

Dans le cas de Drupal 7 (7.27 dans mon cas) l'accès est anormal, la première page est accédée normalement mais certains éléments, dont les CSS et JS, sont accédés en HTTP simple ce qui provoque un « blocage » de ces ressource au niveau de Firefox ou Chrome. Il m'a été nécessaire de modifier un fichier de configuration (sites/default/settings.php) pour y ajouter la ligne suivante : 

$base_url = 'https://le_nom_du_site'; // NO trailing slash!

Dans mon cas cette ligne avait été mise en commentaire et cela ne gênait pas du tout le fonctionnement en HTTP. Après l'ajout de cette ligne le fonctionnement en HTTP reste parfaitement OK et l'accès en HTTPS est enfin correct !