2017-11-08 2 views
1

Ich habe Probleme, die Verwendung von HTTP/2 zu blockieren, um Browser zur Verwendung von HTTP/1 als Protokoll innerhalb von https zu zwingen. TLS MITM kommt nicht in Frage, eine NFQUEUE-artige Usermode-Paketfilterung kann höchstens in Abhängigkeit vom Verarbeitungsaufwand in Betracht gezogen werden.HTTP/2 auf Firewall-Ebene blockieren

Aus dem Lesen der ALPN RFC ist nicht klar, wenn eine Alert-Antwort oder das Trennen der Verbindung, wenn ich einen ClientHallo, der ALPN enthält: http/2 wird der Browser versuchen, erneut ohne ALPN.

Wenn ich richtig verstehe, kommt die Änderung des ClientHallo nicht in Frage, da dies zu einem Prüfsummenfehler führt, wenn der Server mit dem ServerHello antwortet, weil das Ändern des ClientHallo die MAC für dieses Paket ungültig macht.

Ist das Verhalten für geblockte Handshakes w.r.t. ALPN das selbe wie für das Behandeln des TLS-Versionsrückfalls, d. H. TLS_FALLBACK_SCSV?

EDIT: nach t1_lib.c von openssl, wenn der Server nicht über ALPN weiß, ignoriert es es. Wenn der Server Alert für einen ClientHello mit ALPN zurückgibt, liegt dies vermutlich nur daran, dass TLS1.2 nicht unterstützt wird. Es gibt keine Möglichkeit, dem Client "Bitte wiederholen ohne ALPN" zu signalisieren, außer "alert", was zum Client führt versuche TLS1.1.

+0

Welche Art von Firewall ist das? Wenn dies ein einfacher Paketfilter ist, können Sie HTTP/2 nicht blockieren, aber ich sehe keine Verwendung zum Blockieren, da Sie den Inhalt sowieso nicht überprüfen. Wenn es sich um eine Firewall handelt, die den SSL-Datenverkehr prüfen kann, funktioniert sie als man-in-the-middle und kann daher die ALPN-Erweiterung automatisch entfernen, was zu einem Downgrade auf HTTP/1.x führt. Abgesehen davon betrachte ich diese Frage off-topic hier und mehr zum Thema bei security.stackexchange.com oder serverfault.com. –

+0

Warum möchten Sie das tun? Da kann es bessere Alternativen geben. Sprechen Sie auch eingehende oder ausgehende Verbindungen? –

+0

Ich habe die Frage bearbeitet, um TLS MITM auszuschließen, dies ist für eine ausgehende Firewall. – patraulea

Antwort

2

HTTP/2 über TLS wird über ALPN ausgehandelt.

Browser werden Servern sagen, dass sie es unterstützen.

Wenn Sie nicht HTTP/2 verwenden möchten, müssen Sie lediglich die Serverkonfiguration so ändern, dass sie nicht als eines der Protokolle enthält, das über ALPN verhandelt werden kann.

Die ALPN-Aushandlung wird dann auf HTTP/1.1 zurückgesetzt und der Client verwendet HTTP/1.1.

+0

Der einfachste Weg, dies zu beheben, wäre Serverkonfiguration, aber ich kontrolliere nicht die Webserver. Ich habe die Frage aktualisiert, um dies klarzustellen. Was mir nicht klar ist, ist, ob http2 oder ALPN als Ganzes an der (ausgehenden) Firewall verweigert werden kann, ohne Richtlinien an Clients zu übertragen oder TLS MITM auszuführen. – patraulea