Skip to content

feat(transport): browser impersonation and client certificate support - #8

Merged
ReaJason merged 2 commits into
masterfrom
transport-impersonator-analysis
Nov 7, 2026
Merged

ReaJason merged 2 commits into
masterfrom
transport-impersonator-analysis

Conversation

@ReaJason

@ReaJason ReaJason commented Nov 7, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • Replace official OkHttp with impersonator-okhttp so HTTP/HTTPS and WebSocket connections can present a browser-like TLS/JA3/JA4 and HTTP/2 fingerprint.
  • Make impersonation opt-in: a boolean switch plus a profile (MAC_CHROME by default), configurable from the shell form. Core and loader clients are built from the same Shell.clientConfig.
  • Add mutual TLS: clientCertificate (Base64 PKCS#12) and clientCertificatePassword, applied on both the plain and impersonated TLS paths. The shell form gains a .p12/.pfx upload, a remove button and a password field.
  • Bump mockwebserver3 to 5.5.0 to match the OkHttp version the fork is based on. 5.3.2 calls a Platform.configureTlsExtensions signature that no longer exists, which broke HTTPS tests.
  • Add THIRD-PARTY-NOTICES.md plus LGPL-3.0 / GPL-3.0 texts, and remove the unused paid-license @fancyapps/ui dependency.

Notes

  • impersonator-okhttp / impersonator-bctls are LGPL-3.0. THIRD-PARTY-NOTICES.md §1 records the notice, license texts, corresponding sources and rebuild/replace steps.
  • class-obf (GPL-3.0) arrives transitively from the memshellparty core; THIRD-PARTY-NOTICES.md §2 describes the options before redistributing binaries.
  • Client certificates are PKCS#12 only. Custom CA trust is not part of this change; skipSslVerify behaves as before.

Test plan

  • ./gradlew :noone-transport:test — all pass except two pre-existing Dubbo tests that require external providers
  • ./gradlew :noone-server:test --tests '*ClientFactoryCompatTest'
  • bun run fmt, bun run typecheck, bun run lint
  • bun run test:run — 84 tests pass
  • bun run build

Replace official OkHttp with impersonator-okhttp so HTTP/HTTPS and
WebSocket connections can present a browser-like TLS/JA3/JA4 and HTTP/2
fingerprint. Impersonation is opt-in through a switch plus a profile
(MAC_CHROME by default), and the core and loader clients are built from
the same Shell.clientConfig.

Add mutual TLS support: clientCertificate (Base64 PKCS#12) and
clientCertificatePassword are applied on both the plain and impersonated
paths. The shell form gains the switch, the profile select, a .p12/.pfx
upload and a certificate password field.

Bump mockwebserver3 to 5.5.0 to match the OkHttp version the fork is
based on; 5.3.2 calls a Platform.configureTlsExtensions signature that no
longer exists there, which broke HTTPS tests.
@vercel

vercel Bot commented Nov 7, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
no-one Ready Ready Preview Nov 7, 2026 1:23am UTC

Document the licenses of the distributed Java runtime and web production
dependency sets. The LGPL-3.0 (impersonator) and GPL-3.0 (class-obf)
components are called out with their compliance steps and license texts.

@fancyapps/ui is a paid-license package that no first-party code imports,
so remove it instead of carrying a commercial dependency.
@codecov-commenter

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

❌ Patch coverage is 83.01887% with 9 lines in your changes missing coverage. Please review.
✅ Project coverage is 54.05%. Comparing base (4e6b7a2) to head (7ecebf6).

Files with missing lines Patch % Lines
...com/reajason/noone/server/shell/ClientFactory.java 83.01% 3 Missing and 6 partials ⚠️
❗ Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@             Coverage Diff              @@
##             master       #8      +/-   ##
============================================
+ Coverage     53.02%   54.05%   +1.02%     
- Complexity      554      560       +6     
============================================
  Files           109      109              
  Lines          3170     3193      +23     
  Branches        397      400       +3     
============================================
+ Hits           1681     1726      +45     
+ Misses         1241     1216      -25     
- Partials        248      251       +3     
Flag Coverage Δ
noone-server 54.05% <83.01%> (+1.02%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@ReaJason
ReaJason merged commit 8d9aacf into master Nov 7, 2026
5 checks passed

This branch was successfully deployed

1 active deployment
Preview — 7ecebf67 Deployed Nov 7, 2026 by vercel[bot]
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.

2 participants