IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

Redirection HTTPS avec mod_rewrite : perte des paramètres envoyés en POST


Sujet :

Apache

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 57
    Par défaut Redirection HTTPS avec mod_rewrite : perte des paramètres envoyés en POST
    Bonjour à tous,

    J'ai un problème dans la mise en oeuvre de HTTPS sur notre application : Apache 2.2 en frontal de JOnAS 4.10.3 avec mod_jk pour la communication Apache / JOnAS.

    Dans la conf Apache, j'ai 2 hôtes virtuels, un pour HTTP, un pour HTTPS qui redirigent tous les 2 vers la même instance JOnAS (il n'y en a qu'une dans cet environnement) :

    Extraits :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <VirtualHost monserveur:14711>
            (...)
            JkMount /* LB
            (...)
    </VirtualHost>
     
    <VirtualHost _default_:14712>
            (...)
            JkMount /* LB
            (...)
    </VirtualHost>
    Où LB est le worker "load balancer" qui renvoie vers l'instance JOnAS.

    De cette façon, je peux accéder à l'appli en HTTP via le premier hôte virtuel avec l'URL http://monserveur:14711
    Cela marche OK. Toutes les pages de l'application sont en HTTP.

    Je peux aussi accéder à l'appli en HTTPS via le second hôte virtuel avec l'URL https://monserveur:14712
    Cela marche OK. Toutes les pages de l'application sont en HTTPS.

    Maintenant, je voudrais que pour certaines pages, on commute de HTTP en HTTPS.

    Nous n'avons qu'une seule servlet de traitement : elle s'appelle TraitementServlet.
    J'ai déclaré une seconde servlet : SSLTraitementServlet qui pointe vers la même classe Java. Elle est utilisée pour indiquer à Apache qu'il faut basculer en HTTPS.
    Cela se fait en utilisant mod_rewrite qui permet de rediriger une URL, il y a de nombreux exemples sur internet où on redirige du HTTP sur du HTTPS de cette façon.

    J'ai donc rajouté dans l'hôte virtuel pour HTTP les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    RewriteEngine on
    RewriteCond %{REQUEST_URI} /servlet/SSLTraitementServlet
    RewriteRule ^/(.*) https://monserveur:14712/$1
    ("si on trouve /servlet/SSLTraitementServlet dans l'URL, on renvoie sur l'URL HTTPS")

    La redirection se passe bien, sauf que tous les champs de formulaire envoyés en POST en HTTP sont "perdus" en HTTPS (en POST, ils ne transitent pas sur l'URL mais dans le header HTTP).
    L'application ne trouve aucun paramètre et renvoie une erreur.

    J'ai fait le test avec les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    RewriteEngine on
    RewriteCond %{REQUEST_URI} /servlet/SSLTraitementServlet
    RewriteRule ^/(.*) http://monserveur:14711/$1
    ("si on trouve /servlet/SSLTraitementServlet dans l'URL, on renvoie sur l'URL HTTP, donc non HTTPS")

    Dans ce cas, les champs du formulaire ne sont pas perdus, c'est donc bien le passage de HTTP en HTTPS qui cause cette perte.


    Que puis-je faire ?

    1) Passer les champs en GET pour ces pages, donc les avoir dans l'URL ?
    Cela marcherait mais... il n'est pas recommandé d'afficher ainsi les paramètres en clair, d'abord pour des raisons de sécurité, et ensuite parce que l'URL a une longueur limitée (2048 caractères pour IE en GET : http://support.microsoft.com/default...NoWebContent=1).

    2) Ou bien paramétrer différemment le rewrite mais je ne vois pas comment...

    3) Ou bien faire totalement différemment ???

    Avez-vous connaissance de projets qui ont fait cela : basculer des parties de sites de HTTP en HTTPS en conservant des champs de formulaire transmis en POST ?

    Merci d'avance à tous.

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Le comportement d'un navigateur sur une redirection issue d'un POST n'est spécifié. C'est aléatoire, selon le navigateur, la version, etc. Ce que tu auras avec Firefox ne fonctionnera pas forcément avec Internet Explorer, etc. La seule solution que je vois c'est ne pas faire de redirection par Apache mais passer par un servlet, une JSP ou je ne sais quoi qui va renvoyer au navigateur une page HTML contenant un formulaire avec que des champs cachés - les champs du POST initial - et automatiquement posté sur l'URL en HTTPS par un code JavaScript.

Discussions similaires

  1. Perte des données envoyées avec IE
    Par seb76250 dans le forum jQuery
    Réponses: 1
    Dernier message: 31/05/2013, 20h53
  2. Filezilla perte des paramètres de connexion
    Par lodan dans le forum Internet
    Réponses: 3
    Dernier message: 16/03/2008, 14h33
  3. [URL Rewriting] Redirection HTTPS avec exception
    Par grunk dans le forum Apache
    Réponses: 2
    Dernier message: 28/02/2008, 15h04
  4. Réponses: 2
    Dernier message: 15/10/2007, 15h05
  5. Query.SQL.Text avec la valeur des paramètres
    Par Guile dans le forum Bases de données
    Réponses: 3
    Dernier message: 04/02/2007, 11h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo