Zum Inhalt springen

BE-Login SSL verschlüsseln

Erstellt am 11. Oktober 2005 · 1 Antwort · letzte Antwort am 12. Oktober 2005

Tags: Frage

droptix ·

Ich möchte den Login ins Backend mit SSL verschlüsseln. Hier hab ich schonmal die theoretisch passende Einstellung gefunden:

http://jweiland.net/typo3cms/howto/ssl/

Wenn ich aber den Wert "lockSSL" auf "1" oder "2" (wie empfohlen) stelle, kann mein Browser das Login-Formular gar nicht mehr erreichen. Die Seite bleibt weiß und ich erhalte folgende Meldung.

Beim Versuch, [IP] zu kontaktieren, wurde die Verbindung zurückgesetzt.

Woran liegt's?

Ich habe schonmal heraus gefunden, dass TYPO3 über die Methode "t3lib_div::getIndpEnv('TYPO3_SSL')" (Datei class.t3lib_div.php) heraus finden will, ob SSL-Verschlüsselung gemacht werden kann. Ich nehme an, dass es bei "lockSSL = 2" einfach aus dem "http" der URL ein "https" machen will. In der Version 3.7 gab es noch einen kleinen Bug. In 3.8.0 ist sehr viel in dieser Methode auskommentiert, anscheinend wird das nun ganz anders gehandhabt. Ich finde allerdings nichts außer einer Rewrite-Rule, die von der oben genannten Prüf-Methode abhängt. Sie fragt nach den Variablen $_SERVER['SSL_SESSION_ID'] und $_SERVER['HTTPS']. Mein Apache bietet beide nicht an. Demnach liefert die Methode 'false'. Werden die vielleicht nachträglich von TYPO3 gesetzt?

In der Datei class.t3lib_div.php ab Zeile 2723 steht:

case 'TYPO3_REQUEST_HOST':
				return (t3lib_div::getIndpEnv('TYPO3_SSL') ? 'https://' : 'http://').
					$_SERVER['HTTP_HOST'];

Hat jemand einen Lösungsvorschlag?

Achso: SSL geht ansonsten. Kann alles mit https:// aufrufen und es wird dann verschlüsselt übertragen. Aber TYPO3 macht Probleme.

droptix ·

Lösungsansatz:

Der Web-Apache sieht die beiden Variablen nicht, weil sich ein zweiter Apache die SSL-Verschlüsselung kümmert. Beide Apache kommunizieren untereinander.

Fragt mich nicht wieso das so ist... es ist ein Hochschulserver. Sicher aus Performancegründen...

Jedenfalls habe ich mittlerweile in der Datei class.t3lib_div.php zwei Änderungen gemacht:

Zeile 2725:

$_SERVER['HTTP_HOST'];

auskommentiert und durch das hier ersetzt:

//$_SERVER['HTTP_HOST'];
$_SERVER["SERVER_NAME"];

... weil ich nicht die IP-Adresse zum Verarbeiten nehmen kann, sondern den Host mit seinem Namen brauche.

Ursprüngliche Zeile 2749 (darüber steht case 'TYPO3_SSL':) durch das ersetzen:

### hack -- { ###
$doWeUseSsl =  $_SERVER["HTTP_HOST"] == "123.45.678.90" ? true : false;
// don't forget the extended if-rule with "$doWeUseSsl || "
### hack -- } ###

return $doWeUseSsl || $_SERVER['SSL_SESSION_ID'] || !strcmp($_SERVER['HTTPS'],'on') ? TRUE : FALSE;

... wobei ich die Unterscheidung, ob gerade mit SSL gearbeitet wird, durch die IP-Adressen 123.45.678.90 (SSL-verschlüsselt) mache und die darunter liegende if()-Abfrage dadurch erweitere.