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 26/08/2016, à 13:14

Jarodd

[Résolu] htaccess : mettre une authentification + HTTPS

Bonjour monde,

J'ai un site web perso hébergé chez O2switch. J'ai mis une authentification par htpasswd, et activé le HTTPS (par Let's Encrypt).Seulement quand j'active dans le .htaccess la redirection http vers https, l'authentification ne fonctionne plus, on accède au site (sans aucun script et css, mais on peut en voir le contenu).

J'essaye de lire la doc sur le site d'Apache et de chercher une solution sur des fora, mais je n'en viens pas à bout, c'est toujours l'authentification ou le HTTPS qui fonctionne, mais jamais les deux ensemble.

Voici mon htaccess :

### Let's Encrypt
RewriteRule ^\.well-known/acme-challenge - [L]

### tests
SetEnv APPLICATION_ENV production
SetEnv OPERATING_SYSTEM linux

RewriteEngine On

### HTTP -> HTTPS
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

### rewrite url
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

### Videos types
AddType video/ogg  .ogv
AddType video/mp4  .mp4 .m4v .f4v .f4p
AddType video/webm .webm

### Encoding files
AddDefaultCharset UTF-8
AddCharset UTF-8 .html .css .js

### no authentification for the rss url (public)
SetEnvIfNoCase Request_URI "/rss$" allow

AuthType Basic
AuthName "Please authenticate"
AuthUserFile "/home5/user/.htpasswds/public/mywebsite/passwd"
Require valid-user

Order Deny,Allow
Deny from all
Allow from env=allow

Satisfy any

### Compression
AddOutputFilterByType DEFLATE text/text application/xml application/xhtml+xml text/html text/javascript text/css text/plain

Qu'est-ce qui cloche là dedans ?

Merci pour votre aide.

Edit 03/09 : résolu, voir message 12

Dernière modification par Jarodd (Le 03/09/2016, à 10:24)


Ubuntu 22.04.3 LTS (64 bits)

Hors ligne

#2 Le 26/08/2016, à 14:13

donut

Re : [Résolu] htaccess : mettre une authentification + HTTPS

Salut,

Un peu complexe mais il faut procéder par étape pour trouver :
- Quand tu dis que tu active/désactive le https, tu fais comment ? Via interface client o2switch ou tu parles de la réécriture dans ton .htaccess ?
- idem pour l'authentification, tu fais quelle manip ? Tu commente quelle partie du .htaccess ?

Peut-être qu'une des règles de réécriture te renvoie dans un autre vhost qui par conséquent n'applique pas le .htaccess et donc la demande d'authentification.


https://utux.fr (blog perso)

Hors ligne

#3 Le 26/08/2016, à 14:33

Jarodd

Re : [Résolu] htaccess : mettre une authentification + HTTPS

Le HTTPS est activé dans l'interface o2switch (Let's encrypt). Ensuite je décommente dans le htaccess la partie "### HTTP -> HTTPS", et là ça bypasse l'authentification.

Pour l'authentification, ce sont les 8 lignes qui démarre par AuthType Basic jusqu'à Satisfy any. Je les laisse toujours décommentées (en http et https) car je veux toujours qu'on s'authentifie, sauf que si j'ai décommenté les lignes du https, l'authentification ne se fait pas. Pour être plus précis, j'ai bien la demande de login, mais si je fais Annuler, je peux quand même voir le contenu du site (le html brut s'affiche, sans js et css).

Je n'ai pas d'autre vhost à ma disposition, c'est un héberment mutualisé, donc je ne peux agir que sur ce htacces.

Dernière modification par Jarodd (Le 26/08/2016, à 14:33)


Ubuntu 22.04.3 LTS (64 bits)

Hors ligne

#4 Le 26/08/2016, à 15:00

donut

Re : [Résolu] htaccess : mettre une authentification + HTTPS

Apparemment ton bloc de réécriture fait deux choses :
- Il réécrit http en https
- Il ajoute www
Essaie de commenter les deux dernières lignes ? Genre :

### HTTP -> HTTPS
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
#RewriteCond %{HTTP_HOST} !^www\.
#RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


https://utux.fr (blog perso)

Hors ligne

#5 Le 26/08/2016, à 15:41

Jarodd

Re : [Résolu] htaccess : mettre une authentification + HTTPS

Je viens de tester sans ces deux lignes, je tombe sur une erreur 500... Décidément le fonctionnement d'un htaccess me laisse perplexe...


Ubuntu 22.04.3 LTS (64 bits)

Hors ligne

#6 Le 26/08/2016, à 15:56

Jarodd

Re : [Résolu] htaccess : mettre une authentification + HTTPS

Edit : après un refresh, j'ai de nouveau eu la fenêtre de login, mais je passe toujours l'authentification en faisant Annuler sad


Ubuntu 22.04.3 LTS (64 bits)

Hors ligne

#7 Le 27/08/2016, à 06:32

bruno

Re : [Résolu] htaccess : mettre une authentification + HTTPS

Bonjour,

Cela risque de na pas être évident sur un mutualisé car on ne sait pas quelle configuration a été mise en place par l'hébergeur.

Avant toute chose est-ce que l'authentification en HTTP fonctionne correctement ?

Tu dis que tu as activé HTTPS dans l'interface de ton hébergeur. Pourquoi essaie-tu de forcer le HTTPS avec des règles de réécriture dans ton .htaccess ? Le site est donc toujours accessible en HTTP ?
Ce que tu fais à ce niveau est de toute façon problématique puisque tu as une erreur 500…

À essayer :

RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

ou juste :

SSLRequireSSL 

Dernière modification par bruno (Le 27/08/2016, à 06:33)

Hors ligne

#8 Le 28/08/2016, à 11:18

Jarodd

Re : [Résolu] htaccess : mettre une authentification + HTTPS

bruno a écrit :

Avant toute chose est-ce que l'authentification en HTTP fonctionne correctement ?

Oui cela fonctionne, sauf pour ce bouton Annuler :
- pas d'identifiant ou des mauvais : je n'entre pas sur le site
- identifiants ok : je rentre sur le site
- bouton Annuler : je vois ma page d'accueil sans js/css, mais je ne suis pas considéré comme authentifié pour autant, car si je rafraîchis la page, j'ai de nouveau la demande d'authentification !

bruno a écrit :

Tu dis que tu as activé HTTPS dans l'interface de ton hébergeur. Pourquoi essaie-tu de forcer le HTTPS avec des règles de réécriture dans ton .htaccess ? Le site est donc toujours accessible en HTTP ?

Le site est en HTTP, je voudrais rediriger toute requête HTTP vers du HTTPS. Tous les visiteurs ont l'habitude d'y venir en HTTP, et ils ne vont pas tous changer leurs favoris ou l'adresse du flux RSS dans leurs lecteurs, et rajouter le S, donc je voudrais automatiser ce changement.

Dernière modification par Jarodd (Le 28/08/2016, à 11:19)


Ubuntu 22.04.3 LTS (64 bits)

Hors ligne

#9 Le 28/08/2016, à 15:37

bruno

Re : [Résolu] htaccess : mettre une authentification + HTTPS

Cela ne répond pas vraiment à mes questions.

Pour le HTTPS, c'est à ton hébergeur de faire la redirection HTTP -> HTTPS. Tu ne devrais pas avoir à le spécifier dans un .htacces. En plus ce n'est pas l'endroit où faire cela.

Pour le bouton annuler, assure-toi d'avoir bien vidé le cache de ton navigateur avant de tester.

Hors ligne

#10 Le 28/08/2016, à 15:42

Jarodd

Re : [Résolu] htaccess : mettre une authentification + HTTPS

Mon hébergeur me fournit un hébergement, ensuite c'est à moi d'y mettre mon site, et à moi de décider si j'y mets du http ou du https. Lui me permet de faire les deux (dans l'interface il me propose le module Let's Encrypt), ensuite c'est à moi de choisir si je l'active ou pas, et ce que je mets dans mon code. Je pourrais très bien choisir d'avoir une partie http (boutique en ligne) et une autre https (processus de commande), ou bien tout en https, ça reste ma décision, pas la sienne.

Pour le bouton Annuler, je teste depuis 2 navigateurs en mode privé, sans cookie, cache, historique ou tout ce qui pourrait perturber le test.


Ubuntu 22.04.3 LTS (64 bits)

Hors ligne

#11 Le 28/08/2016, à 16:00

bruno

Re : [Résolu] htaccess : mettre une authentification + HTTPS

Si tu ne peux jouer que sur le contenu d'un fichier .htaccess à la racine de ton site, tes choix sont forcément limités. En principe forcer globalement le protocole HTTPS se fait dans le contexte du serveur (ou de l'hôte virtuel) et non dans le contexte d'un répertoire (cas du htaccess).

Par ailleurs tu ignores comment ton hébergeur à configuré Apache et les éventuelles restrictions de configuration qu'il a pu mettre en place.
Par exemple tu ne sais pas si la variable d'environnement %{HTTPS} renvoie on|off ou 1|0, d'où ma proposition en #7 que tu ne semble pas avoir testé.
Cf. https://wiki.apache.org/httpd/RewriteHTTPToHTTPS

Pour essayer de déboguer ces problèmes il serait utile que tu examines les en-têtes HTTP renvoyées par le serveur lorsque tu tentes une connexion (il y a une extension Firefox pour cela, sinon en ligne de commande avec wget) et que tu traites les problèmes un par un. À commencer par le souci avec le bouton annuler en utilisant un .htaccess minimal qui ne contient que les lignes nécessaire à l’authentification.

Hors ligne

#12 Le 28/08/2016, à 18:20

Jarodd

Re : [Résolu] htaccess : mettre une authentification + HTTPS

Oui c'est difficile de chercher en n'ayant qu'une partie de la conf accessible. J'ai demandé à mon hébergeur, je vous dirai sa réponse.

Je viens d'essayer en ayant un .htaccess minimal :

# Let's encrypt
RewriteRule ^.well-known/acme-challenge - [L]

### Authentication by passwd
AuthUserFile "/home5/user/.htpasswds/public/mywebsite/passwd"
AuthType Basic
AuthName "Please authenticate"
Require valid-user
Order allow,deny
Satisfy any

Je ne vois plus ma page en faisant Annuler, par contre depuis une requête http je tombe toujours sur la page 401.shtml. Je suppose que c'est un problème de la conf hébergeur, peut-être avec la 1e ligne (qu'il m'avait demandé de laisser en haut du fichier, pour être compatible avec Let's Encrypt)

Si j'ajoute au .htaccess :

RewriteEngine On

### rewrite url (Zend Framework)
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Je vois de nouveau le contenu de la page en faisant Annuler !
Cette partie est pourtant obligatoire pour le système de routing du Zend Framework. Une url site.com/pouet sera redirigé vers index.php puis le controleur pouet, sans cet url rewriting le navigateur cherchera le répertoire pouet qui n'existe pas.

Donc si je comprend bien, en requêtant site.co/pouet, et en suivant les directives du htaccess :
- je demande une authentification
- je redirige vers index.php puis vers le controleur pouet

Le problème est que l'url rewriting est exécuté même si l'authentification est refusée !
Pourtant je n'ai pas le choix, c'est obligatoire avec ce framework :
Doc Zend Framework (voir la partie "Rewriting within a .htaccess file")
Donc je ne peux pas m'en passer, alors que ça semble être une cause du problème... hmm

Dernière modification par Jarodd (Le 28/08/2016, à 18:21)


Ubuntu 22.04.3 LTS (64 bits)

Hors ligne

#13 Le 01/09/2016, à 07:36

bruno

Re : [Résolu] htaccess : mettre une authentification + HTTPS

Effectivement te règles de réécriture ne font rien pour tout ce qui est fichier de taille non nulle (-s), lein symbolique (-l) ou dossier (-d) et renvoient sur index.php pour tout le reste (pris en charge par le système de routes de Zend).

Je ne comprend pas pourquoi cela interfère avec l'authentification. Peut-être faudrait-il essayer quelque chose du style :

<Location />
    ### Authentication by passwd
    AuthUserFile "/home5/user/.htpasswds/public/mywebsite/passwd"
    AuthType Basic
    AuthName "Please authenticate"
    Require valid-user
</Location>
RewriteEngine On

### rewrite url (Zend Framework)
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Hors ligne

#14 Le 01/09/2016, à 14:54

Jarodd

Re : [Résolu] htaccess : mettre une authentification + HTTPS

Cela me donne une erreur 500 Internal Server Error sad


Ubuntu 22.04.3 LTS (64 bits)

Hors ligne

#15 Le 03/09/2016, à 10:24

Jarodd

Re : [Résolu] htaccess : mettre une authentification + HTTPS

Difficile à comprendre, mais désormais cela fonctionne, avec le htaccess du message 12.
Il y avait peut-être un cache serveur qui prenait une ancienne version du fichier ?
En tout cas c'est résolu. Merci bcp pour votre aide big_smile


Ubuntu 22.04.3 LTS (64 bits)

Hors ligne