[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Gaufre, Gopher over HTTP (GoH), and Gopher over TLS (GoT)


I created Gaufre, a web client for Gopher that uses two experimental protocols. No changes to the Gopher protocol, just transporting Gopher over HTTP and TLS respectively. (Similar to the DNS over HTTP and DNS over TLS protocols.)

Wanted to see what other Gopher developers think about these ideas. This mailing list appears like the de facto Gopher dev discussion group.

GoH allows a lightweight Gopher<->HTTP proxy that simply tunnels Gopher data over HTTP request/response. Not rendering Gopher pages as HTML or anything like that; simply piping the socket from TCP to HTTP. This gives the GoH web client access to the raw Gopher data just like any native app that would have access to TCP sockets.

GoT allows dual TLS & plaintext Gopher hosting on the same port. A GoT client probes for TLS support on port 70/tcp by sending a TLS ClientHello handshake packet including the SNI servername and ALPN protocol name (currently just `gopher` but this should probably be versioned). If the handshake fails, like with any standard plaintext Gopher server, the GoT client simply reconnects as plaintext TCP. The GoT server can use the SNI servername to implement virtual hosting of many Gopher domains on the same IP:port, without modifications to the raw Gopher protocol. A fairly simple TLS stripper/forwarder could add GoT support to existing Gopher servers. This is similar to the elegant TLS proposal by Solène last year, adding mainly the SNI and ALPN extensions.

As a proof of concept, try this to access a GoT Gopherhole with SNI and ALPN:

echo -ne "/\r\n" | openssl s_client -ign_eof -servername commons.host -alpn gopher -connect commons.host:70

Looking forward to feedback/discussion of these ideas if there is any interest.


Reply to: