Skip to content

Chrome is missing the trust_anchors ClientHello extension #397

@konohog114

Description

@konohog114

HelloChrome_Auto currently points to HelloChrome_133. That profile is now behind current Chrome in at least one visible ClientHello detail: Chrome sends the TLS trust_anchors extension (0xca34, decimal 51764) by default, while uTLS does not.

I captured ClientHello messages locally on Windows and saw this:

Client trust_anchors ClientHello TLS record size
Chrome for Testing 140.0.7339.207 no 1818 bytes
Chrome for Testing 141.0.7390.37 yes, len 2 1792 bytes
Chrome for Testing 141.0.7390.55 yes, len 2 1792 bytes
Chrome for Testing 149.0.7827.54 yes, len 2 1792 bytes
Chrome 149.0.7827.54 with --disable-features=TLSTrustAnchorIDs no 1786 bytes
uTLS HelloChrome_133 / current HelloChrome_Auto no 1786 bytes

So, from these captures, Chrome appears to have enabled this by default starting with Chrome 141. The extension code existed earlier in Chromium/BoringSSL, but the wire behavior changed at the Chrome 141 boundary in the tested stable builds.

The missing extension is small but fingerprint-visible. The wire encoding is:

ca 34 00 02 00 00

That is 6 bytes total: extension type 0xca34, extension length 2, and an empty vector 0000.

The issue is Chrome ClientHello parity: the extension set, JA3-style inputs, and total ClientHello size differ from modern Chrome.

BoringSSL defines the extension as TLSEXT_TYPE_trust_anchors 0xca34 and documents that an empty value still sends the extension in ClientHello. Chromium exposes this through TLSTrustAnchorIDs; disabling that feature in Chrome 149 removes the extension from the captured ClientHello.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions