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 :

Comment forcer Apache en https


Sujet :

Apache

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Comment forcer Apache en https
    Bonjour,

    Je viens d'installer en local Apache 2.0 + PHP + Openssl + Mysql (la totale quoi ) et j'ai testé des pages normales tjs en local et tout marche nickel: http://localhost et https://localhost. Ma question est la suivante: est ce qu'il y a un moyen pour configurer Apache afin d'obliger l'acces à toutes les pages de mon site en https seulement??? en d'autres termes si je tappe http://localhost directement la fenetre du certificat a accepter s'affiche et le site passe en https.

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    normalement, dans la configuration d'Apache ou de OpenSSL, il doit y a voir un moment où tu spécifies le port 443 pour HTTPS (il me semble) si tu spécifies le port 80, toutes les connections au port 80 seront considérées comme des connections HTTPS

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2003
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 51
    Points : 38
    Points
    38
    Par défaut
    D'ailleurs je me posais une question.

    Si j'ai mon index.php accessible en HTTP et que c'est uniquement à partir d'une autre page que je veux passer en HTTPS.

    Imaginons : index.php en HTTP et index2.php en HTTPS
    La page index contient juste des infos
    La page index2 permet de s'identifier et je mets donc en place le HTTPS avant l'envoie des identifiants de connexion.

    Comment fait-on le lien dans la page index.php vers la page index2.php ?
    J'ai deux idées mais je ne sais pas si il y a un autre moyen...

    Soit je mets un chemin complet style :
    <a href="https://www.monsite.com/index2.php">S'identifier</a>

    Sinon est-ce qu'il est possible d'écrire ca sous la forme :
    <a href="index2.php:443">S'identifier</a>

    La 2eme solution est totalement imaginaire Donc si c'est pas possible tant pis et si il y a mieux que la 1ere solution merci de me l'indiquer



    Sinon pour ton problème, j'ai une solution qui va dépendre des réponses que vous allez apporter à ma question précédente mais je pensais à une redirection...
    Tu peux par exemple le résoudre en faisant une page d'accueil bidon accessible par http... genre dans ton index.php dans lequel tu mets uniquement la ligne :
    <?
    header("Location: https://www.monsite.com/index2.php")
    ?>

    Mais sinon la solution de tout passer par le port de HTTPS est le plus simple...

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Merci les gars pour vos reponses,

    Je résume voila dans la configuration d'Apache on edite httpd.conf en ajoutant Listen 443

    et

    <VirtualHost localhost:443>
    SSLEngine On
    SSLCertificateFile conf/ssl/my-server.cert
    SSLCertificateKeyFile conf/ssl/my-server.key
    </VirtualHost>

    Quand j mis 80 au lieu de 443, le lien http://localhost me donne une page d'erreur:
    400 Bad Request
    Your browser sent a request that this server could not understand.
    Reason: You're speaking plain HTTP to an SSL-enabled server port.
    Instead use the HTTPS scheme to access this URL, please.
    Hint: https://localhost:80/

    Donc il faut cliquer sur https://localhost:80/ et accepter le certificat pour acceder au site.

    Il me reste un autre prob, en fait j installé Joomla sur le site et la première page est sécurisée mais quand je clique sur un autre lien de la page il me sort le meme message 400 Bad Request et je dois cliquer sur https://localhost:80/ pour revenir a la page d'accueil et non le deuxième lien.......

  5. #5
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Alors, effectivement, j'avais pas penser au problème du conflit HTTP/HTTPS...

    je pense que le mieux, et de rester avec la configuration que tu avais à l'origine, et de mettre ceci au début de chacune de tes pages :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($_SERVER['SERVER_PORT'] != 443) die(header('Location: https://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']));
    ce qui aura pour effet de rediriger automatiquement vers la page sécurisée

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Oui mais je ne vois pas ou je vais ajouter cette ligne, j installé Joomla qui contiennent pleins de pages et de liens.

    Je cherche plutot une configuration dans le serveur apache qui me permet d'interdire l'acces au site par http, et de forcer l'acces en https

  7. #7
    Nouveau membre du Club
    Inscrit en
    Février 2003
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 51
    Points : 38
    Points
    38
    Par défaut
    Justement ce qu'il te propose c'est un peu ca...

    if($_SERVER['SERVER_PORT'] != 443)
    die (header('Location: https://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']));

    Si tu colles ca en début de chacune de tes pages PHP, ca aura pour objectif de prendre la requete qui arrive en HTTP sur la page X et de la rooter vers elle-même par le protocole HTTPS...

    Donc si tu as un index.php qui a un lien vers ta page forum.php, news.php etc.. et que tu veux une connexion sécurisée partout, tu mets cette ligne au début de chacun... Comme ca le gars qui vient sur ton site par : http://www.tonsite.com/
    sera envoyé en HTTP vers ton index.php qui va le rediriger vers la page : https://www.tonsite.com/index.php

    Et si par hasard le gars tape directement : http://www.tonsite.com/forum.php
    Avec ce même code en début de la page du forum, le visiteur sera redirigé vers : https://www.tonsite.com/forum.php


    Voilou...

  8. #8
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Swoög Voir le message
    Alors, effectivement, j'avais pas penser au problème du conflit HTTP/HTTPS...

    je pense que le mieux, et de rester avec la configuration que tu avais à l'origine, et de mettre ceci au début de chacune de tes pages :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($_SERVER['SERVER_PORT'] != 443) die(header('Location: https://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']));
    ce qui aura pour effet de rediriger automatiquement vers la page sécurisée
    Bonjour

    J'ai essayé cette méthode mais ça ne marche pas chez moi, en modifiant mon index.html en index.php après avoir ajouter cette ligne

    Un serveur web "192.168.0.76" dans un réseau local et à partir d'une machine distante j'entre l'@ http://192.168.0.76/monSite/ le résultat est une redirection vers cette @: https://localhost.localdomain/monSite/ d'où une erreur d'affichage de la page en question.

    N.B: en attendant j'ai bloqué le port 80, ce qui emmènera à forcer la saisie de https pour accéder aux page web.

    Merci pour votre aide.

  9. #9
    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
    Points : 12 977
    Points
    12 977
    Par défaut
    Utilise $_SERVER['HTTP_HOST'] à la place de $_SERVER['SERVER_NAME'].

  10. #10
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 44
    Points : 19
    Points
    19
    Par défaut


    Merci, ça marche!!

  11. #11
    Candidat au Club
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Septembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par busta_m Voir le message
    Bonjour,

    Je viens d'installer en local Apache 2.0 + PHP + Openssl + Mysql (la totale quoi ) et j'ai testé des pages normales tjs en local et tout marche nickel: http://localhost et https://localhost. Ma question est la suivante: est ce qu'il y a un moyen pour configurer Apache afin d'obliger l'acces à toutes les pages de mon site en https seulement??? en d'autres termes si je tappe http://localhost directement la fenetre du certificat a accepter s'affiche et le site passe en https.

    Merci d'avance.
    idem pour moi, la solution indiquée ici ne me convient pas, et celle de bloquer le port 80 n' est pas possible non plus.
    Depuis ces années je pense que tu as trouvé la vrai solution car c' est vrai que ce n' est pas toujours possible de modifier des dizaines/centaines de pages manuellement et parfois même impossible puisque un script peut les regénérer sans le code.
    ce topic reste toujours d' actualité et voici la méthode adaptée:

    il faut éditer un fichier .htaccess à la racine (exemple dans /var/www/monsite/ )
    et mettre ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <IfModule mod_rewrite.c>
       Options +FollowSymLinks
       Options +Indexes
       RewriteEngine On
       RewriteCond %{SERVER_PORT}!^443$
       RewriteRule ^(.*)$ https://www.monsite.com/$1 [R,L]
    </IfModule>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/11/2007, 13h31
  2. Réponses: 4
    Dernier message: 13/06/2007, 16h27
  3. comment identifier une transaction http?
    Par didier.cabale dans le forum Développement
    Réponses: 5
    Dernier message: 13/04/2005, 17h42
  4. [Struts]comment forcer un Forward ?
    Par njac dans le forum Struts 1
    Réponses: 4
    Dernier message: 13/10/2004, 16h02
  5. [http] comment faire une requete http
    Par Slimer dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 28/07/2004, 12h48

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