it-swarm.com.de

Beschränken Sie Apache so, dass nur für einige Verzeichnisse der Zugriff über SSL zulässig ist

Ich habe einen Apache 2.2-Server mit einem SSL-Zertifikat, auf dem mehrere Dienste gehostet werden, auf die nur über SSL zugegriffen werden soll.

dh: https : //myserver.com/topsecret/ sollte erlaubt sein, während http : //myserver.com/topsecret/ sollte entweder abgelehnt oder im Idealfall an https weitergeleitet werden. http://myserver.com/public sollte diese Einschränkung nicht haben und entweder mit http oder https funktionieren.
Die Entscheidung, http zuzulassen/zu verweigern, wird im Verzeichnis der obersten Ebene getroffen und wirkt sich auf alle Inhalte darunter aus.

Gibt es eine Anweisung, die in die Apache-Konfiguration eingefügt werden kann, um den Zugriff auf diese Weise zu beschränken?

33
DrStalker

Die Direktive SSLRequireSSL ist genau das, wonach Sie suchen.

In deinem <VirtualHost> oder auf der obersten Ebene, wenn Sie keine virtuellen Hosts verwenden:

<Directory /topsecret>
  SSLRequireSSL
</Directory>

Oder in .htaccess:

SSLRequireSSL
38
Thomas

In der globalen Konfiguration können Sie Folgendes verwenden:

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{HTTPS} !on
   RewriteRule .* https://%{HTTP_Host}/%{REQUEST_URI} [R=301,L,QSA]
</IfModule>

Ebenso können Sie eine .htaccess-Datei im ersten Verzeichnis des sicheren Verzeichnisbaums verwenden:

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{HTTPS} !on
   RewriteRule .* https://%{HTTP_Host}/%{REQUEST_URI} [R=301,L,QSA]
</IfModule>

Letzteres kann auch in einer Verzeichnisanweisung in der globalen oder virtuellen Hostkonfiguration abgelegt werden.

8
who

Jemand hat SSLRequireSSL erwähnt, aber ich glaube nicht, dass es von selbst funktioniert, und ich habe kein erfolgreiches Beispiel dafür gefunden. Der empfohlene Weg ist https://wiki.Apache.org/httpd/RedirectSSL Ich habe das angewendet und es funktioniert gut!

1
Robert

Alternativ können Sie die serverseitige Sprache verwenden, um die Verarbeitung für Sie durchzuführen, anstatt die Konfigurationsoptionen von Apache zu verwenden (wenn Sie möglicherweise keinen Zugriff auf die Serverkonfiguration haben).

Zum Beispiel mit PHP:

if (!isset($_SERVER['HTTPS'])) {
  // put your redirect here
  header('Location: http://myserver.com/public');
}

(Beachten Sie jedoch Folgendes: Wenn Sie ISAPI unter Microsoft IIS verwenden und die Anforderung nicht über HTTPS weitergeleitet wird, ist der Wert der Variablen $ _SERVER ['HTTPS'] "off" ")

1
Magsol

Angenommen, Sie verwenden VirtualHost-Direktiven.

Platzieren Sie eine Directory-Direktive im virtuellen Nicht-SSL-Host, der den Zugriff verweigert.

Fügen Sie dann eine Directory-Direktive in den ssl virtualhost ein, der den Zugriff gewährt.

0
Chris

Ich habe diesen mod_rewrite immer in einer .htaccess-Datei ausgeführt, obwohl Sie dies auch in Ihrer Hauptkonfigurationsdatei tun sollten.

Hier ist eine Anleitung mit einigen Möglichkeiten, wie dies geschehen kann: Smart HTTP und HTTPS RewriteRule Redirects

0
Jason Wadsworth