Skip to content

Verify custom-relay /healthz with webpki roots; 0.0.43 - #57

Merged
andrewchen5678 merged 2 commits into
mainfrom
android-relay-healthz-tls
Aug 21, 2026
Merged

andrewchen5678 merged 2 commits into
mainfrom
android-relay-healthz-tls

Conversation

@andrewchen5678

Copy link
Copy Markdown
Collaborator

Summary

  • The connection-path snapshot's custom-relay /healthz probe built its reqwest client on rustls-platform-verifier, which on Android needs a JNI init the app never performs and panics with Expect rustls-platform-verifier to be initialized — the panic reaches the JNI connPath entry point and aborts the app process whenever a profile with custom relays opens the "Connection path" sheet (reproduced on the arm64 emulator with the staging bastion profile).
  • The probe now hands reqwest a preconfigured rustls config: ring + embedded Mozilla roots (webpki-roots), the same trust iroh uses for the relay connection itself. The platform verifier is no longer constructed on any platform.
  • Android build notes: drop the Nexus 7 references (the app is arm64-only now).
  • Bump to 0.0.43 for the release that the Android app will pin.

Test plan

  • cargo clippy --lib -- -D warnings and cargo ndk -t arm64-v8a --platform 29 clippy --lib -- -D warnings
  • cargo test --lib transport::paths
  • Android emulator (arm64, API 36) with a custom-relay profile: "Connection path" sheet opens without the abort, shows the relay + direct paths and both relays as "Working" (HTTPS /healthz verified against the webpki roots)

🤖 Generated with Claude Code

https://claude.ai/code/session_01QedowxAkQAV7HoeJu8ZYZC

Andrew Chen and others added 2 commits August 21, 2026 15:26
…fier

The on-demand connection-path snapshot probes each custom relay's /healthz
with reqwest. On the `rustls-no-provider` feature reqwest builds its TLS
verifier from rustls-platform-verifier, which on Android requires a JNI
initialisation the host app never performs and otherwise panics while the
client is being built ("Expect rustls-platform-verifier to be initialized").
That panic unwinds into the JNI `connPath` entry point and aborts the whole
app process as soon as a profile with custom relays opens the sheet.

Hand reqwest a preconfigured rustls ClientConfig instead: ring plus the
embedded Mozilla roots, which is exactly what iroh verifies the relay's own
TLS with (its platform-verifier feature is off), so a relay the tunnel trusts
is one the health check trusts. The platform verifier is no longer built on
any platform, and the process-wide provider install is gone with it.

Also drop the Nexus 7 references from the Android build notes: the app is
arm64-only now.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QedowxAkQAV7HoeJu8ZYZC
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QedowxAkQAV7HoeJu8ZYZC
@andrewchen5678
andrewchen5678 merged commit 6f7d347 into main Aug 21, 2026
6 checks passed
@andrewchen5678
andrewchen5678 deleted the android-relay-healthz-tls branch August 21, 2026 22:29
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