Skip to content

proposal: distinguish same-origin TLS binding from delegated signing #100

Description

@igrigorik

§5.2 ("Binding keys to the directory authority") RECOMMENDS that a directory server include one per-key HTTP Message Signature over @authority;req + content-digest, and says "clients SHOULD ignore keys from a directory response that do not have a corresponding valid signature." PR #98's intent extends this to jwks_uri responses ("we still strongly suggest that jwks_uri response is signed to bind keys to a domain").

This is applied uniformly, but the binding goal is already met by the transport in one common case:

  • Same-origin serving. When the directory / jwks_uri is served from the same origin as the @authority the keys speak for, TLS to that origin already binds the keys to that authority. A verifier that fetched https://signer.example/... over TLS and got these keys has the same authority binding the per-key @authority;req signature would provide. The signature is redundant with TLS here.

  • Delegated / cross-origin serving. When keys are served from a different origin than the authority (delegation, third-party key hosting, a shared key service), TLS to the key host does not bind the keys to the authority. The per-key @authority;req signature is then the essential — and only — binding. This is exactly where §5.2 earns its keep.

Proposal

Scope §5.2's signing recommendation (and the "ignore unsigned keys" guidance) to the delegated / cross-origin case, or at minimum add a note that a directory/jwks_uri served same-origin with the authority over TLS satisfies the authority-binding goal without per-key signatures. Otherwise a conformant verifier following the blanket SHOULD would ignore unsigned keys that are in fact securely bound to the authority by TLS.

Why it matters

Deployments that reuse a same-origin identity document as the JWKS — e.g., an agent/commerce profile served at the operator's own well-known URL, pointed to by Signature-Agent; type=jwks_uri — would otherwise be forced into dynamic per-key response signing: private keys at the serving layer (or a precompute pipeline), caches keyed on @authority, and re-signing on expires. That is real operational burden with no security gain over TLS in the same-origin case. Distinguishing the two cases keeps the simple same-origin path viable while preserving the signature requirement where it is actually load-bearing (delegation/cross-origin).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions