shopping24 tech blog

s is for shopping

March 29, 2017 / by Torsten Bøgh Köster / CTO / @tboeghk

TLS mit Let's Encrypt: Angst, Faulheit und ein schlechter Ruf

Im November 2016 hatte ich die Möglichkeit, unsere Erfahrungen mit dem Tuning von SSL/TLS-Verbindungen und den Einsatz von Let’s Encrypt-Zertifikaten zu berichten.

In einer Live-Hacking-Session habe ich die Schritte aufgezeigt, die nötig sind, eine AWS-EC2-Instanz bestückt mit HAProxy & Nginx von HTTP auf TLS zu heben und im Anschluss HTTP/2 zu aktivieren. Vor dem Talk hat JAXenter folgendes Interview mit mir zu dem Thema geführt.

JAXenter: Was muss ein Entwickler hauptsächlich beachten, wenn er seine Webseite auf TLS heben will?

Torsten Köster: Hier muss man zwischen der eigentlichen TLS-Konfiguration (bzw. SSL) und dem Transitionsprozess der Webseite unterscheiden. Bei der TLS-Konfiguration muss man den Spagat zwischen einer sicheren Konfiguration und der Unterstützung auch älterer Clients meistern – z. B. Windows XP. Für den Start können HTTP und HTTPS-Version einer Webseite parallel betrieben werden. Durch Abtesten der HTTPS-Variante kann auf Mixed-Content-Warnungen getestet werden, also Resourcen, die noch von unsicheren Verbindungen eingebunden werden. Tracking-Systeme wie Google Analytics oder New Relic sind da Kandidaten.

Irgendwann sollte man sich entscheiden, den HTTP-Traffic auf die HTTPS-Variante zu leiten. Hier sollte man die Redirects im Webserver so sauber aufsetzen, dass nur ein einziger Redirect an den Client ausgelöst wird. Ansonsten wird die Latenz z. B. im Mobile-Bereich zu extremen Conversion-Rate-Einbußen führen.

Spätestens jetzt sollte man sich den CPU-Verbrauch für die TLS-Termination anschauen. Die TLS-Termination ist ein CPU-Fresser. Wobei auch das sich sehr gebessert hat. Auch TLS von Hochlastwebseiten lässt sich ohne Probleme auf virtuellen Maschinen terminieren, hier arbeiten z. B. HAProxy und OpenSSL extrem effizient.

“Bei der TLS-Konfiguration muss man den Spagat zwischen einer sicheren Konfiguration und der Unterstützung älterer Clients meistern.”

JAXenter: TLS hat den Ruf langsam zu sein. Was müssen Entwickler machen, damit dem nicht so ist?

Torsten Köster: Definitiv in meinen Talk kommen. Out-of-the-Box sind TLS-Konfigurationen meist langsam und nicht besonders sicher. Der größte Zeitfresser sind unnötige Roundtrips zwischen Server und Client oder sogar zwischen Client und Zertifizierungsstelle, um Zertifikate zu validieren. Um alle TLS-Roundtrips zu eliminieren, können z. B. Extra-Validierungszertifikate genutzt (OCSP-Stapling) und Protokoll-Vorwahl und ein TLS-Frühstart ermöglicht werden. Alles erprobte und verbreitete Techniken.

JAXenter: Gerade bei mobilen Datenverkehr ist jedes Byte kostbar. Auf welche Besonderheiten sollten Entwickler Rücksicht nehmen?

Torsten Köster: Hier ist jedwede Form der Verschlüsselung leider kontraproduktiv, denn die bläht den Datenverkehr immer auf. Aber auch hier kann man TLS auf Diät setzen und Roundtrips minimieren und TLS auf den Einsatz in wackeligen Netzen optimieren. Wenn öfter mal Pakete verloren gehen – wie in Mobilfunknetzen–, macht es z. B. Sinn die Größe der am Stück verschlüsselten Frames zu reduzieren.

JAXenter: Warum sind TLS und HTTP/2 eine so gute Kombination?

Torsten Köster: TLS ist in den aktuellen Browserimplementierungen zwingende Voraussetzung für den Einsatz von HTTP2. Als notwendiges Übel sollte man sich mit dem Thema TLS beschäftigen…

“Mixtur aus Angst, Faulheit und dem schlechten Ruf von TLS”

JAXenter: Mit der Let’s-Encrypt-Initiative fallen eigentlich alle Argumente weg, warum unverschlüsselt Daten versendet werden. Aber noch immer ist nur ein Bruchteil des Netzes verschlüsselt. Warum ist das Ihrer Meinung nach so?

Torsten Köster: Das wird eine Mixtur aus Angst, Faulheit und dem Schlechten Ruf von TLS sein. Ich arbeite beim shopping24 commerce network und als Produktsuche ist uns eine hohe Conversion Rate unserer Benutzer extrem wichtig. Entsprechend heftig haben wir bei der Umstellung der ersten Mandanten auf TLS gezittert. Und das nicht zu Unrecht, denn auch unsere TLS-Konfiguration war zum Start alles andere als ideal. Inzwischen erzielen wir auf den TLS-Mandanten eine bessere Conversion Rate als auf den wenigen unverschlüsselten Mandanten. Die Conversion Rate wird sich durch den weiteren Ausbau von HTTP2 und die fortschreitende Unterstützung in den Webservern aber eher noch verbessern.

Das Interview zu TLS mit mir erschien im November 2016 zuerst auf JAXenter. Auf der JAX 2017 im Mai in Mainz spreche ich über Open-Source-Logging und Monitoring und Moderne Datenstrukturen im Einsatz.

Slides & Code

Den Source-Code zum Live-Coding findet Ihr auf Github und die Slides auf Speakerdeck.