Skip to content

RFC: define trailing DNS root-dot handling in request-signing canonicalization #6813

Description

@bokelley

Summary

Define whether an explicit trailing DNS root dot is stripped, preserved, or rejected when deriving request-signing @authority and @target-uri, and publish a conformance vector for the decision.

Context

The Python SDK normalizes IDN hosts through UTS-46. That normalizer strips a trailing root dot, while the former ASCII-only path preserved it. Without one normative rule, equivalent host spellings can produce different signature bases:

  • https://example.com./p
  • https://example.com/p
  • A-label and U-label forms of the same IDN host with a trailing dot

The Python SDK currently strips one trailing dot before branching so ASCII, A-label, and U-label inputs agree. This is an interim interoperability choice, not a protocol decision. Other implementations following RFC 9421 and RFC 3986 literally could preserve the wire form and silently diverge.

Requested specification work

  1. State the normative trailing-root-dot rule in the @authority / @target-uri canonicalization steps.
  2. Add root-dot-* accept/reject cases to the current request-signing canonicalization vectors under dist/compliance/<version>/test-vectors/.
  3. Cover ASCII, A-label, and U-label spellings that identify the same DNS name.
  4. Note the wire-compatibility consequence for mixed old/new SDK deployments.

SDK tracking

Python: adcontextprotocol/adcp-client-python#986

The Python-local regression test should be replaced by the vendored upstream vector once this lands.

Metadata

Metadata

Assignees

No one assigned

    Labels

    claude-triagedIssue has been triaged by the Claude Code triage routine. Remove to re-triage.compliance-suiteneeds-wg-reviewBlocked on a working-group decision — surface in WG meeting agendasrfcProtocol change — auto-adds to roadmap board

    Type

    No type

    Projects

    Status
    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions