3.6 KiB
Relay authentication validation
Local darwin/arm64 checkout, base 3549fe5. No deploy/push/release or production
credentials. Three pre-existing investigation tests were preserved.
Confirmed seam
Panel HTTP plus node/federation commands, using temporary SQLite repositories, loopback HTTP/WebSocket peers, and captured command data. Native data-plane auth matrix is recorded separately in the required-route validation evidence.
Vertical regression evidence
- New local tunnel: observed failure because generated relay connector/receiver authentication was absent; implemented purpose-separated endpoint credentials.
- Required tunnel configuration export: observed missing authentication-policy marker; exported marker added, credentials remain excluded. Configuration restore of protected tunnels explicitly rejects missing private state.
- Federation reserve/apply: observed missing capability advertisement; added versioned contract, receiver authentication, persistent state, and no-downgrade.
- Full dual-panel middle/exit tunnel: observed zero authenticated receivers; threaded receiving and next-target credentials through consumer requests.
- Federation strict middle policy: observed absent chain.strict; local and federation middle generators now set it while exits retain direct dialing.
- Insert a new middle before an existing middle: observed rejected update with hop-index credentials; receiver identity changed to tunnel/node/role, preserving the existing credential and assigning the new receiver a distinct credential.
- Direct-to-relay conversion: observed absent relay authentication; conversion now requires credentials while existing legacy relay tunnels remain explicit.
- Provider private JSON loss: observed successful reapply recreating protected state; separately persisted auth version now rejects missing private material.
Additional command-seam checks cover local update stability, reconnect followed by explicit public batch-redeploy (avoids the 30-second production debounce), missing consumer private state rejection, old peer refusal before reservation, legacy list visibility, matched per-hop credentials and secret-free list/export.
Results
Eight authentication contract tests with race detection, repeated three times:
go test -race ./tests/contract -run '^(TestNewRelayTunnelEmitsMatchingPrivateEndpointAuthentication|TestFederatedRelayRequiresVersionedAuthAndRejectsDowngrade|TestNewFederatedTunnelAuthenticatesEveryRelayHop|TestRelayAuthenticationSurvivesInsertingBeforeExistingMiddle|TestConvertingDirectTunnelRequiresRelayAuthentication|TestBackupImportCannotSilentlyDowngradeRequiredRelay|TestNewRelayTunnelRefusesLegacyFederationBeforeReservation|TestLegacyRelayStateRemainsExplicitInList)$' -count=3
Earlier pass: 17.878 seconds. Final run after provider version guard and log
redaction: PASS, 19.584 seconds. Focused non-TLS generation
regression passes after narrowing its old overbroad no-metadata assertion.
git diff --check passes.
Explicit limitations
- Authentication-only protection against anonymous relay clients, not credential confidentiality over raw TCP/unverified TLS/public-default KCP or insecure control-plane paths.
- Required mode is desired policy, not attestation of every participating agent. Old agent strict-route support requires upgrading the agent.
- Existing legacy relay tunnels remain unprotected. No automatic migration, credential rotation, or configuration-only credential recovery is implemented.
- SQLite/loopback verification only in this task; production topology, live upgrades, and PostgreSQL runtime checks are not exercised here.