Chute Devs

Hello ECH — Hiding the Server Name

Hello everyone.

TLS encrypts the contents of your connection, but it has long leaked one thing in the clear: the name of the server you’re connecting to. That name sits in the SNI field of the very first handshake message, before any encryption is negotiated. Anyone watching the network can see it — and censors use exactly that field to block specific sites.

Encrypted Client Hello (ECH) closes that hole. Today Chute gains support for it.

The SNI Leak, in Plain Terms

When your browser connects to secret.example.com, the very first packet says, in plaintext, “I want to talk to secret.example.com.” The connection is then encrypted, but that first line was already broadcast. TLS 1.3 fixed a lot of this — but not the name.

ECH encrypts the ClientHello itself. The real server name travels inside the encrypted handshake, while the name visible on the wire is a harmless cover name published by the server. To an observer, you appear to be connecting to the cover — not to the real destination.

ECH is specified in RFC 9849, and it’s the same mechanism modern browsers are deploying to end SNI-based censorship.

How Chute Uses It

Turning it on is two settings:

1
Trojan = trojan, 1.2.3.4, 443, password=pw, tls=true, sni=secret.example.com, fingerprint=chrome, ech=true

Two things matter:

  • It needs a fingerprint. ECH is built on the same stack as the client fingerprint, so a policy must set fingerprint= too. Without one, ech=true does nothing and the real name still goes out in the clear — we’d rather be honest about that than let it fail silently.
  • The config comes from DNS. By default Chute looks up the server’s ECHConfig in its DNS HTTPS record, exactly like a browser. If the server publishes no HTTPS record, you can pin the config directly with ech-config=.

ECH applies to Trojan, VMess and VLESS over plain TLS, including their WebSocket transports. It does not apply to gRPC, which sends the name in the clear — worth knowing if that’s your transport.

What This Means

REALITY already hides the server name a different way — it borrows a real website’s certificate so the connection looks like a visit to that site. ECH is the general-purpose answer for ordinary TLS: the same privacy, for any server that supports it, without needing a camouflage target.

If your server operator supports ECH — and most serious providers now do — it’s a setting you should turn on. It costs a fraction of a millisecond and removes the single most common way a proxy connection gets identified and blocked.

ECH is available now on iOS, macOS and tvOS. The full reference, including config pinning and the stale-config fallback, is in the Chute Manual.

Thanks.

Chute Devs