Blog

Forcer https dans l'admin de WordPress

Écrit le 22 11 2013 par Kévin MET _

Le problème du jour est assez simple, forcer l'administration de WordPress à s'afficher via https. Lorsque l'on est pas derrière un reverse proxy, c'est même très simple, il suffit de lire cet article (Anglais) et pour résumé, il suffit d'ajouter ceci dans le fichier wp-config.php :


define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);

Là ou ça se complique c'est lorsque l'on est derrière un load balancer ou un reverse proxy qui termine la connexion https. En effet, si on applique la config précédente on obtient une boucle infinie car WordPress pense que les requêtes qui sont faites sont en http et renvoit donc une 302 vers le https. Ce qui revient à faire la même requête qui vient d'êtres faite, ce qui génère la boucle infinie.

Lorsque cet équipement gère le header HTTP_X_FORWARDED_PROTO c'est simple. Il suffit de le configurer pour qu'il envoit ce header au serveur web qui sert votre WordPress et de modifier le fichier wp-config.php comme ceci :


define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
	$_SERVER['HTTPS']='on';

Là ou ça devient vraiment compliqué c'est lorsque vous utilisez Squid en tant que reverse proxy et que c'est lui qui termine la connexion https. En effet, Squid ne supporte pas le header HTTP_X_FORWARDED_PROTO. Ce qui est curieux, c'est qu'il a enfanté le header HTTP_X_FORWARDED_FOR mais qu'il ne supporte pas l'autre. Heureusement il supporte un autre header, le header FRONT_END_HTTPS qui apparait comme ceci dans les headers envoyés par Squid : Front-End-Https: On. Cette option sert logiquement à OWA et s'applique sur le cache peer. Disponible dans la doc ici. Il faut donc modifier la configuration de squid et plus précisément le ou les cache_peer concernés comme ceci :


cache_peer 11.22.33.44 parent 80 0 no-query originserver login=PASS name=frontal front-end-https=on

Vous constatez à la fin de la ligne l'option front-end-https=on qui va donc envoyer le header Front-End-Https: On dans les requêtes au serveur 11.22.33.44. Pour que WordPress prennent en compte ce type de header il faut simplement éditer le fichier wp-config.php comme ceci :


define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);
if ($_SERVER['HTTP_FRONT_END_HTTPS'] == 'On')
	$_SERVER['HTTPS']='on';

Et voilà, votre administration est en https et c'est quand même beaucoup plus sympa !

♥ Partage sur tes réseaux sociaux ♥
Kévin MET
Kévin MET

Auteur de ce blog et gérant de la société MNT-TECH, je publie sur ce blog lorsque le temps me le permet et lorsqu'un sujet qui me parait intéressant n'a pas encore été abordé en français. Toutes les informations techniques présentes sur cette page peuvent être réutilisées moyennant le fait de citer la source.