Forcer SSL sur Apache, avec redirection Auth et Canonical

J’ai lu quelques articles sur la façon de redirect vers SSL, également sur la façon de s’assurer qu’un site utilise le nom de domaine / nom canonique de www, et d’autres sur la façon de configurer l’authentification de base. Voici ce que j’ai dans mon fichier .htaccess en ce moment:

 RewriteEngine On
 RewriteCond% {HTTPS}! = On
 RewriteRule ^ https: //% {HTTP_HOST}% {REQUEST_URI} [L, R = 301]


 RewriteEngine on
 RewriteCond% {HTTP_HOST}! (^ Www \ .site \ .com *) $
 RewriteRule (. *) Https: //www.site.com$1 [R = 301, L]


 AuthName "Verrouillé"
 AuthUserFile "/home/.htpasswd"
 AuthType Basic
 nécessite un utilisateur valide

Cela fonctionne assez bien, mais je voudrais l’optimiser. Mes questions incluent:

  1. Comment éviter la double authentification? Lorsque j’accède au site sans SSL, je dois m’authentifier, puis je suis redirigé vers SSL et je dois m’authentifier à nouveau. Puis-je simplement être redirigé puis authentifié?
  2. Il semble que la première règle soit vraiment géniale car je pourrais l’utiliser sur n’importe quel site sans le modifier. La règle n ° 2 peut-elle être réécrite pour être indépendante du site? c.-à-d.: forcer www à être utilisé sur n’importe quel site quel que soit le nom de domaine (avec une meilleure règle écrite)? répondu ici
  3. Comment pourrais-je faire l’inverse du numéro 3 avec une règle qui fonctionnerait sur n’importe quel site pour forcer le site à ne pas utiliser www, c’est-à-dire redirect vers site.com depuis www.site.com? répondu ici

Pour 1:

Définissez les instructions d’ authentification uniquement sur VirtualHost qui écoute sur *:443 . Vous devriez avoir 2 VirtualHosts, un sur le port 80 et un sur le port 443. Utiliser AuthType Basic sur une communication non-SSL est un gros problème, le nom d’utilisateur et le mot de passe ne sont codés qu’en base64, donc clairs sur toutes les requêtes ) qui sont utilisés sur votre serveur http!

Pour 1

Comment éviter la double authentification? Puis-je simplement être redirigé puis authentifié?

Boom! Cela marche.

 SSLOptions +SsortingctRequire SSLRequireSSL SSLRequire %{HTTP_HOST} eq "www.askapache.com" ErrorDocument 403 https://www.askapache.com/admin/ 

Voir:

Il suffit de mettre le bloc ci-dessus en haut de votre .htaccess, voici le mien:

 SSLOptions +SsortingctRequire SSLRequireSSL SSLRequire %{HTTP_HOST} eq "www.askapache.com" ErrorDocument 403 https://www.askapache.com/admin/ AuthType Digest AuthName "Protected By AskApache" AuthDigestDomain / https://www.askapache.com/admin/ AuthUserFile /home/askapache/.htpasswd-digest Require valid-user Satisfy All 

Si vous utilisez Apache 2.4, vous pouvez également éviter la double authentification en utilisant les sections de configuration .

 # Redirect to HTTPS RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L] # Authenticate users only when using HTTPS  AuthType Basic AuthName "Special things" AuthUserFile /etc/blah.htpasswd Require valid-user  

J’ai donné une version plus affinée de ceci dans ma réponse ici .

Ceci est ma solution pour éviter les doubles authentifications de ré-écritures précédentes comme:

 RewriteCond %{HTTPS} ^off$ [NC] RewriteCond %{REQUEST_URI} /administrator/* RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [R,L]  AuthType Basic AuthName "Authorization Required" AuthUserFile /var/www/vHost/etc/HTTP-Basic-Auth/htaccess-Users AuthGroupFile /var/www/vHost/etc/HTTP-Basic-Auth/htaccess-Groups #require valid-user require group Webmins   ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var  

Même si je ne le fais pas, la condition est vraiment nécessaire – plus il y a de sécurité supplémentaire si la réécriture ne fonctionnera pas pour une raison quelconque.

Merci pour la réponse ci-dessus, cela aide à créer la solution combinée https et www. Mon seul souci est qu’il existe certaines conditions dans lesquelles l’authentification n’est pas déclenchée, autorisant une personne à accéder sans les informations d’identification. Je ne suis pas sûr que ce soit le cas, mais peut-être que des gens shinys peuvent dire le contraire.

Ce code redirige non-www vers www et http vers https, avec le dossier .htaccess auth.

Ceci est le contenu du fichier htaccess dans le répertoire que vous souhaitez protéger:

 RewriteEngine on # ensure www. RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/foldername/$1 [L,R=301] # ensure https RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteCond %{HTTPS} !=on [NC] RewriteRule ^(.*)$ https://%{HTTP_HOST}/foldername/$1 [L,R=301] # Apache 2.4 If  AuthType Basic AuthName "Protected folder" AuthUserFile "/home/etc/.htpasswds/public_html/foldername/passwd" require valid-user