Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/07/2023, à 11:15

DZ

[Résolu] Paramétrage apache http / https redirections

Bonjour,

j'ai sur une machine sous linux un serveur avec apache, php, mysql.
Du code tourne, en php, html, javascript, css.
Un des (très vieux) codes javascrits a une mauvaise idée : quand la page demandée est en https, il rebascule en http mais reste sur le port 443.
Ce qui génère le message :

Your browser sent a request that this server could not understand. Reason: You're speaking plain HTTP to an SSL-enabled server port

J'aimerai que le serveur fasse automatiquement le nécessaire pour rester en https, sur le port 443, sans modifier le code. Je souhaite vraiment uniquement toucher aux configurations des serveurs.

J'ai essayé de modifier les paramètres d'apache pour conditionner une redirection vers https lorsqu'on est en http et sur le port 443 mais j'obtiens toujours la même erreur.

Voici ce que j'avais envisagé :

<VirtualHost *:80>
    RewriteEngine On
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteCond %{SERVER_PORT} ^443$
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>

La piste est-elle bonne ? Ou est-ce quoi qu'il arrive le client lorsqu'il va faire la requête, va obtenir l'erreur avant même qu'apache fasse la redirection ?

(Je précise que quand je suis en http sur le port 80, je souhaite rester en http, et que je n'ai pas la main sur le code javascript)

Dernière modification par DZ (Le 29/11/2023, à 17:06)

Hors ligne

#2 Le 14/10/2023, à 00:17

Byggvir

Re : [Résolu] Paramétrage apache http / https redirections

Un truc à tester :
L'idée serait de configurer Apache pour écouter sur un autre port (par exemple 8443) en mode non sécurisé. Toutes les requêtes HTTP sur le port 443 seraient alors envoyées à ce proxy inverse. Ce proxy pourrait ensuite rediriger la requête vers la version HTTPS sur le port 443.

Voici comment vous pourriez configurer cela :

1. Configurer un VirtualHost pour le port 8443 en mode non sécurisé :

Listen 8443

<VirtualHost *:8443>
    SSLEngine off
    
    RewriteEngine On
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>

2. Configurer un autre VirtualHost pour le port 443 avec SSL activé :

<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile /path/to/your/cert.crt
    SSLCertificateKeyFile /path/to/your/private.key
    
    ProxyRequests Off
    ProxyPreserveHost On
    ProxyPass / http://localhost:8443/
    ProxyPassReverse / http://localhost:8443/
    
    # ... le reste de la config
</VirtualHost>

N'oubliez pas de vous assurer que les modules proxy (`mod_proxy` et `mod_proxy_http`) sont activés dans Apache.


À mon avis, la solution que vous avez proposé dans votre post ne devrait pas être fonctionnel, car bien que la tentative de redirection est une bonne idée en théorie, le problème est que lorsqu'un client tente de communiquer avec le serveur sur le port 443 en utilisant HTTP (au lieu de HTTPS), le serveur essaie d'établir une connexion sécurisée avant même de lire la demande.

La directive que vous avez placée dans le bloc <VirtualHost *:80> ne sera prise en compte que pour les requêtes arrivant sur le port 80, et non sur le port 443.

Dernière modification par Byggvir (Le 14/10/2023, à 00:19)

Hors ligne

#3 Le 14/10/2023, à 08:24

bruno

Re : [Résolu] Paramétrage apache http / https redirections

Bonjour,

La manière la plus simple de forcer le HTTPS est d'utiliser une redirection permanente dans l'hôte virtuel sur le port 80 :

<VirtualHost *:80>
    ServerName example.com
    Redirect permanent / https://example.com/
</VirtualHost>

Si des requêtes arrivent en http sur le port 443, idéalement il faut corriger le script qui produit cette bêtise. En effet je ne vois pas de moyen de corriger proprement ce comportement au niveau d'Apache.
Le problème c'est que ce type de requête va générer une erreur 400 et qu'Apache renvoie cette erreur très tôt.

Un solution crade pourrait être de créer une page d'erreur personnalisée 400 qui redirige vers le site en https://… Mais cela risque d'engendrer d'autres problèmes.
Exemple dans l'hôte virtuel par défaut :

ErrorDocument 400  https://example.com/

AMHA, il vaut vraiment mieux éviter ce genre de bidouillage.

@Byggvir : cela ressemble à une boucle de redirection 443 → 8443 →443 →…

Dernière modification par bruno (Le 14/10/2023, à 08:30)


Attention, les bouteilles vendues par Nestlé Waters sont contaminées au monoxyde de dihydrogène.

Hors ligne

#4 Le 29/11/2023, à 17:06

DZ

Re : [Résolu] Paramétrage apache http / https redirections

Ce problème aura été l'occasion de découvrir ce qu'est un reverse proxy.
(pour ceux qui auraient le même souci).

Hors ligne