Apache - Weiterleiten an https vor AUTH


9

Ich habe eine Entwicklungssite eingerichtet, für die ein Benutzername und ein Kennwort (grundlegende http-Authentifizierung) erforderlich sind, bevor der Benutzer die Site sehen kann. Ich möchte zuerst zu einem sicheren Protokoll umleiten, bevor der Benutzer das Kennwort im Klartext senden kann. Irgendwelche Gedanken dazu, wie man das mit Apache macht? Ich habe Zugriff auf die Dateien conf und .htaccess.

Das Endergebnis wäre:

http: // xxxx / - Wenn Benutzer hierher kommen, werden sie sofort zu https umgeleitet:

https - Wenn der Benutzer hier ankommt, wird er zur Eingabe seines Benutzernamens / Passworts aufgefordert.

Antworten:


4

Sie können die Umleitungsanweisung auf http virtualhost verwenden, um zur https-Site umzuleiten, auf der die Authentifizierung erfolgt. Sie können auch mod_rewrite verwenden , um die Umleitung durchzuführen. Die grundlegende Aufgabe besteht darin, die Authentifizierung nicht auf http virtualhost festzulegen und alles auf dem https virtualhost umzuleiten, auf dem die Authentifizierung erfolgt.


Das Problem ist, dass dies derselbe Host ist und die Domänen gleich sind. Gibt es eine Möglichkeit im .htaccess zu sagen, dass die Authentifizierung nur angewendet wird, wenn https festgelegt ist?
Jay

1
Leider kann dies nur in einem virtuellen Host durchgeführt werden, da Apache keine Möglichkeit bietet, unterschiedliche Konfigurationen pro Anforderung auf der Ebene .htaccess anzuwenden. Sie können die verschiedenen virtuellen Hosts an verschiedenen Ports verwenden, um die Dinge anders zu machen.
David Pashley

Ja, Sie müssen 2 virtuelle Hosts wie <VirtualHost *: 80> und <VirtualHost *: 443> verwenden und nicht nur einen
Radius

Während ich gehofft hatte, dies in .htaccess tun zu können, sieht es so aus, als ob ihr Recht habt. Der einzige Weg ist in den conf-Dateien, also habe ich es so eingerichtet, dass http zu https umgeleitet wird. Die Authentifizierung wird weiterhin im .htaccess erledigt, der nur ausgeführt wird, wenn Sie jetzt auf die https-Site zugreifen. Das Beibehalten der Authentifizierung in .htaccess hat den Vorteil, dass die Authentifizierung weiterhin verwendet wird, wenn die Umleitung aus irgendeinem Grund fehlschlägt.
Jay

7

Unabhängig davon, wie Sie den SSL-vhost konfiguriert haben, würde ich diese Konfiguration für den Nicht-SSL-vhost verwenden:

<VirtualHost *:80>
    ServerName www.sitename.com
    ServerAlias sitename.com others-if-you-like.com
    ServerAdmin webmaster@sitename.com

    RedirectMatch ^/(.*)    https://www.sitename.com/$1 [L,R]

</VirtualHost>

Fügen Sie auch Zeilen für Ihre Protokollierung hinzu, aber es wird nichts anderes benötigt. Alles wird permanent an die URL https: // umgeleitet, und der .htaccess oder andere Zugriffskontrollelemente der SSL-Site werden erst nach der Umleitung verarbeitet.


1

Die Webanwendung unseres Kunden wird in seinem Webbenutzerverzeichnis installiert. Die Autorisierung erfolgt vor den mod_rewrite-Regeln ( https://serverfault.com/a/443185/253111 ), und wir konnten die akzeptierte Antwort nicht erhalten, sodass mod_rewrite keine Option zu sein schien.

Schließlich benötigten wir ausdrücklich SSL und verwendeten das Stammverzeichnis der Webanwendung über HTTPS als 403- und 404-Fehlerdokumente. Wenn man also eine Seite über HTTP (die nicht autorisiert ist, daher die 403) oder eine nicht vorhandene Seite (404) besucht, wird man zu dh umgeleitet. https: //DOMAIN.TLD/~WEBUSER/admin .

Dies ist die .htaccess-Datei mit einigen zusätzlichen Informationen in den Kommentaren.

### INFO: Rewrites and redirects are handled after authorisation
### @link https://serverfault.com/a/443185/253111

### INFO: Log out of a HTPASSWD session
### This was not always possible, but Firefox and Chrome seem to end sessions
### when a new one is trying to be using ie.:
### https://logout:logout@DOMAIN.TLD/~WEBUSER/
### @link http://stackoverflow.com/a/1163884/328272

### FORCE SSL: Explicitly require the SSL certificate of a certain domain to
### disallow ie. unsigned certificates. ErrorDocument's are used to redirect
### the user to an HTTPS URL.
### @link http://forum.powweb.com/showthread.php?t=61566
SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire  %{HTTP_HOST} eq "DOMAIN.TLD"

### HTPASSWD AUTHENTICATION
AuthUserFile /var/www/vhosts/DOMAIN.TLD/web_users/WEBUSER/.htpasswd
AuthType Basic
AuthName "Hello"
Require valid-user

### ERROR DOCUMENTS: Redirect user in case of a 403 / 404.
ErrorDocument 403 https://DOMAIN.TLD/~WEBUSER/admin
ErrorDocument 404 https://DOMAIN.TLD/~WEBUSER/admin

Dies ist eine gute Lösung für gehostete Websites, dh Websites, auf denen keine Apache-Einstellungen bearbeitet werden dürfen, sondern nur .htaccess-Dateien.
Masgo

0

Sie können auch diesen Blogeintrag hier sehen, in dem erklärt wird, wie dies gemacht SSLRequireSSLwird. Eine benutzerdefinierte ErrorDocument 403Direktive, die auf ein Perl-Skript verweist, das zur richtigen HTTPS-URL umleitet.


0

Von diesem Beitrag habe ich gelernt , über die Verwendung von <If>in .htaccessfür Apache 2.4+:

<If "%{HTTPS} != 'on'">
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</If>
<Else>
AuthType Basic
AuthName "Login"
AuthUserFile /path/to/auth/file
Require valid-user
</Else>

Wenn Sie jedoch überhaupt eine http-Version der Site haben, können Sie nichts tun, um zu verhindern, dass ein falsch konfigurierter Client versehentlich das Klartextkennwort in seiner anfänglichen unverschlüsselten Anforderung sendet.


-1

Wenn ich mich richtig erinnere, erfolgt die http-Basisauthentifizierung beim ersten Handshake, bevor die SSL-Sitzung eingerichtet wird. Selbst wenn Sie sich bei einem SSL-Server anmelden, erfolgt die grundlegende Authentifizierung im Klartext. Dies war eines der langjährigen Probleme bei der Basisauthentifizierung. Möglicherweise befasst sich eine der anderen http-Authentifizierungsmethoden damit. Es ist lange her, seit ich mir das angeschaut habe.


2
Das ist nicht wahr. HTTP-Authentifizierungsdaten werden in den Headern der Anforderung übertragen, was nach der SSL-Aushandlung erfolgt. "Die Standardauthentifizierung über eine SSL-Verbindung ist jedoch sicher, da alles verschlüsselt wird, einschließlich Benutzername und Kennwort." - httpd.apache.org/docs/1.3/howto/auth.html#basiccaveat
Jay
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.