PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : http auf https umleiten ??



filou
02.01.04, 21:55
Hallo,

ich habe einen Apache samt mod-ssl am laufen. Nun möchte ich, wenn jemand über http:// diesen Server ansteuert automatisch auf https:// umgelenkt wird.

Am besten noch mit einer Unterscheidung, ob der Besucher von extern übers I-Net kommt, oder vom Intranet aus kommt.

Über iptables und DNAT scheint das nicht zu funbktionieren. Wer kann mir helfen ?

thx

bye

MaDmAsTeR
02.01.04, 22:22
Hi!

glaube nicht das das so einfach geht..
Denn das sind 2 unterschiedliche Protokolle.. Ausserdem muss der Client ja das Zertifikat vom Server kennen.. Das wird nicht einfach..

Einfaches Beispiel:
Versuch doch mal mit nem POP3 MailClient auf nen IMAP-Server zuzugreifen, hast auch keine Chance... Sind unterschiedliche "Sprachen"...

Belehrt mich eines besseren, wenns geht ;)

Cosmo
02.01.04, 22:39
Einfaches umleiten kannst du wohl auch direkt mit dem Server machen

Für das externe Netz

<VirtualHost xxx.xxx.xxx.xxx:80>
ServerName domain.tld
ServerAlias www.domain.tld
Redirect / https://www.domain.tld/
</VirtualHost>

<VirtualHost xxx.xxx.xxx.xxx:443>
...
</VirtualHost>


und dann noch eine für das interne Netz
die nicht umleitet

<VirtualHost xxx.xxx.xxx.xxx>
...
</VirtualHost>

wobei natürlich die richtigen ip adressen drinstehen müssen


Und mit iptables sollte das auch gehen:

iptables -t nat -A PREROUTING -p tcp -i eth0 -s xxx.xxx.xxx.xxx --dport 80 -j DNAT --to xxx.xxx.xxx.xxx:443

Das Zertifikat musst du aber selber besorgen das wir dem Clienten dann mitgeteilt.

Jasper
02.01.04, 23:03
falls man die unterteilung intern/extern nicht mit iptables machen will, kann man auch mod_rewrite mit den optionen RewriteCond/RewriteRule und den varaiblen REMOTE_ADDR und/oder REMOTE_HOST einsetzen.


-j

filou
03.01.04, 00:50
Original geschrieben von Cosmo
Einfaches umleiten kannst du wohl auch direkt mit dem Server machen
[..]

<VirtualHost xxx.xxx.xxx.xxx>
...
</VirtualHost>

wobei natürlich die richtigen ip adressen drinstehen müssen


Und mit iptables sollte das auch gehen:

iptables -t nat -A PREROUTING -p tcp -i eth0 -s xxx.xxx.xxx.xxx --dport 80 -j DNAT --to xxx.xxx.xxx.xxx:443

Das Zertifikat musst du aber selber besorgen das wir dem Clienten dann mitgeteilt.

Hm, mit den virtual host hört sich interessant an.
Mit iptables hatte ich das schon einmal versucht. Hat leider nicht so einfach funktioniert, wie ich mir das erhofft hatte.

mfg

filou
03.01.04, 00:56
Die Geschichte mit iptables bringt folgendes Ergebnis auf der Clientseite im Browser zum vorschein:

Your browser sent a request that this server could not understand.

Reason: You're speaking plain HTTP to an SSL-enabled server port.
Instead use the HTTPS scheme to access this URL, please.

Werde das später mal mit virtualhost probieren, thx@all

mfg

echo
03.01.04, 01:18
hi,
du kannst auch eine html-seite erstellen, die ein forward realisiert (dies sollte die einfachste möglichkeit sein). wie man das macht steht in jedem html-howto wie selfhtml.

ndt

Jasper
03.01.04, 01:45
Original geschrieben von filou
Hm, mit den virtual host hört sich interessant an.
Mit iptables hatte ich das schon einmal versucht. Hat leider nicht so einfach funktioniert, wie ich mir das erhofft hatte.


hmm, wenn ich so überlege, mit iptables kann das so nicht funktionieren.

client stellt http-request auf port 80. wenn iptables das ganze zu port 443 weiterleitet kann der dahinter sitzende https-server mit dem request nichts anfangen.

den redirect macht auf jeden fall der webserver, bleibt nur noch die unterscheidung in intern/extern.

entweder über RewriteCond oder du setzt 3 vhosts auf: 1x http intern, 1x http extern, 1x https. alle 3 auf separaten ip-adressen. die http-vhosts redirecten alles auf den https-vhost. mit iptables können die clients jetzt auf die http-vhosts verteilt werden die wiederum auf den https-vhost redirecten. das sollte funktionieren. wozu eigentlich die unterscheidung in interne und externe clients?


-j

Cosmo
03.01.04, 10:31
War ja meine erste Idee 3 Virtual Hostadressen zu benutzen

@echo das mit der Seite ist etwas unsicher, da braucht man wenigstens PHP um die IP auszuwerten (interne externe Adressen) und das kann man leicht manipulieren:rolleyes:

Jasper
03.01.04, 14:15
Original geschrieben von Cosmo
War ja meine erste Idee 3 Virtual Hostadressen zu benutzen


ich weiss, will dir die idee gar nicht streitig machen; nur deine iptables-idee (80->443) funktioniert so nicht.

ich würde es trotzdem per RewriteCond lösen. finde ich einfacher.


-j

stefan-tiger
03.01.04, 14:25
mit https kann ich dir nicht helfen, aber die unterscheidung woher der user kommt habe ich mit PHP gelöst, einfach die Absender-IP Prüfen.

Virtual Hosts habe ich zusätzlich eingerichtet, aber weniger zu diesem zweck, sondern einfach um mehrere unterprojekte auf dem server zu haben (manchmal haben deswegen mehrere virtual hosts das selbe documentroot, da ich mit dyndns.org arbeite)

gruß