HTTP(s) Caching mit Varnish + TLS/SSL Zertifikat + TYPO3 = ?!?

28. Januar 2015 von Kevin Häfeli Veröffentlicht unter Hosting/Zusatzdienste, TYPO3 Website, Intranet & Extensions Verschlagwortet mit , , , , , ,

Oder: wie man seine (TYPO3) Webseite beschleunigt und trotzdem von einem Sicherheitszertifikat profitiert.

 

Die Thematik

Sicherheitszertifikate für Webseiten verschlüsseln den Datenverkehr zwischen dem Server und dem Besucher, erhöhen die Vertrauenswürdigkeit sowie das Google Ranking. Doch was ist, wenn man neben verschlüsseltem Datenverkehr auch von einer beschleunigten Webseite profitieren will?

Um die Website Performance zu erhöhen eignet sich ein Varnish HTTP Cache.
Doch Varnish unterstützt keine sicheren TLS/SSL Verbindungen. Um auch HTTPS Inhalte cachen will man darauf jedoch nicht verzichten. Früher setzte man unter anderem deshalb oft auf einen Dualbetrieb von HTTP und HTTPS.

Verschiedene Mythen zu HTTPS im Web dürften dazu beigetragen haben. Diese gehören jedoch der Vergangenheit an und sind allesamt wiederlegt. Deshalb empfiehlt es sich, durchgängig HTTPS zu verwenden, allen Traffic zu verschlüsseln und die Webseite blitzschnell auszuliefern. Doch wie?

 

Die Lösung

Um normale Webseiten „auszuliefern“, gibt es bekanntlich viele Möglichkeiten in Form von verschiedenen Webservern. Für TYPO3 wird dazu oft ein Apache Webserver verwendet. Weitere verbreitete Server wären Nginx, lighttpd, IIS usw.

Vor diese x-beliebigen Webserver wird zur Beschleunigung der Varnish Cache „platziert“, welcher die Inhalte vom eigentlichen Webserver (bzw. dem Backend) lädt und zwischenspeichert (cached). Somit können diese blitzschnell aus dem Memory ausgeliefert und Millionen von Seitenaufrufen problemlos bewältigt werden.

Nun benötigt man vor dem Varnish Cache einen Proxy Server, welcher die TLS Verbindung zwischen dem Server und Besucher abwickelt.

Hinweis: Im Netz trifft man diesbezüglich auf viele Varianten, welche einen Nginx vor den Varnish setzen und als Varnish Backend z.B. einen Apache einsetzen. Wir empfehlen diesen „Technologiebruch“ wenn möglich zu vermeiden und sich (u.a. aus Performance und Ressourcengründen) auf einen Webserver festzulegen.

Nachfolgend wird die Integration eines HTTPS Caches für www.snowflake.ch beschrieben. Das Hosting auf welchem snowflake.ch betrieben wird, basiert auf Apache 2.2. Daraus ergibt sich entsprechend folgendes Setup:

TYPO3 + Varnish HTTP Caching mit TLS Verbindungen + Apache 2.2 unter Debian.

 

Die technische Integration:

Als Erstes richtet man (falls nicht schon vorhanden) wie gewohnt den Apache vHost auf Port 80 ein.

In unserem Beispiel auf 91.234.160.135:80.
Davor wird der Varnish geschaltet, unter der IP 91.234.160.50 // Port 80.
Dieser verwendet den Apache vHost (91.234.160.135:80) als Backend.

Hinweis: Eine ausführliche Beschreibung zur Varnish Integration mit TYPO3, findet man bei Github auf der Seite unserer Varnish TYPO3 Extension. Bei Fragen und Problemen hilft unser Hosting Consulting weiter.

Soweit so gut. Nun kommt die „Knacknuss“ in Form der verschlüsselten Auslieferung der Webseite an den Besucher:

Um die sichere Verbindung mit dem Besucher herzustellen und die Webseite verschlüsselt auszuliefern verwenden wir Apache und vermeiden damit einen Technologiebruch. Der Apache lädt im Hintergrund (via mod_proxy_http) die Inhalte blitzschnell „intern“ vom Varnish Cache. Dazu reicht bereits eine gängige vHost Konfiguration mit mod_proxy, ein kleiner Hack für TYPO3 und der TLS-Teil:

Nun wird folgende Anpassung in der TYPO3 Config nötig:

Aufmerksame Leser & Redirects

Der aufmerksame Leser und TYPO3-Kenner fragt sich nun vermutlich:

  1. Warum wird das Environment nicht erst im Apache vHost auf Port 80 auf https=on gesetzt und für was wird es überhaupt benötigt?
  2. Warum setzt man $_SERVER[‚HTTPS‘] = ‚on‘; und verwendet nicht einfach die TYPO3 Option: [BE][lockSSL]=2 um das verschlüsselte Backend zu forcieren? (TYPO3 LockSSL)

1. Dies hat folgenden Grund: i.d.R. integriert man eine solches Setup in eine bestehende Umgebung. Folglich möchte man den bestehenden Traffic und die bestehenden Links von http auf https weiterleiten, um:

a) keine Besucher zu verlieren
b) die interne Verlinkung zu gewährleisten ohne 1000 Links anzupassen
c) die Google Indexierung problemlos zu gewähren
etc.

Vorzugsweise entstehen solche Weiterleitungen nicht erst in der .htaccess (htaccess redirects / rewrites sollten generell vermieden werden), sondern werden bereits auf der Webserver Ebene direkt abgewickelt.

Bei unserem Setup haben wir uns dafür entschieden Varnish auf Port 80 öffentlich zu betreiben, um die Redirects abzuwickeln. (Gründe: Performance, weniger Angriffsfläche für DDoS, etc.)

Dazu wird folgende VCL-Ergänzung nötig:

Somit wird in der vcl_recv geprüft, ob der http.X-Forwarded-Proto Header auf https gesetzt ist. Falls ja, wird der Traffic nicht weitergeleitet.

Wird dieser Header nicht gesetzt und somit geprüft landet man in einem Redirect Loop, da die Anfragen beim Varnish und Apache Port 80 vHost immer unter „http“ ankommen und somit z.B. „RewriteCond %{HTTPS} off" immer "true" ist.

2. Da wir nicht nur das TYPO3 Backend auf HTTPS forcieren möchten wird zu diesem Workaround gegriffen. Leider reicht das setzen der „baseURL“ auf eine https:// URL nicht sondern verursacht teilweise Probleme.

 

Nice 2 know

  • Der SSL/TLS Teil basiert auf der Verwendung von SNI (Server Name Indication). Somit können mehrere Domains unter der selben IP betrieben werden.
  • Befinden sich die TLS „Backends“ (Varnish und  Apache vHost auf Port 80) in unterschiedlichen Netzwerken und Servern, ist dieses Setup nicht zu empfehlen. Ursache: Es findet keine End-to-End Verschlüsslung statt und der Traffic ist somit nicht durchgängig verschlüsselt.

Das Resultat

Das Endergebnis ist eine TLS verschlüsselte Webseite die (abhängig vom Routing) in ~20ms (TTFB) lädt und eine schöne visuelle Kennzeichnung der URL / Firmennamen in der Browser Adressliste dank einem Extended Validation Zertifikat von Geotrust / Symantec:

snowflake_productions_ssl

Sie wollen auch eine blitzschnelle Webeite mit TLS Verschlüsslung? Wir beraten sie gerne.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.