7

Umschreiben Ich versuche, das ~/public_html/dev Verzeichnis zu schützen, aber das sicher machen will ich es über ssl laufen.Do HTTP-Authentifizierung über HTTPS mit URL

Der mittlere Abschnitt der unteren .htaccess Datei wechselt zu https, wenn der Anfrage-URI mit /dev beginnt und funktioniert.

Der letzte Abschnitt der Datei funktioniert auch, aber nicht richtig funktioniert mit https umleiten.

Ich möchte im Grunde http://www.example.com/dev/some_sub_dir/ eingeben und auf https://www.example.com/dev/some_sub_dir/ umgeleitet werden und aufgefordert, den HTTP-Auth-Benutzername und das Passwort.

Was passiert derzeit, wenn ich gehe zu http://www.example.com/dev/some_sub_dir/ Ich werde aufgefordert, einen Benutzernamen und ein Passwort über Port 80, und dann sofort wieder über Port 443 aufgefordert. So werden meine Anmeldeinformationen zweimal gesendet, einmal im Klartext, und einmal verschlüsselt. Making die ganze https URL umschreiben ein wenig sinnlos.

Der Grund dafür ist, dass ich nicht in der Lage sein werde versehentlich meinen Benutzer/Pass über http; https immer das /dev Verzeichnis zugegriffen werden.

Die .htaccess befindet sich im Verzeichnis ~/public_html/dev.

Antwort

10

Es ist ein relativ beliebt Hack zu HTTPS zu erzwingen, bevor die Standardauthentifizierung zu tun. Ich sah es zuerst hier:

http://blog.jozjan.net/2008/02/htaccess-redirect-to-ssl-https-before.html

Es geht um ein benutzerdefinierten Fehler-Dokument mit behandeln, was geschieht, wenn die HTTPS-Überprüfung fehlschlägt.

Zum Beispiel, ich habe eine einzige Seite, die ich brauche auf HTTPS zu zwingen, so dass ich tat dies in einer .htaccess-Datei:

<FilesMatch "secure-page.php"> 
    SSLRequireSSL 
    ErrorDocument 403 https://www.example.com/secure-page.php 
    AuthType Basic 
    AuthName "Secure Page" 
    AuthUserFile /var/www/whatever/.htpasswdFile 
    Require valid-user 
</FilesMatch> 

was übersetzt:

wenn die angeforderte Seite ist ' secure-page.php‘- wenn nicht HTTPS, dann zu einer benutzerdefinierten umleiten‚Fehlerseite‘- die‚Fehlerseite‘ist eigentlich nur die HTTPS-Version der Seite - auf der zweite Anforderung, da jetzt die HTTPS-Überprüfung bestanden, führt Grund Auth :)

Sie können dieses Konzept in ein Verzeichnis oder eine andere Verwendung erweitern Fälle - Ihre individuelle ‚Fehlerseite‘ könnte eine PHP-Seite, die wie in den obigen Link auf die richtige HTTPS-URL oder ein CGI-Skript leitet sein ...

+0

das ist ziemlich hinterhältig – Matthew

+0

Ja, wahrscheinlich nicht eine optimale Lösung, aber nach vier Stunden, mich selbst in der gleichen misslichen Lage wie Sie zu finden, war es der beste Ich konnte finden :) – siliconrockstar

+0

Ich versuchte sie alle und dann einige; Diese Lösung hat am besten für mich funktioniert. Ich habe die FilesMatch-Anweisung entfernt und dann alles überprüft - was besonders gut funktioniert, wenn der Besucher keine Datei z. index.php. http://www.askapache.com/htaccess/apache-ssl-in-htaccess-examples.html gibt Ihnen auch viele gute Informationen; basierend darauf habe ich auch SSLOptions + StrictRequire – Praesagus

2

Der Schutz von Inhalten mit der Standardauthentifizierung funktioniert nie sicher über HTTP.

Sobald der Benutzer seinen Benutzernamen und sein Passwort eingegeben hat, wird er unverschlüsselt für jede Seite auf diese Seite gesendet - er sendet nicht nur die Uhrzeit, zu der der Benutzer dazu aufgefordert wird.

Sie müssen Anfragen über HTTP als nicht authentifiziert behandeln, und tun alle über HTTPS Zeug angemeldet.

Viele Websites haben HTTPS für die Anmeldung verwendet - verwenden Sie Formulare und Cookies, anstatt grundlegende Auth - und dann gehen Sie zu HTTP danach. Dies bedeutet, dass ihr Cookie "Sie sind eingeloggt" unverschlüsselt gesendet wird. Jedes wertvolle Ziel wurde deswegen gehackt, und Gmail wechselt jetzt zu vollem HTTPS und andere werden folgen.

Sie haben nicht die gleichen Skalierungsprobleme, die andere gehabt haben, dass sie von der rechnerisch teurer HTTPS gehalten hat. Wenn Ihre Homepage HTTPS-Zugriff unterstützt, verwenden Sie sie durchgehend.

+0

Es nervt mich, dass nach dem erneuten Lesen der Frage scheint, dass Sie den Rat, den ich schrieb, gut kennen; Ich denke, es ist nützlich für andere, die später den Thread lesen, um meine Gründe zu sehen, also werde ich es bleiben lassen. – Will

+1

Hast du die Frage überhaupt gelesen? Er möchte HTTP-Authentifizierung über HTTPS verwenden. Die Authentifizierung findet jedoch vor der Weiterleitung von HTTP zu HTTPS statt. Wenn Sie also * http: //example.com/dev/...* anfordern, wird die Authentifizierung ausgelöst, dann erfolgt die Umleitung und die Aufforderung * https: //example.com/dev/...* fordert eine weitere Authentifizierung an. Er möchte zuerst die Authentifizierung umleiten und dann die Authentifizierung veranlassen. – Gumbo

+0

@Gumbo yeap Ich wählte das bei der zweiten Lesung und notierte es als Kommentar – Will

0

Funktioniert es, Ihren Authentifizierungsabschnitt in einen <Location> oder <LocationMatch> Tag unter Verwendung des Protokolls als den Begriff zu setzen?

4

lief ich in das gleiche Problem und fand schließlich eine hässliche Lösung, aber es funktioniert. Setzen Sie die Rewrite-Regel in eine Directory-Direktive in httpd.conf oder einer Ihrer conf.d-Dateien (d. H. In der Serverkonfiguration "Main"). Dann setzen Sie die Auth * - und Require-Zeilen in eine Directory-Direktive innerhalb der <VirtualHost _default_:443> Container in ssl.conf (oder wo auch immer Ihre SSL VirtualHost definiert ist).

Für mich bedeutet dies eine Datei zu erstellen /etc/httpd/conf.d/test.conf mit:

<Directory "/var/www/html/test"> 
     # 
     # force HTTPS 
     # 
     RewriteEngine On 
     RewriteCond %{HTTPS} off 
     RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 
</Directory> 

...und dann das folgende innerhalb /etc/httpd/conf.d/ssl.conf knapp über dem </VirtualHost> tag:

<Directory "/var/www/html/test"> 
     # 
     # require authentication 
     # 
     AuthType Basic 
     AuthName "Please Log In" 
     AuthUserFile /var/www/auth/passwords 
     Require valid-user 
</Directory> 

Dadurch macht Apache die RewriteRule auf alle Anforderungen gelten, und die Auth-Anforderungen nur auf Anfragen in den 443 Virtualhost.

1

Wenn Sie die Rewrite-Regeln in der Hauptkonfigurations platzieren, außerhalb jeder oder oder ähnliches, wird Umschreiben vor der Authentifizierung erfolgen.

Siehe Rewrite Tech

0

ich um es auf diese Weise erhalten. erlauben nur Nicht-SSL, da es dann einmal benötigen weitergeleitet wird Auth auf SSL ...

SetEnvIf %{SERVER_PORT} ^80$ IS_NON_SSL 

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 

AuthUserFile /.htpasswd 
AuthName "Enter your Username and Password:" 
AuthType Basic 
require valid-user 
Allow from env=IS_NON_SSL 
4

Aufbauend auf siliconrockstar Antwort, ich ein PHP-Skript bin hinzufügen, die in dem Fall funktionieren würde, wo Sie SSL wollen erzwingen alle die Dateien, nicht nur die Ein-Datei-Fall von Siliconrockstar gezeigt. Auch hier funktioniert es in Verbindung mit der htaccess-Datei.

SSLRequireSSL 
    ErrorDocument 403 /yourphp.php 
    AuthType Basic 
    AuthName "Secure Page" 
    AuthUserFile /some_path_above_the_html_root/.htpasswdFile 
    Require valid-user 

Die PHP durch die .htaccess (den Pfad für die PHP in diesem Beispiel .htaccess ist die Wurzel Ihrer Website angegeben), die auf der URL https zwingt genannt:

Die .htaccess auf ganzes Verzeichnis zu schützen Sie haben angerufen:

<?php 
$path = "https://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; 
if ($_SERVER['SERVER_PORT'] == 80) { 
    header("Status: 302 Moved\n"); 
    header("Location: ".$path."\n\n"); 
} 
else { 
    header("Content-type: text/html\n\n"); 
    echo "How did you get here???"; 
} 
?> 

Wenn Ihre Site kein SSL-Zertifikat hat, müssen Sie eines installieren. Wenn dies Ihre einzige Verwendung ist, können Sie ein selbstsigniertes Zertifikat installieren. Auf einem cPanel VPS mit Ihrer Website auf einer dedizierten IP, die Momente zu tun braucht: in WHM, besuchen Sie

One. Generieren Sie ein SSL-Zertifikat und Signing Request

dann

Zwei. Installieren Sie ein SSL-Zertifikat auf einer Domain

0

Ich weiß, das ist eine alte Frage, aber ich hatte Probleme mit einem einfachen ht.Zugriffsumleitung. Nach vielen anderen Problemen und Antworten habe ich endlich diesen htaccess zusammengestellt, der wie vorgesehen funktioniert.

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 

AuthName "Private Server" 
AuthUserFile /var/www/.htpassword 
AuthType Basic 
require valid-user 
Order allow,deny 
Allow from env=!HTTPS 
Satisfy Any 

die

Order allow,deny 

Zu beachten Welches ist das, was von vielen anderen Antworten fehlte ich gesehen habe, wie es Menschen direkt in bei der Verwendung von https erlauben würde. Der andere Teil, der von meinen Tests fehlte, war die folgende:

Satisfy Any 

Das folgende Snippet ist, was Kunden nicht SSL mit der Umleitung ermöglicht. Die HTTPS-Umgebungsvariable wird von der mod_ssl für SSL-Clients festgelegt.

Allow from env=!HTTPS 
+1

Das funktioniert nicht, es lässt nur den gesamten Datenverkehr zu – nbsp