Tun HTTP-Authentifizierung über HTTPS mit URL-rewriting
Ich versuche zu schützen, die ~/public_html/dev
Verzeichnis mit http auth basic, aber stellen Sie sicher, dass ich will das es läuft über ssl.
Dem mittleren Abschnitt der unten .htaccess
- Datei wechselt zu https, wenn der request-URI beginnt mit /dev
und arbeitet.
Den letzten Abschnitt der Datei funktioniert auch, aber funktioniert nicht richtig mit der https-Umleitung.
Ich im Grunde wollen in der Lage sein zu geben http://www.example.com/dev/some_sub_dir/
und umgeleitet werden, um https://www.example.com/dev/some_sub_dir/
und aufgefordert, den http-auth Benutzername und Passwort.
Was derzeit passiert, ist, wenn ich gehen, um http://www.example.com/dev/some_sub_dir/
bekomme ich aufgefordert, einen Benutzernamen und ein Passwort über port 80, und dann sofort aufgefordert, wieder über den port 443. Also meine Anmeldeinformationen gesendet werden zweimal, einmal in klar und einmal verschlüsselt. Dadurch, dass die gesamte https-url-rewrite ein wenig sinnlos.
Der Grund HIERFÜR ist, so dass ich nicht versehentlich meine user/pass-über-http -, https-wird immer verwendet werden, um Zugriff auf die /dev
Verzeichnis.
Den .htaccess
ist in der ~/public_html/dev
Verzeichnis.
# Rewrite-Regeln für example.com RewriteEngine On RewriteBase / # force /dev über https RewriteCond %{HTTPS} !auf RewriteCond %{REQUEST_URI} ^/dev RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} # tun auth AuthType Basic AuthName "dev" AuthUserFile /home/matt/public_html/dev/.htpasswd Require valid-user
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es eine relativ beliebte hack zu erzwingen, HTTPS, bevor Sie die Standardauthentifizierung. Zuerst sah ich es hier:
http://blog.jozjan.net/2008/02/htaccess-redirect-to-ssl-https-before.html
Es beinhaltet die Verwendung einer benutzerdefinierten Fehler-Dokument zu handhaben, was passiert, nachdem die HTTPS-überprüfung fehlschlägt.
Ich habe zum Beispiel eine einzelne Seite, die ich brauche, um zu erzwingen von HTTPS auf, also ich habe das in einem .htaccess-Datei:
Übersetzt:
wenn die angeforderte Seite 'secure-page.php' - wenn nicht HTTPS, dann Umleitung auf eine custom 'Fehler-Seite' - die 'Fehler-Seite' ist eigentlich nur die HTTPS-version der Seite - auf die zweite Anfrage, da die HTTPS-check jetzt geht, führen Sie Basic Auth 🙂
Können Sie erweitern dieses Konzept um ein Verzeichnis oder eine andere Anwendungsfälle - Ihre custom 'Fehler-Seite' könnte eine php-Seite, die leitet auf die richtige HTTPS-URL oder einem CGI-Skript, wie in dem link oben...
Ich lief in das gleiche problem und fand schließlich eine hässliche Lösung, aber es funktioniert. Setzen Sie die rewrite-Regel in einer Directory-Direktive in httpd.conf oder deine conf.d-Dateien (D. H., in der "Main" - server-Konfiguration). Dann setzen Sie den Auth* und Erfordern Zeilen in eine Directory-Direktive innen die
<VirtualHost _default_:443>
container in ssl.conf (oder wo auch immer Ihr SSL-VirtualHost definiert ist).Für mich bedeutet dies, erstellen Sie eine Datei
/etc/httpd/conf.d/test.conf
mit:...und dann das hinzufügen der folgenden innerhalb
/etc/httpd/conf.d/ssl.conf
nur über die</VirtualHost>
tag:Tun, das macht der Apache gelten die RewriteRule auf alle Anfragen, und der auth-Anforderungen nur für Anforderungen in der 443 VirtualHost.
Gebäude auf siliconrockstar Antwort, ich bin das hinzufügen einer php-Skript, das wäre in dem Fall, wo Sie möchten, um force-SSL auf alle die Dateien, nicht nur die eine-Datei-Fall gezeigt siliconrockstar. Hier wieder, es funktioniert in Verbindung mit der htaccess-Datei.
Die htaccess zu schützen, um ganze Verzeichnis:
Php genannt, die durch die htaccess (den Pfad für die php-in diesem Beispiel-htaccess ist die Wurzel Ihrer Website), die Kräfte https auf die url, die Sie aufgerufen:
Wenn Ihre Website nicht über ein SSL-Zertifikat haben, müssen Sie es installieren. Wenn dies Ihre einzige Verwendung für Sie, können Sie installieren Sie ein selbstsigniertes Zertifikat. Auf einem cPanel VPS mit Ihre site auf einer dedizierten IP, das dauert Momenten zu tun: in WHM, besuchen
Einer. Generieren Sie ein SSL-Zertifikat und Signing Request
dann
Zwei. Installieren Sie ein SSL Zertifikat auf einer Domain
Schützen von Inhalten mit der basic-Authentifizierung wird nie funktionieren sicher über HTTP.
Sobald der Benutzer eingegeben hat, Ihren Benutzernamen und das Kennwort, unverschlüsselt übertragen werden für jede Seite anzeigen zu Website - die nicht nur geschickt die Zeit bekommt der Nutzer dazu aufgefordert werden.
Haben Sie zur Behandlung von Anfragen über HTTP als un-authentifiziert, und tun alle angemeldet Zeug über HTTPS.
Viele websites haben HTTPS verwendet für den login - Formularen und cookies, statt basic auth " - und dann gehen Sie zu HTTP danach. Dies bedeutet, dass Sie 'Sie sind eingeloggt' cookie gesendet wird unverschlüsselt. Alle wertvollen Ziel gehackt wurde, weil dieser, und gmail ist jetzt die Umstellung auf vollständige HTTPS und andere werden Folgen.
Sie haben nicht die gleiche Skalierung Probleme, die andere hatten gehalten hat, dass Sie Weg von der rechnerisch teurer HTTPS. Wenn Ihre homepage unterstützt HTTPS-Zugriff, verwenden Sie es überall.
Wenn Sie die rewrite-Regeln in der Haupt-config, außerhalb oder oder ähnlich, umschreiben, wird getan werden, bevor die Authentifizierung.
Sehen Rewrite-Tech
Funktioniert es, um Ihre Authentifizierungs-Abschnitt in einem
<Location>
oder<LocationMatch>
- tag unter Verwendung des Protokolls, wie der Begriff?Ich bekommen, um es auf diese Weise. Nur Nicht-SSL, da es umgeleitet werden, dann erfordert auth einmal auf SSL...
Ich weiß, das ist eine alte Frage, aber ich hatte Probleme mit einem einfachen ht.Zugriff umleiten. Nach vielen anderen Problemen und Antworten, die ich schließlich zusammen diese htaccess, das funktioniert wie vorgesehen.
Zu beachten, die
Was fehlte in vielen anderen Antworten, die ich gesehen habe, wie es möglich wäre, Menschen direkt bei der Verwendung von https. Der andere Teil fehlte, aus meinen tests war die folgende:
Das folgende snippet ist das, was nicht-SSL-clients in mit für die Weiterleitung. Die HTTPS env var eingestellt ist, von der mod_ssl für die ssl-clients.
Ich habe zwei Antworten auf die Frage, eines mit 2010 Mentalität, und einer mit einem post-2012-Mentalität.
Diese Frage zu beantworten, als ob es war 2010, als es gefragt wurde: die Verwendung von zwei verschiedenen VirtualHost-Konfigurationen.
Diese Lösung ist ein wenig außerhalb des Bereichs der Frage, wie die Implikation ist: "ich habe nur Zugang zu ändern
.htaccess
!" aber eine tragfähige Lösung in vielen Fällen ist der Antrag, der administrator du jour zu einfach-setup zwei verschiedene VirtualHost-Konfigurationen.Den nicht-SSL-VirtualHost ist nicht so konfiguriert, dass Zugriff auf alles auf das Dateisystem, und nur zurückgibt, 301-Weiterleitungen zu
https://...
Standorte für alle Anforderungen.Den SSL-listening-VirtualHost wird dann kostenlos zu implementieren, die Basic-Authentifizierung, ohne befürchten zu müssen, dass das standard-HTTP-listener verschenken der Ware.
Aber mit meinem post-2018 den Hut auf, und stellt fest, dass diese Frage gestellt wurde, bevor Apache 2.4 (Anfang 2012?), es ist Zeit für ein update. Apache 2.4 eingeführt
<If condition>
prüft, welche macht dies viel einfacher und direkter:Erste, nicht IfModule die RewriteEngine. Wie der Apache lauscht auf port 80 und 443 (standard-setup), UND wir wollen die Durchsetzung von SSL, wir wollen den server zu brechen, wenn Sie das Rewrite-Modul ist anders gelöst.
Zweiten einfach genug ist, führen Sie eine sofortige und permanente (301) umleiten, wenn die Anfrage nicht sicher ist. Hinweis(R edirect) und L(ast), die zusammenarbeiten, um sicherzustellen, dass nicht-verschlüsselte Anfragen werden umgeleitet und können nicht genutzt werden, um zu gewinnen, nicht authentifizierten Zugriff. (Für die OCD, nicht-kopieren-einfügen gemerkt, beachten Sie die Mangel der Raum zwischen
!=
undon
. Das ist Absicht.)Schließlich verwenden Sie dieselbe variable mit einem
<If-condition>
überprüfen, um sicherzustellen, dass wir nur verlangen, das Passwort für die TLS-Anfrage.Und insgesamt: