-
Notifications
You must be signed in to change notification settings - Fork 84
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Remove unnecessary HTTP layer #118
Comments
HTTP is what brings all the interesting things to this protocol. There are several reasons why removing HTTP degrades the design:
As feature creep happens, before we know it any SSH-over-QUIC design might start to look quite close to HTTP. The danger is it takes ages to get there before we realise. |
+1 to @LPardue. We get quite a few benefits from HTTP/3 here. In terms of integration with existing software, the difficulty should be the same, the h3 stack can easily send the contents of the CONNECT stream (+ datagrams) to another piece of software over loopback - just like the TLS terminator would. |
I have no concerns with using HTTP for client-to-server - but CONNECT in particular is not well supported by existing infra ( proxies ), it should at least support POST as an option. Using SSH over HTTP/2 is pretty common ( with the double encryption, which allows end-to-end security ). Adoption is very unlikely to happen if it requires major changes to http reverse proxies ( load balancers, etc) - if you have to run a custom server you can better run real ssh. |
The server currently uses an HTTP handler that expects a
CONNECT
method with a protocol ofSSH3
. ie. instead ofGET / HTTP/1.0
it expectsCONNECT / SSH3
.Current stack:
That's easy to implement as a proof of concept, but the HTTP layer is unnecessary and makes it harder to multiplex a server (eg. as a web server and a shell server).
I propose that you could simplify the server and protocol by removing the HTTP layer. To do this, you would use these features of TLS:
NextProtos
in tls.Config: https://pkg.go.dev/crypto/tls#ConfigAuthorization
headers, JWTs etc. If you want complicated auth mechanisms (such as PAM support), you could negotiate those inside the shell-over-quic protocol.Proposed stack:
This way the application protocol (Shell, HTTP, others) is made at the TLS termination point rather than at the web server layer, enabling easier integration with existing services.
If you've considered this already you may want to mention the trade offs in the docs.
The text was updated successfully, but these errors were encountered: