• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] mod_rewrite und SSL

garwen

Newbie
Hallo zusammen

Ich beiss mir hier grad die Zähne an den rewrite rules aus.

Folgende Situation: Ich habe firmenintern einen Server, nennen wir ihn "server1", auf dem Apache mit SSL installiert ist. Darauf läuft OTRS.
Als erstes wollte ich nun SSL erzwingen, was ich in der vhost.conf mit folgender Regel erledigt habe:
Code:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
So weit so gut. Jetzt kommt allerdings ein Zertifikatsfehler, da im Zertifikat als Servername server1.firma.com steht. Gut, habe ich die Regel erweitert:
Code:
RewriteEngine On
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3
RewriteCond %{HTTPS} off
Rewritecond %{HTTP_HOST !^server1.firma.com
RewriteRule (.*) https://%{HTTP_HOST}.firma.com%{REQUEST_URI}
Das funktioniert auch, so lange man server1/otrs/index.pl oder http://server1/otrs/index.pl eingibt.
Wenn man jetzt allerdings https://server1/otrs/index.pl eingibt, wird man natürlich nicht umgeleitet. Ich gehe davon aus, dass ich jetzt eine Regel im vhost-ssl.conf einfügen muss, aber die bekomme ich einfach nicht gebacken. Man findet verschiedene Varianten, wie man so etwas lösen konnte. Einige habe ich ausprobiert, funkionieren will aber keine.
Es sehen aber fast alle etwa so aus:
Code:
RewriteEngine on
RewriteLog "/var/log/apache2/rewrite.log"     
RewriteLogLevel 3 
RewriteCond %{HTTP_HOST} ^server1$ [NC]     
RewriteRule ^(.*)$ https://server1.firma.com/$1 [R=301,L]
Könnte mir hier bitte jemand aushelfen ? Wie muss ich im vhost-ssl.conf die Regel definieren, dass das funktioniert ?

Merci & Gruss,
 

spoensche

Moderator
Teammitglied
garwen schrieb:
H
Code:
RewriteEngine On
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3
RewriteCond %{HTTPS} off
Rewritecond %{HTTP_HOST !^server1.firma.com
RewriteRule (.*) https://%{HTTP_HOST}.firma.com%{REQUEST_URI}
Das funktioniert auch, so lange man server1/otrs/index.pl oder http://server1/otrs/index.pl eingibt.
Wenn man jetzt allerdings https://server1/otrs/index.pl eingibt, wird man natürlich nicht umgeleitet.

Du hast per RewriteCond festgelegt, das die folgende Regel nur angwendet werden soll, wenn https off ist. Daher wird die Regel auch nicht ausgeführt, wenn du die URL mit https://... aufrufst. Das müsstest du also ändern.
 
OP
G

garwen

Newbie
Danke für die Info, spoensche. Mit Deiner vorgeschlagenen Änderung funktioniert es zwar nicht, aber es hat mich trotzdem auf die richtige Idee gebracht :)

Korrigiert mich, wenn ich das falsch interpretiere:
  • Gebe ich http (Port 80) im Browser ein, wird die vhost.conf verarbeitet.
  • Gebe ich https (Port 443) im Browser ein, wird die vhost-ssl.conf verarbeitet.
  • Mit meiner Rule ändere ich den Servername auf server1.firma.com und schicke die anfrage in die vhost-ssl.conf
  • Gebe ich im Browser direkt https ein, wird die vhost.conf nicht verarbeitet, sondern nur die vhost-ssl.conf

Anhand dieser Überlegungen habe ich die Regeln folgendermassen geändert:
vhost.conf
Code:
RewriteEngine On
        RewriteLog "/var/log/apache2/rewrite.log"
        RewriteLogLevel 3

        RewriteCond %{HTTP_HOST} !^server1.firma.com
        RewriteRule (.*) https://%{HTTP_HOST}.firma.com$1 [R=301]

        RewriteCond %{HTTP_HOST} ^server1.firma.com
        RewriteRule (.*) https://%{HTTP_HOST}$1 [R=301,L]
vhost-ssl.conf
Code:
RewriteEngine On
        RewriteLog "/var/log/apache2/rewrite.log"
        RewriteLogLevel 3
        RewriteCond %{HTTP_HOST} !^server1.firma.com
        RewriteRule (.*) https://%{HTTP_HOST}.firma.com$1 [R=301,L]


Das funktioniert jetzt soweit mit den Umleitungen:
server1 --> https://server1.firma.com
server1.firma.com --> https://server1.firma.com
https://server1 --> https://server1.firma.com

ABER: bei https://server1 findet die Zertifikatsprüfung VOR dem rewrite statt und ich erhalte vom Browser eine Fehlermeldung (die ich ja eigentlich vermeiden möchte).

Wie bekomme ich das jetzt hin, dass der rewrite VOR der Zertifikatsprüfung ausgeführt wird ?
 
OP
G

garwen

Newbie
Ich beantworte meine Frage mal selbst, da ich nach tiefem, tiefem Graben im Internet selbst eine Antwort gefunden habe.
Quelle: http://de.w3support.net/index.php?db=so&id=275178

Der Ablauf der Zertifikatsprüfung lässts ich nicht ändern.
Bei einem HTTP Request greift der rewrite, ändert den Domänennamen und verweist auf die HTTPS Verbindung.
Wird nun aber auf https://server1 zugegriffen, dann wird als allererstes das Zertifikat geprüft und danach greift erst der rewrite. Dadurch kommt auch der Zertifikatsfehler, der dann aber nach dem rewrite wieder verschwindet.

Lösen lässt sich dieser Zertifkatsfehler nur damit, dass man im Zertifikat einen "SubjectAlternativeName" eintragen lässt, oder ein zweites Zertifikat mit dem zweiten Namen einrichtet.

Status: gelöst.
 
Oben