Wie man Drupal dazu bringt, über Stratos SSL Reverse Proxy zu arbeiten

Gestern hatte ich zwei Stunden in einem Café, einen Cappuccino auf meinem Tisch, ein Stück Zitronenkuchen und kostenloses WLAN. „Cool“, dachte ich, „Ich werde einen Eintrag für meinen Blog schreiben!“. Wie romantisch. Gleich nachdem ich das Passwort meines Blog-Benutzers eingegeben hatte, dämmerte es mir: Die Verbindung zu meinem Blog war nicht verschlüsselt!

Jeder, der im lokalen WLAN schnüffeln konnte, hätte mein Passwort beim Eingeben abfangen und meine Blog-Benutzer-ID stehlen können! Hier erfahren Sie wie sie in strato auth code anfordern und richtig nutzen. Es hat einige Zeit gedauert (etwas mehr als die 2 Stunden, die ich hatte….), um dies herauszufinden, also hier ist ein Howto, wie man seine Login/Admin-Tasks sicher für eine Drupal-Instanz macht, die auf Strato als Hoster läuft.

Die Grundidee

Die Grundidee hinter der Sicherung Ihrer Drupal-Administrator-Logins und -Aktionen ist es, sicherzustellen, dass der gesamte Anmelde- und Admin-Verkehr über SSL läuft. Auf diese Weise sind Passwörter, Authentisierungs-Cookies usw. immer verschlüsselt und schwer zu erfassen.

Dies klingt theoretisch einfach, wird aber in der Praxis etwas komplexer, wenn Sie Ihre Drupal-Instanz in einer Shared Hosting-Umgebung wie Strato hosten. Hier ist die Art und Weise, wie SSL funktioniert, indem Sie einen gemeinsamen SSL Reverse Proxy zwischen Ihrem Webbrowser und Ihrem normalen (und unverschlüsselten) Drupal-Webserver einrichten.

Da sowohl der SSL Reverse Proxy als auch Ihr Drupal Server im gleichen, vertrauenswürdigen Netzwerk bei Ihrem Hosting-Provider Ihrer Wahl sitzen, ist dies sicher genug für eine kostengünstige Lösung.

Das Problemganz leicht in Strato beheben

Der Nebeneffekt beim Einfügen eines Reverse-Proxy zwischen Drupal und Ihren Benutzern ist, dass sich alle URLs ändern: Im Falle von Strato als Hoster wird http://constantin.glez.de zu https://www.ssl-id.de/constantin.glez.de, wobei www.ssl-id.de der SSL-Reverse-Proxy von Strato und constantin.glez.de der ursprüngliche Hostname ist, der nun in eine Pfadkomponente einer mit Reverse-Proxy manipulierten URL umgewandelt wird. Hässlich, aber praktikabel. Leider wird dies von Drupal nicht unbemerkt bleiben, und es treten einige Probleme auf:

Im Falle mehrerer Drupal-Instanzen, die darauf angewiesen sind, den Hostnamen zu kennen, um zwischen ihnen zu wählen, werden sie verwirrt sein, weil sie den Hostnamen des SSL-Reverse-Proxys in der HTTP_HOST-Variablen des Servers erhalten, nicht den ursprünglichen Hostnamen, mit dem die ursprüngliche Website angesprochen wurde. In meinem Fall hat Drupal www.ssl-id.de als Hostname bekommen, nicht constantin.glez.de aus dem Webserver, und so wusste es nicht, dass die Drupal-Instanz von constantin.glez.de vorgesehen war. Daher griff Drupal auf die Standardinstanz zurück, die ich nicht wollte.

Drupal generiert eine Handvoll relativer URLs für Bilder, CSS, Javascript etc. Um korrekt zu funktionieren, müssen diesen URLs der Hostname und das Protokoll des SSL-Proxys vorangestellt werden, während der ursprüngliche Hostname in den Pfadnamen eingearbeitet werden muss. Aber da Drupal nicht weiß, wie man hinter einem Reverse-Proxy sitzt, sind die generierten URLs falsch. Und ohne CSS, Bilder usw. sieht Ihre Website eher hässlich aus.

Drupal ist bereit, die Arbeit hinter einem Reverse-Proxy zu unterstützen, wenn es davon weiß, aber was ist mit gemischten Umgebungen? In unserem Fall möchten wir, dass alle Anmelde- und Admin-Aktionen SSL-verschlüsselt sind (aus Sicherheitsgründen) und in allen anderen Fällen (z.B. für regelmäßige Blog-Besucher) unverschlüsselt erreicht werden (aus Geschwindigkeitsgründen). Jetzt wird es kompliziert: Wie soll Drupal wissen, wann im Reverse-Proxy-Modus zu arbeiten ist und wann nicht?

Es gibt einige weitere Feinheiten im Zusammenhang mit der hinter einem Reverse-Proxy, dass Drupal muss sich um: Was ist der richtige Cookie-Host? Wie ist die IP des Reverse-Proxys, und können wir ihm vertrauen?

Die Lösung

Glücklicherweise waren 80% der Lösung bereits da, geschrieben in einem nützlichen Artikel namens „Drupal via HTTPS/SSL Proxy Server (shared certificates)“. Schauen Sie sich diese Lösung an, denn wir werden sie unten besprechen und wiederkommen, ich werde auf Sie warten.

Dies ist eine schöne, elegante Lösung, die vollständig in settings.php läuft, so dass sie kein Modul- oder Theme-Hacking benötigt. Aber nachdem ich es ausprobiert hatte, stieß ich immer noch auf ein paar Probleme:

Drupal hat immer noch nicht die richtige Instanz ausgewählt. In meinem Fall lebt die modifizierte settings.php in dem Verzeichnis, das der Instanz „constantin.glez.de“ von Drupal zugeordnet ist, aber die Anfrage kommt über „www.ssl-id.de“. Da der Hostname unterschiedlich ist, wird er nie wissen, dass er in das Verzeichnis „constantin.glez.de“ gehen sollte, um seine Konfiguration zu finden. Glücklicherweise erlaubt es uns die Art und Weise, wie Drupal nach seinen settings.php-Dateien sucht, nicht nur den Hostnamen, sondern auch Teile der Pfadkomponenten anzugeben.

Die nächste Ausgabe ist wahrscheinlich für jeden Hosting-Provider anders: „Skybow“, der Autor des ursprünglichen Tutorials, nutzte Hosteurope als Hosting-Provider. Anscheinend setzt ihr SSL Reverse-Proxy HTTP_X_FORWARDED_HOST beim Weiterleiten von Anfragen. Nicht im Falle von Strato. Aber wie können wir herausfinden, wie wir erkennen können, dass wir hinter dem SSL-Proxy stecken? Um zu sehen, was genau passiert, wenn Sie Ihre Drupal-Instanz aufrufen, ist es hilfreich, sich selbst eine Datei namens phpinfo.php zu erstellen, sagen Sie phpinfo.php und legen Sie sie in Ihren Hosting-Bereich, dann fügen Sie die folgende Zeile hinzu:

<?php phpinfo(); \>>

Der Aufruf dieses einfachen Skripts lässt PHP die gesamte Umgebung ausgeben, so dass Sie Ihren Code debuggen und nach Hinweisen in der Serverumgebung des Hosters suchen können. Tatsächlich hat phpinfo() bestätigt, dass HTTP_X_FORWARDED_HOST nicht einmal in der Strato-Umgebung vorhanden ist. Stattdessen habe ich herausgefunden, dass Strato SERVER_PORT entsprechend dem HTTP-Sicherheitsmodus setzt („80“ für reguläres HTTP, „443“ für HTTPS). Cool, jetzt hatte ich einen neuen Lackmustest für Skybow’s Code und sicher genug, um die erste Zeile zu ändern:

$request_type = ($_SERVER[‚SERVER_PORT‘] ==’443′) ? SSL‘ : ‚NONSSL‘;

 

Einrichten der Zwei-Faktor-Authentifizierung bei eBay

Wir haben eine Reihe von Beiträgen über die Einrichtung von Zwei-Faktor-Authentifizierung (2FA) auf einer Vielzahl von Websites verfasst, die Sie jeden Tag verwenden können.

Unser erster Beitrag der Serie erhielt einen Kommentar, der einen Durchgang zur Einrichtung von 2FA für ein eBay-Konto forderte.

Laut der Two Factor Auth List unterstützt eBay tatsächlich 2FA (zumindest in der US-Version). Also, angespornt von diesem exzellenten Kommentar eines treuen Naked Security-Lesers, ging ich los, um die Schritte zu erforschen. Bevor wir beginnen sollten sie sich in mein ebay einloggen kleinanzeigen können Sie dann ganz fix erstellen.

Im Allgemeinen ist der Prozess zur Einrichtung von 2FA heute sehr einfach. Schließlich wollen Unternehmen, die 2FA anbieten, es so einfach wie möglich machen, Leute wie dich und mich dazu zu bringen, sie zu benutzen.

Im Falle von eBay habe ich über eine Stunde damit verbracht, herauszufinden, wie man 2FA auf meinem Konto aktivieren kann. Es war verwirrend unzusammenhängend und schwierig.

Ich ging in den sprichwörtlichen Kaninchenbau, nur um eine klare, einfache Antwort zu finden. Nach der Suche fand ich nur noch:

Eine statische Telefon-PIN für mein eBay-Kontoso sicheren Sie ihr ebay-Konto richtig ab

Eine Option, um 2FA über einen Schlüsselanhänger zu aktivieren, den ich kaufen müsste.
2FA für mein verlinktes PayPal-Konto
Ich habe meine Schritte in dem Beitrag unten zu deiner Erbauung zurückverfolgt.

Nackte Security-Leser: Wenn Sie mehr eBay-fluent sind als ich und feststellen, dass ich einen offensichtlichen, einfacheren Weg verpasst habe, 2FA für eBay einzurichten, lassen Sie es mich bitte wissen und ich werde sehr gerne diesen Beitrag korrigieren.

Die unnötige Saga von 2FA bei eBay
Ich habe den Staub von meinem eBay-Konto entfernt, mich eingeloggt, auf „Mein eBay“ und dann auf die Registerkarte „Konto“ geklickt.

Dort gibt es keinen Sicherheitsbereich, aber vielleicht hilft Ihnen „Site Preferences“.

Kein Glück. Aber ich bemerkte ein Feld unter „Persönliche Daten“ namens „Telefon-PIN“, das vielversprechend erschien. Die Sprache schien 2FA-ähnlich zu sein.

Zuerst musste ich meinem Konto ein Handy hinzufügen, was einfach war. Aber dann wurde ich gebeten, eine 6-stellige Telefon-PIN einzugeben, was nicht das ist, wonach wir suchen.

Ich bemerkte, dass ich auch beim Einloggen nicht nach meiner PIN gefragt wurde, so dass es sich hier wohl um einen Bestätigungsschritt beim Kauf handelt.

Es ist zwar besser als nichts, aber da die PIN nichts ändert, ist dies im Grunde genommen 1FA. Wie Ihr Passwort ist auch die PIN etwas, das Sie kennen.

Smartphone als Authentifizierungsfaktor

Die PIN bietet keinen zweiten Authentifizierungsfaktor, wie z.B. etwas, das Sie besitzen – wie ein Handy oder eine Authenticator-App, die einen eindeutigen Code empfängt oder erzeugt.

Um Ihnen die langweiligen Details zu ersparen, habe ich jeden Unterabschnitt des Bereichs „Mein Konto“ angeklickt, das „Sicherheitscenter“ in der Fußzeile von eBay überprüft und sogar das getan, was ich am meisten hasse – den Abschnitt „Hilfe“ konsultiert – aber ich habe nichts gefunden, was auch nur im Entferntesten auf die Sicherheitseinstellungen hinweist.

Ich griff zu ein wenig Googeln und schaffte es, diese Seite bei eBay selbst über den PayPal-Sicherheitsschlüssel zu finden.

Die Seite versichert dem Leser, dass der Sicherheitsschlüssel sowohl für eBay als auch für PayPal funktioniert, aber auf jeder Website separat initialisiert werden muss. Obwohl, es steht nicht, wie.

Die Übersichtsseite versicherte mir, dass ich eine App verwenden könnte, um mein eBay-Konto zu sichern, und schickte mich an eine Aktionsseite, die mir auch versicherte, dass es speziell für eBay war. Großartig!

Mit der heruntergeladenen Authenticator-App hatte ich die Hoffnung, dass dies die Lösung war, nach der ich gesucht habe. Aber ich konnte immer noch keinen Weg finden, meinen Authentifikator mit meinem eBay-Konto zu verbinden.

Verbinden mit Ihrem Paypal-Konto

Also ging ich zurück zu der Seite, die ich zuvor entdeckt hatte, klickte auf die Option „Sicherheitsschlüssel bestellen“ auf der linken Seite und wurde aufgefordert, mich bei meinem PayPal-Konto anzumelden.

Nach dem Einloggen sagt PayPal, dass es mir einen Code an mein Handy schickt. So weit, so gut.

PayPal hat mir einen Code auf mein Handy geschickt, den ich dann überprüft habe:

 

Und dann wurde ich auf mein PayPal-Konto weitergeleitet. Hat es funktioniert? Und was ist mit meinem eBay-Konto passiert? Keine Benachrichtigung, dass ich eine Bestätigung finden konnte, die es auf jeden Fall bestätigt.

Zurück zum Zeichenbrett und zur vorherigen Seite.

Ich habe nun stattdessen „Sicherheitsschlüssel aktivieren“ versucht und wurde aufgefordert, mich wieder bei meinem eBay-Konto anzumelden.

Dabei wurde ich von diesem Bildschirm mit der Meldung begrüßt: „Um Ihren Sicherheitsschlüssel für die Verwendung auf Ihrem eBay-Konto zu aktivieren, führen Sie die folgenden Schritte aus. Wenn Sie den Sicherheitsschlüssel für Ihr PayPal-Konto aktivieren möchten, müssen Sie auf die Paypal-Aktivierungsseite gehen.“

 

Das ist ein physischer Schlüsselanhänger, den ich nicht habe, obwohl er auf der Symantec-Seite zum Kauf angeboten wurde .

Unbeirrt versuchte ich immer noch, die Seriennummer und den Code meiner Authenticator-App einzugeben, aber es funktionierte nicht.

Da ich immer noch keinen Weg finden konnte, die mobile Authentifikator-App mit meinem Konto zu verknüpfen, schätze ich, dass dies bedeutet, dass die einzige 2FA, die von eBay unterstützt wird, über den physischen Schlüsselanhänger erfolgt, den Sie kaufen müssen.