PROJET AUTOBLOG


Shaarli - Les discussions de Shaarli

Archivé

Site original : Shaarli - Les discussions de Shaarli du 23/07/2013

⇐ retour index

Pierre-Alain Bandinelli : Forcer la bascule vers HTTPS derrière un 'reverse proxy'

lundi 21 octobre 2013 à 10:48
bajazet, le 19/10/2013 à 11:13
Je note pound un reverse proxy
(Permalink)

Famille Michon, le 21/10/2013 à 10:48
Note : Le Hollandais Volant, Tontof, suggestion d'amélioration inside.

J'ai justement rencontré le problème.
Mais ça ne résout pas tout. On a trois problème non voulus :

1) Certains codes PHP vérifient s'ils sont en HTTPS ou pas pour construire les URL (exemples : Wordpress, KRISS Feed, OranjeProxy) en regardant la variable $_SERVER['HTTPS'] ou $_ENV['HTTPS'], qui n'est pas settée dans ce cas de figure. Il faut vérifier aussi $_SERVER['HTTP_X_FORWARDED_PROTO'] (qui est un standard de fait pour les load balancers et reverse proxies). Une solution de secours en attendant qu'ils le prennent en charge : insérer ce code en début de fichier exécuté systématiquement (index.php ou config.php) :
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
            $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
   $_SERVER['HTTPS'] = 'on';
   $_ENV['HTTPS'] = 'on';
}


Les deux autres problèmes apparaissent si on protège le répertoire par un login/mdp (par sécurité, si on n'a pas audité le code, c'est le moyen le plus simple d'éviter les injections. J'utilise cela massivement) :

2) Si on demande la connexion en HTTP simple, Apache demande d'abord une authentification en clair, *PUIS* seulement redirige en HTTPS. Ce problème est a priori non solvable en .htaccess car c'est le fonctionnement d'Apache. L'utilisation de SSLRequireSSL n'est pas possible non plus, puisque Apache tourne sans gestion TLS (c'est le load balancer qui le gère) ;

3) Si on demande une URL non canonique (càd sans slash terminal), Apache fait d'abord une redirection vers l'URL canonique pour plusieurs raisons. Or il ne sait pas qu'il est en HTTPS, et donc redirige vers une URL canonique en HTTP.

Pour le 3, je creuse toujours avec l'aide du support Alwaysdata. Pour l'instant j'en suis là :

"""
DirectorySlash Off

RewriteEngine on
RewriteOptions AllowNoSlash
RewriteRule famille-michon.fr/xxx$ https://famille-michon.fr/xxx/ [R,L]
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
"""

Mais Apache râle parce qu'il ne connaîtrait pas l'option AllowNoSlash... à suivre.
(Permalink)