Wie kann ich SPDY mit Jetty hinter Amazon ELB einrichten?

7

Ich möchte SPDY bereitstellen, verwende jedoch das ELB-TCP-Routing von Amazon. Die ELB kümmert sich auch um die sicheren Verbindungen für uns. Wie kann dies auf der Stegseite konfiguriert werden?

arturnt
quelle

Antworten:

7

Leider lautet die Antwort: Sie können nicht. Um SPDY bereitstellen zu können, muss Ihr TLS-Terminierungsserver (in diesem Fall der ELB) heute in der Lage sein, SPDY über TLS "Next Protocol Negotiation" (NPN) auszuhandeln. NPN ist eine Erweiterung von TLS und erfordert eine aktuelle Version von OpenSSL oder anderen Bibliotheken. ELB unterstützt keine NPN-Aushandlung.

Die Lösung besteht darin, den gesamten TCP-Stream über ELB auf Ihren Anwendungsserver zu übertragen, der dann den NPN- und TLS-Handshake verarbeiten kann. Jetty kann das tun, oder Sie können ein Tool wie HAProxy verwenden, das jetzt NPN-fähig ist: http://www.igvita.com/2012/10/31/simple-spdy-and-npn-negotiation-with-haproxy/

igrigorik
quelle
Tatsächlich erfolgt die NPN-Unterstützung in Jetty über einen benutzerdefinierten SSL-Anbieter im Java-Bootklassenpfad. Wenn Sie die Verbindung zu Jetty / Java direkt beenden können, sollten Sie dies tun können.
Joakime
Ein mögliches Problem mit dem Vorschlag, alles auf den Server zu tunneln, besteht darin, dass Sie den X-Forwarded-For-Header nicht mehr erhalten, um die IP des Clients zu identifizieren. Wenn dies für Ihre Anwendung wichtig ist, funktioniert diese Lösung nicht.
greggles
Sie können diese Informationen weiterhin über die Unterstützung von ELB für das PROXY-Protokoll erhalten. Es ist einfach nicht mehr in einem Header.
Christopher Smith
4

SPDY wird jetzt auf ELB unter Verwendung von proxy_protocol unterstützt.

Das Einrichten ist etwas umständlich. Sie müssen jedoch die ProxyProtocol-Richtlinie zu Ihrer ELB hinzufügen und die Listener auf TCP 443 -> TCP 443 einstellen

Dadurch wird die Verbindung (zusammen mit dem Proxy-Protokoll-Header) über die ELB unberührt an Ihre Server weitergeleitet.

Nginx hat gerade die Proxy-Protokoll-Unterstützung in Version 1.5.12 hinzugefügt, daher höre ich einfach wie folgt zu:

Hören Sie 443 ssl proxy_protocol spdy

Setzen Sie dann real_ip auf das übergebene proxy_protocol ip und voila, SPDY hinter ELB.

Ich sollte erwähnen, dass dies bedeutet, dass Sie die SSL-Zertifikate auf Ihrem Webserver dekodieren, anstatt ELB wie bei HTTPS-Listenern zu verwenden. Aber für mich ist das in Ordnung.

Es wäre großartig, wenn Amazon bessere Steuerelemente für das Hinzufügen von Richtlinien mithilfe der Web-GUI hinzufügen könnte, da dies über die Befehlszeile schmerzhaft ist.

https://forums.aws.amazon.com/thread.jspa?threadID=90109&start=25&tstart=0

Mike Averto
quelle
Mike, gibt es laut Ihrem Kommentar zu SSL eine Möglichkeit, die SLL auf ELB mit aktiviertem TCP und aktiviertem proxy_protocol zu beenden?
John Mark Mitchell