Apache2 – SSL erzwingen bzw. HTTP-Zugriffe umleiten

Oktober 29th, 2009 08:51 Uhr von Ronald

Ich habe mir gestern Abend mal testweise ein SSL-Zertifikat erstellt, das kann man ja für den Apache2 und mit OpenSSL inzwischen ziemlich einfach machen. Das Zertifikat alleine reichte ja nicht, ich musste also auch einen vhost dafür einrichten – gut, das war jetzt auch nicht schwierig. Interessant wurde die Sache dann, als ich mir überlegt habe, dass es ja in vielen Dingen erforderlich ist, dass eine Verbindung ausschließlich über SSL und Port 443 möglich, ein “Initialzugriff” aber auch über HTTP und Port 80 möglich sein soll.

Das hätte den Vorteil, dass der entsprechende vhost auch dann erreichbar wäre, wenn man vergessen würde, https vor die Verbindung zu schreiben. Wie realisiert man so etwas mit möglichst geringem Aufwand? Eine Umleitung mit einem (PHP-)Skript ist schnell geschrieben aber natürlich vollkommen übertrieben und “uncool”. Interessanter ist bei so etwas natürlich eine mod_rewrite-Variante, die alles gleich über den Apache direkt regelt. Wie kann so etwas aussehn? Nach einigen Tests mit Conditions und der einhergehenden Studie der Dokumentation von mod_rewrite, habe ich folgende Lösung geschrieben, die wunderbar funktioniert:

Der eigentliche vhost

Hier würden auch directory-, Authentication-, und ähnliche Anweisungen erfolgen.

<VirtualHost 127.0.0.1:443>
ServerName localhost:443

SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem
</VirtualHost>

Das ist der “Dummy”-vhost

Dieser vhost dient dann nur noch dazu um eine Umleitung auf den oberen “443-vhost” zu machen.

<VirtualHost localhost:80>
ServerName localhost

# Das folgende erzwingt SSL
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

Teile und genieße Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • Digg
  • del.icio.us
  • Netvouz
  • DZone
  • ThisNext
  • MisterWong
  • Wists

Geschrieben in Allgemeines, Linux | Keine Kommentare »

Einen Kommentar abgeben

Bitte beachte: Die Kommentare werden moderiert. Dies kann zu Verzögerungen bei Deinem Kommentar führen. Es besteht kein Grund den Kommentar erneut abzuschicken.

*
To prove you're a person (not a spam script), type the answer to the math equation shown in the picture. Click on the picture to hear an audio file of the equation.
Click to hear an audio file of the anti-spam equation