HTTP->HTTPS, 1xIp,mehre Domains,KEINE Probleme b.Zerifkat

Irgendwelche Probleme mit XAMPP für Windows? Dann ist hier genau der richtige Ort um nachzufragen.

HTTP->HTTPS, 1xIp,mehre Domains,KEINE Probleme b.Zerifkat

Postby Knappe » 11. December 2004 01:02

Viele kennen das Problem ...

Nur EINE IP aber mehrere Virtuelle Server (VHost´s). Solange der Zugriff über HTTP (ungesicherte Verbindungen, i.d.R.Port 80) erfolgt, ist die Einrichtung von namensbasiderten Hosts kein Problem.

Sobald aber dann auf HTTPS (gesicherte Verbindungen) umgestellt werden soll, gibt es erhebliche Probleme mit den Zertifkaten : Namensbasierte Hosts bei SSL-Verbindungen schliessen sich eigentlich aus. Folge sind immer wieder Zertifkatsfehler bei den Anwender-Aufrufen.

Um dieses zu umgehen möchte ich hier eine elegante Lösung anbieten, bei der die Anwender keine HTTPS-Eingabe im Browserfenster machen müssen (aber können), sondern automatisch von einer HTTP- auf eine HTTPS-Verbindung umgeleitet werden (und das für mehrere eigene Domains UND wo es DIESE Zertifkatsprobleme dann NICHT gibt).

Code: Select all
Lösungansatz :
Apache kann Verbindungen über
- Namen (namensbasierte VHosts)
- IP´s  UND/ODER
- PORT´s
zuordnen.


Letzteres - die PORT´s - in Verbindung mit einem externen Redirect (siehe nachstehende Erklärung) ist/sind die Lösung :

In der Listen-Anweisung der "httpd.config" vom Apache-Server (in den neueren XAMPP-Distributionen ist die Listenanweisung für die SSL-Verbindung in der Datei "ssl.conf" enthalten) wird der Port an dem "gelauscht" werden soll definiert :
z.B.
LISTEN 443
LISTEN 444
LISTEN 445

In jeder VHOST-Definition (-Container) wird dieser dann wie folgt definiert :

#
# Erste Domain
#
<VirtualHost 192.168.1.100:443> # hier kann jegliche IP-Adresse aus dem eigenem (!) LAN zugeordnet werden
ServerName MyFirstServer # Name ist in diesem Zusammenhang für die Zuordnung Domain-Name/IP-Nr./Port irrelevant
ServerAlias my.new.domain1.by.dyndns www.my.new.domain1.by.dyndns # siehe hierzu die nachfolgenden Ereklärungen !!!!
...
SSLEngine on
SSLCertificateFile "?:/xampp/apache/conf/ssl.crt/MyFirstCerticate.crt" # Das Zertikat ist ausgestellt auf "www.my.new.domain1.by.dyn"
SSLCertificateKeyFile "?:/xampp/apache/conf/ssl.key/MyFirstCertificate.key" # siehe oben
...
</VirtualHost>

#
# Zweite Domain
#
<VirtualHost 192.168.1.100:444>
ServerName MySecondServer
ServerAlias my.new.domain2.by.dyndns www.my.new.domain2.by.dyndns
...
SSLEngine on
SSLCertificateFile "?:/xampp/apache/conf/ssl.crt/MySecondCerticate.crt" # Das wäre das 2.´te Zertifkat
SSLCertificateKeyFile "D?:/xampp/apache/conf/ssl.key/MySecondCertificate.key"
...
</VirtualHost>

#
# Dritte Domain
#
<VirtualHost 192.168.1.100:445>
ServerName MyThirdServer
ServerAlias my.new.domain3.by.dyndns www.my.new.domain3.by.dyndns
...
SSLEngine on
SSLCertificateFile "?:/xampp/apache/conf/ssl.crt/MyThirdCerticate.crt" # Das wäre das 3.´te Zertifkat
SSLCertificateKeyFile "?:/xampp/apache/conf/ssl.key/MyThirdCertificate.key"
...
</VirtualHost>

..... usw.

Apache Server neu starten, damit die neuen Einstellungen wirksam werden.

Jetzt muss noch in der NAT-Tabelle des Routers das Forwarding für die entsprechenden PORT´s eingestellt werden (siehe jeweilige Router-Beschreibung) : sinngemäss :
HTTPS-Verbindung extern : Port 443 --> intern IP 192.168.1.100,PORT 443, und/oder
extern : Port 444 --> auf intern IP 192.168.1.100, Port 444 ...)

Um die Anfragen auf den verschiedenen internen PORT´s aus dem Internet zu erhalten, muss jetzt ein EXTERNER Redirect der Domain erfolgen :

Hierzu bietet beispielsweise DYNDNS.ORG den sog. "WebHop" an (für bis zu 5 Einträge ist dieser KOSTENLOS) :


Der funktioniert wie folgt :

Code: Select all
1. Was der Anwender in seiner Browser-Zeile als Domain-Namen eingibt ---> Name des Webhops
2. Was dem Wephop selbst zugeordnet ist --> Domain-Name UND Port der via Router beim Apache ankommt


Es wird definiert :
1. ? : Es ist KEINE Domain (z.B über DYNDNS.ORG) gehostet :
a) Lege eine neue Domain (dynamisch oder statisch) an, die an den eigenen Server geleitet werden soll (die normalerweise auch nicht vom USER im Browserfenster eingegeben wird) UND auf die das Zertifkat ausgestellt wird (!) --> z.B. my.new.domain1.by.dyndns
b) Lege einen NEUEN WebHop an :
Name des neuen WebHops : my.domain1.by.dyn <-- Domain-Name, der vom User im Browserfenster eingegeben wird
Redirect Domain : https://www.my.new.domain1.by.dyndns:443 <- Die neue Domain (aus Punkt a)) - WICHTIG : HTTPS und PORT-Angabe !

--> wird jetzt im Browserfenster "http://www.my.domain1.by.dyn" eingegeben, wird automatisch auf https://www.my.new.domain1.by.dyn:443 umgeleitet. Diese Domain UND dieser PORT kommen jetzt auch beim eigenen Router an.
Via Router-NAT-Tabelle wird dann dieser PORT einer eigenen IP-Adresse zugeordnet, die dann wiederum in der LISTEN-Anweisung (dort inkl. PORT) vom Apache abgefragt werden kann.
Dieses Verfahren wird für alle Domains entsprechend angewendet, wobei die zugehörige PORT-Angabe anzupassen ist. Jedesmal ist ein neuer WebHop UND eine neue dynamische/statische Domain (sofern allerdings noch nicht vorhanden !) inkl. eines neuen Ports (z.B. 444) anzulegen


2. ? : Es sind bereits Domains bei einem oder mehreren Hostern vorhanden:
a) wie unter Punkt 1, a) UND b) werden zunächst neue Domains und Webhops angelegt
b) bei den bestehenden Domains werden jetzt automatische Forwardings eingerichtet und falls der Provider dies nicht unterstützt, muß eine HTML-Seite mit entsprechendem Coding eingerichtet werden.
Dabei ist die Zieladresse (vom Forwarding) hier der Name des WebHops anzugeben (NICHT des Redirects !)
Der Rest des Verfahrens bleibt wie bei 1.
Sofern bereits Zertifkate für die eigene Domain ausgestellt wurden, müssten diese auf den Namen der (dem WebHop) zugehordneten Domain geändert werden (siehe aber auch Beschreibung weiter unten). Diese Name ist dann auch in der ServerAlias-Klausel vom VHost des Apache Servers zu benutzen !


3. ? : Es sind bereits dynamische/statische Domains vorhanden, die den Benutzern/Anwender auch schon bekannt sind und NICHT mehr geändert werden können/solten :
Zunächst einmal prüfen, ob der/die BESTEHENDE(n) Domain-Name(n) als WebHop-Name/-Domain verwendet werden können. Hier gibt es (zumindest bei Dyndns einige Einschränkungen) :
1. Wenn möglich, dann werden DIESE Domains zu WebHop-Domains. Also müssen dann nur noch neue dynamische Domains angelegt und dem WebHop (mit diesen Namen) dann zugeordnet werden. Der Rest des Verfahrens ergibt sich aus Punkten 1 und 2.
2. Wenn aber nicht möglich, dann
a) Erstellung eines neuen Webhops (mit irgendeinerm neuem Domain-Namen)
b) Zuordnung einer dieser (nicht änderbaren) Domains
c) Erstellung noch eines Webhops UND Zuordnung der WebHop-Domain aus Punkt 3.1.a (aber dann inkl. HTTPS://www....:443 !)
d) Rest wie gehabt
Für dieses Verfahren benötigt man aber 2 Webhops für die Umleitung 1ér "realen" Domain (aber nur bis zu 5 sind kostenlos (bei Dyndns))
-> Beim Apache kommt dann der Domain-Name des Redirects aus dem 2.´ten WebHop-Namen als Domain-Name UND Port an.
HINWEIS : Diesen Fall habe ich selbst NICHT geprüft, aber gemäß der DNS-Konventionen müsste es funktionieren.

4. ? : Ich habe eine oder mehrere Domains UND für genau für diese sind auch die Zertifkate ausgestellt :
1. Habe ich die Zertifkate selbst ausgestellt (z.B. via "makecert.bat" in der XAMPP-Distribution) ?
Dann müssen ggf. die Zertifkate einfach auf die "redirect Domain" beim WebHop geändert bzw. neu erstellt werden (OHNE https, OHNE PORT-Angabe)
2. Ist das Zertifkat von "trusted" Anbietern (wie z.B. VeriSign etc.) ausgestellt worden, MUSS es geändert werden - auch wenn es vielleicht Kosten verursacht.

Was passiert, wenn die Benutzer jetzt nicht den Webhop-Namen, sondern den zugeordneten Domain-Namen direkt in die Browser-Zeile eingeben ?

Beispiel :
WebHop-Name ist : www.my.domain1.by.dyn # hierauf ist meine Domain (www.my.domain1.de) eigentlich umgeleitet
zugeordnete Domain ist : https://www.my.new.domain1.by.dyndns:443
Benutzereingabe : http://www.my.new.domain1.by.dyndns

In diesem Fall wird die Anfrage "http://www.my.new.domain1.by.dyndns" OHNE Umsetzung (redirect) an den Apache-Server weitergeleitet (Port 80).
Es muss für diesen Fall also ein VHOST für diesen Port eingerichtet werden. Darum wird dann dort eine REWRITE-Klausel verwendet, um die Anfrage dann doch noch an den "richtigen" SSL-Port weiterzuleiten (aus Sicht des Apaches : externer redirect) :

Code: Select all
<VirtualHost www.my.new.domain1.by.dyndns:80>            # Bis auf die nachstehenden Angaben brauchen hier KEINE weiteren Angaben gemacht werden !
  RewriteEngine On
  RewriteLog logs/backoffice.rewrite.log                  # NICHT NOTWENDIG, aber für Tests (!) hilfreich
  RewriteLogLevel 9                              #  s.o.
  RewriteRule ^/(.*)$  http://www.my.domain1.by.dyn/$1 [L,R=301]      # entspricht also dem WebHop-Namen ! --> Externer Redirect,
                                                                                                        # es ginge auch : https://www.my.new.domain1.by.dyndns:443
</VirtualHost>

- ODER -

Code: Select all
<VirtualHost *:80>                              # Bis auf die nachstehenden Angaben brauchen hier KEINE weiteren Angaben gemacht werden !
  ServerAlias www.my.new.domain1.by.dyndns
  RewriteEngine On
  RewriteLog logs/backoffice.rewrite.log                  # NICHT NOTWENDIG, aber für Tests (!) hilfreich
  RewriteLogLevel 9                              #  s.o.
  RewriteRule ^/(.*)$  http://www.my.domain1.by.dyn/$1 [L,R=301]      # entspricht also dem WebHop-Namen ! --> Externer Redirect
</VirtualHost>


Was passiert, wenn die Benutzer anstelle von http:/... einfach nur https://... (ohne Angabe eines Ports) ODER den falschen Port eingeben ?

Dann ist KEINE AUTOMATISCHE Zuordnung zu den verschiedenen SSL-VHosts (siehe oben) möglich und Apache benutzt dann immer den ERSTEN (ssl-VHost) als Default.

Aus diesem Grunde kann ich nur empfehlen :
1. für jede Domain einen eigenen SSL-VHost mit dem "richtigen" PORT-Angaben (und ggf. gleichen IP-Nummern) UND
2. einen ZUSÄTZLICHEN SSL-VHost für die "fehlerhaften" Domain-Adressen anzulegen.

Dann kann man in diesem (default) SSL-VHost über die REWRITE-Klauseln auch noch eine automatische Weiterleitung zu den eigentlich richtigen ssl-Domains anlegen (via Port-Angabe ! Eine Art Fehlerbehandlung, die dann allerdings immer zur "richtigen" Verbindung führt).

Für die rewrite-Klausel gibt die Dokumention vom Apache genügend Hinweise und Anleitungen. Diese kann man sich ansehen
hier : http://httpd.apache.org/docs-2.0/mod/mod_rewrite.html und
hier : http://httpd.apache.org/docs-2.0/misc/rewriteguide.html aber auch
hier : http://httpd.apache.org/docs-2.0/vhosts/mass.html oder auch
hier : im Forum

UND

spezielle Fragen zu mod-rewrite kann man stellen
hier : http://www.modrewrite.de/foren/forum1.html

Der Unterschied zum bisherigen Verfahren :
Über die Trennung der PORT´s (eben auch beim rewrite des letzten Problems) kann - BEI VERWENDUNG NUR EINER IP (dynamisch/statisch) eine eindeutige Zuordnung im Apache-Server zu den verschiedenen VHost´s erfolgen !

Zusammenfassung
Mehrere Domains, aber nur EINE IP können i.d.R. über dieses Verfahren "Zertifkatsecht" verwaltet werden. Ich selbst habe für die Konfiguration von 3 völlig unabhängigen Domains insgesamt 2 Stunden gebraucht (inkl. Zertifkatsanlage). Und wenn der Anwender diese "link"-Adresse in seinen Favoriten speichert, klappt es auch.

Ich hoffe es hilft einigen in diesem Forum...
Knappe
 
Posts: 114
Joined: 18. November 2004 17:40

Postby Kev » 11. December 2004 10:51

Wow, thx^^
Damit sind meine probs zu der frage alle soweit weg^^, thx....
Respekt aber ehrlich hast, ja ganz schön was auf dich genommen, aber sieht echt gut aus...
ich würd wohl sagen das hilft jedem hier^^, danke danke danke danke nochmal!!!
User avatar
Kev
 
Posts: 269
Joined: 09. October 2004 13:25
Location: NRW/Hamm

Postby genrich » 27. January 2005 07:32

Das sollte in jedem Fall in die FAQ rein!!!!
genrich
 
Posts: 16
Joined: 20. January 2005 09:22

Postby Knappe » 27. January 2005 11:14

Code: Select all
Das sollte in jedem Fall in die FAQ rein!!!!


Ja ist zu empfehlen, denn dann werden wohl einige Fragen überflüssig werden !
Knappe
 
Posts: 114
Joined: 18. November 2004 17:40


Return to XAMPP für Windows

Who is online

Users browsing this forum: No registered users and 4 guests