Skip to content

Disguise QUIC handshake as HTTP/3 - #28

Merged
guyte149 merged 3 commits into
masterfrom
feature/http3-disguise
Apr 29, 2026
Merged

Disguise QUIC handshake as HTTP/3#28
guyte149 merged 3 commits into
masterfrom
feature/http3-disguise

Conversation

@guyte149

Copy link
Copy Markdown
Owner

Two changes that make the client's QUIC ClientHello blend in with real HTTP/3 traffic instead of fingerprinting the protocol:

  • ALPN switched from hq-29 (a long-deprecated QUIC draft identifier) to h3 (RFC 9114 HTTP/3). We still tunnel arbitrary streams; only the ALPN advertisement changes.
  • Default SNI now reuses the host string the user passed on the CLI (e.g. example.com from example.com:8080) instead of a hard-coded rusnel placeholder. For IP literals rustls suppresses the SNI extension per RFC 6066 §3, matching real client behavior. --tls-server-name still wins when set. As a side benefit, --tls-ca / --tls-mtls modes now work without --tls-server-name when the cert's SAN matches the connect hostname.

Plumbed via a new ServerEndpoint { addr, host } struct that preserves the original host alongside the resolved SocketAddr.

Two changes that make the client's QUIC ClientHello blend in with real
HTTP/3 traffic instead of fingerprinting the protocol:

- ALPN switched from `hq-29` (a long-deprecated QUIC draft identifier)
  to `h3` (RFC 9114 HTTP/3). We still tunnel arbitrary streams; only the
  ALPN advertisement changes.
- Default SNI now reuses the host string the user passed on the CLI
  (e.g. `example.com` from `example.com:8080`) instead of a hard-coded
  `rusnel` placeholder. For IP literals rustls suppresses the SNI
  extension per RFC 6066 §3, matching real client behavior.
  `--tls-server-name` still wins when set. As a side benefit, `--tls-ca`
  / `--tls-mtls` modes now work without `--tls-server-name` when the
  cert's SAN matches the connect hostname.

Plumbed via a new `ServerEndpoint { addr, host }` struct that preserves
the original host alongside the resolved `SocketAddr`.

Made-with: Cursor
@guyte149
guyte149 merged commit a207d96 into master Apr 29, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant