Apache2 – SSL erzwingen bzw. HTTP-Zugriffe umleiten

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>
War dieser Artikel hilfreich für Sie?
[Gesamt: 5 Durchschnitt: 2.2]

4 thoughts on “Apache2 – SSL erzwingen bzw. HTTP-Zugriffe umleiten

  1. […] geht’s ins Nirwana. Das ist unschön und so basteln wir uns eine Umleitung, wie z.B. hier beschrieben mit einem zweiten vhost in der […]

  2. […] ich das nächste mal nicht wieder Stunden in google verbringe: Force SSL Secure Debian Configure […]

  3. Klasse Idee,

    hab die Abfrage allerdings ein klein wenig abgeändert:
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule (.*) https://%{HTTP_HOST}/$1 [L]

    Grüße
    Andreas Becker

  4. Bene sagt:

    Meine alte Methode (redirect)hat immer mal wieder zu Problemen geführt, deine Idee ist echt klasse, hat mir sehr geholfen, besten Dank!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *