I don’t think Ruby is doing much better? Correct me if I’m wrong.
EDIT: and yes I understand that you should use http/2 on the LB and http/2 on the backend to get the best of both worlds.
EDIT2: anyway my opinion is that the general reaction to a security discovery like this one shouldn't be "let's stop using this tech immediately" but "let's get this patched ASAP"
Terminating HTTP/2 over TLS on a web frontend and then HTTP/2 over plaintext to the application servers sounds like a viable model.
[1]: https://docs.aws.amazon.com/elasticloadbalancing/latest/appl...
curl -v --http2 --http2-prior-knowledge http://localhost
* Connected to localhost (::1) port 80 (#0)
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x559a7c6545c0)
> GET / HTTP/2
> Host: localhost
> user-agent: curl/7.74.0
> accept: */*
>
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
< HTTP/2 301
< date: Fri, 06 Aug 2021 11:16:05 GMT
*snip*
Sadly none of the services that I reverse proxy through Apache support HTTP/2..If on Kubernetes, just install cert-manager. Or if using FaaS, your platform will already do TLS termination, no?
You can still of course use self-signed certificates (or setting up your own "CA"), but you'll hit other problems related to runtime certificate reloads and so on. It's still a lot of work to enable SSL for fully offline services.
Besides, if you're doing microservices, whatever is managing them should be able to restart them gracefully. No need for reload as such.
Http3 is almost exactly http2 but over quic. This means the requests should be possible to force the same desyncs talked about in the article.
So it seemed that somewhere along the years while I haven't been paying any attention to websec, it became a common practice to send requests from different clients through the same TLS connection. And due to the non conforming way HTTP 2/1.1 interop was implemented by these webservers/load balancers request boundaries were not delimited correctly, making it possible to inject requests on behalf of followup clients.
Fine I get the issue. Sounds like another "good enough" optimization that backfired.
What is the solution aside from playing the patching wack-a-mole game? Should maybe a HTTP2.1 protocol work without a strict TLS requirement so that protocol downgrades aren't necessary to squeeze out extra performance (unless I misunderstand why the HTTP2/HTTP1.1 bridge was in place). Or is the problem that some application servers still don't support HTTP2 out of the box?