Skip to content

Conversation

BRUHItsABunny
Copy link
Contributor

@BRUHItsABunny BRUHItsABunny commented Apr 1, 2025

Since Chrome 133 the TLS fingerprint is changing due to this feature:
https://chromestatus.com/feature/5149147365900288

I found that others are also running into this problem here: #330

It looks like a "full" implementation might be bigger than just extending the current application settings extension, as per another implementation here:
bogdanfinn/utls@fe91add

Opening this PR as a draft to discuss how we should move forward on this, I've also implemented this for the time being as it might be enough to address this (at least for my use case)

@Juktong
Copy link
Contributor

Juktong commented Apr 2, 2025

Since the previous codepoints are coded in file exttype_values.go, it would be a good idea to also update it as well.

@BRUHItsABunny
Copy link
Contributor Author

I noticed some TLS errors especially on Google domains while using my branch. I have updated it to support the new application settings code point in the ECH as well to fix those errors.

Copy link
Member

@mingyech mingyech left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, added some suggestions

@BRUHItsABunny BRUHItsABunny marked this pull request as ready for review May 12, 2025 17:02
@BRUHItsABunny BRUHItsABunny requested a review from mingyech May 15, 2025 14:56
@RonaldinhoL
Copy link

rename ApplicationSettingsExtension to applicationSettingsExtension break my exist custom spec

@RonaldinhoL
Copy link

RonaldinhoL commented May 16, 2025

Just duplicating the ApplicationSettingsExtension would be cleaner. These changes force unnecessary updates to too many spec settings.

@BRUHItsABunny
Copy link
Contributor Author

I understand, some of my own modules also broke with those changes and wasn't sure if that was the expectation with the approach that was requested.
I made some changes that achieve both goals at the same time (1 only 1 place to implement the extension being written to the wire, 2 no breakages with the pre-existing patterns that expect the SupportedProtocols slice to be available and exported)

@mingyech
Copy link
Member

Ooo yeah we should be careful with compatibility, thanks for pointing out @RonaldinhoL

@BRUHItsABunny This new change looks good though, looks like nothing will be broken

@RonaldinhoL
Copy link

Ooo yeah we should be careful with compatibility, thanks for pointing out @RonaldinhoL

@BRUHItsABunny This new change looks good though, looks like nothing will be broken

this not work for me, my specs are defined out of utls lib, applicationSettingsExtension is not exposed.
just as I said, in order to reuse a few lines of code from applicationSettingsExtension, you've ended up requiring modifications to dozens of already-defined specs. This makes absolutely no sense and just makes the code look messy.
btw if u want to merge to master, you'd better make a squash commit.

@mingyech
Copy link
Member

I don't think it will require outside changes though? applicationSettingsExtension will be auto initialized with the exported versions

@BRUHItsABunny
Copy link
Contributor Author

BRUHItsABunny commented May 19, 2025

Could you provide an example of what you are trying to do?
Here is an example of what broke for me (which was copied from somewhere else so I expect it to be more prevalent):
https://github.com/BRUHItsABunny/gOkHttp-ja3spoof/blob/82382ec2ed1f3d51e50cb4479b0142e92d8ee911/transportv2.go#L123

With the new changes this doesn't panic anymore.
Is there any reason you are trying to instantiate the unexported embedded struct? It's not a pointer ref so when you instantiate the outer struct utls.ApplicationSettingsExtension the Go runtime should automatically instantiate it the embedded one as well.

@mingyech
Copy link
Member

Added 4241c5b to make clear that this will not break backward compatibility, but let me know if there's something else broken by this

btw if u want to merge to master, you'd better make a squash commit.

Good idea yeah I'll do some squashing when merging

@mingyech mingyech merged commit 0557f61 into refraction-networking:master May 19, 2025
3 checks passed
@BRUHItsABunny
Copy link
Contributor Author

Thanks for carrying it over the finish line @mingyech

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.

How to implement the "application_settings (17613)," extended
4 participants