Pages : 1
#1 Le 18/07/2023, à 10: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, à 16:06)
Hors ligne
#2 Le 13/10/2023, à 23: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 13/10/2023, à 23:19)
Hors ligne
#3 Le 14/10/2023, à 07: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, à 07:30)
#4 Le 29/11/2023, à 16: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