Frage Schränken Sie Apache ein, um nur den Zugriff mit SSL für einige Verzeichnisse zu erlauben


Ich habe einen Apache 2.2 Server mit einem SSL-Zertifikat, das mehrere Dienste hostet, die nur mit SSL erreichbar sein sollen.

zB: https: //myserver.com/topsecret/ sollte während while erlaubt sein http: //myserver.com/topsecret/ sollte entweder abgelehnt oder idealerweise auf https umgeleitet werden. http://myserver.com/public sollte diese Einschränkung nicht haben und sollte entweder mit http oder https arbeiten.
Die Entscheidung, http zuzulassen / zu verweigern, wird im Verzeichnis der obersten Ebene getroffen und betrifft alle darunter liegenden Inhalte.

Gibt es eine Direktive, die in der Apache-Konfiguration platziert werden kann, um den Zugriff auf diese Weise zu beschränken?


30
2017-09-19 01:19


Ursprung




Antworten:


Das SSLRequireSSL Richtlinie ist was du suchst.

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

<Directory /topsecret>
  SSLRequireSSL
</Directory>

Oder in .htaccess:

SSLRequireSSL

35
2017-09-19 01:24



Willkommen bei Serverfehler! Wir bevorzugen wirklich, dass Antworten Inhalt haben, keine Hinweise auf Inhalte. Dies könnte theoretisch die Frage beantworten, es wäre vorzuziehen um die wesentlichen Teile der Antwort hier einzubeziehen und den Link als Referenz bereitzustellen. Vielen Dank! - Chris S
Ok, ich habe meinen fünf Jahre alten Post mit einem Beispiel aktualisiert :) - Thomas
Um fair zu sein, 5 Jahre alt oder nicht, ist die Schlussfolgerung, dass die Verbindung, auf die Sie verweisen, verschwindet, so dass Ihre Antwort für jemanden, der später nach der Information sucht, größtenteils oder völlig nutzlos ist. Also habe ich deinen snarky Kommentar richtig gewählt (ehrlich), aber ich stimme auch völlig zu, dass die Antwort einen Kontext haben sollte, damit sie nützlich bleibt. Zumal es als die richtige Antwort markiert ist. - Craig
Ich glaube nicht, dass die SO / SF-Community damals so genau auf die Antworten "nur" und "lmgtfy" einging. Aber ich stimme zu; Eine rückwirkende Bearbeitung ist jederzeit sinnvoll. - Thomas
Zu welcher Konfigurationsdatei würde ich diese Anweisung hinzufügen? - dan carter


In der globalen Konfiguration könnten Sie verwenden:

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

Genauso könnten Sie eine .htaccess-Datei im ersten Verzeichnis der sicheren Verzeichnisstruktur verwenden:

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

Dieser letzte könnte auch in eine Verzeichnis-Direktive in der globalen oder virtuellen Host-Konfiguration eingefügt werden.


7
2017-09-19 01:25



Die Umleitung von HTTP zu HTTPS eröffnet Ihnen bestimmte Arten von MiTM-Angriffen. Nur eine Warnung. - Craig


Alternativ können Sie die serverseitige Sprache verwenden, um die Verarbeitung für Sie durchzuführen, anstatt die Konfigurationsoptionen von Apache zu verwenden (falls 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');
}

(Obwohl Sie wissen, wenn Sie ISAPI in Microsoft IIS verwenden, wenn die Anforderung lautet nicht wird über HTTPS weitergeleitet, dann ist der Wert der Variablen $ _SERVER ['HTTPS'] "aus"


1
2017-09-19 01:27





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


1
2017-12-21 13:54





Angenommen, Sie verwenden VirtualHost-Anweisungen,

Setzen Sie eine Directory-Direktive in den Nicht-SSL-Virtualhost, der den Zugriff verweigert.

Platzieren Sie dann eine Directory-Direktive in ssl virtualhost, die den Zugriff gewährt.


0
2017-09-19 01:22





Ich habe dieses mod_rewrite immer in einer .htaccess-Datei gemacht, obwohl Sie es auch in Ihrer Hauptkonfigurationsdatei machen könnten.

Hier ist ein Leitfaden mit einigen Möglichkeiten, dies zu erreichen: Smart HTTP und HTTPS RewriteRule Redirects


0
2017-09-19 01:24