<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-rosomakho-httpbis-tunnels-signatures-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="HTTP Tunnels Auth with Signatures">Authenticating HTTP Tunnels with HTTP Message Signatures</title>
    <seriesInfo name="Internet-Draft" value="draft-rosomakho-httpbis-tunnels-signatures-00"/>
    <author fullname="Yaroslav Rosomakho">
      <organization>Zscaler</organization>
      <address>
        <email>yrosomakho@zscaler.com</email>
      </address>
    </author>
    <author fullname="Arndt Schwenkschuster">
      <organization>Defakto Security</organization>
      <address>
        <email>arndts.ietf@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="October" day="21"/>
    <area>Web and Internet Transport</area>
    <workgroup>HTTP</workgroup>
    <keyword>http</keyword>
    <keyword>tunnels</keyword>
    <keyword>signatures</keyword>
    <abstract>
      <?line 41?>

<t>This document specifies client authentication for HTTP tunnel establishment
using HTTP Message Signatures. It covers the CONNECT method, extended CONNECT
in HTTP/2 and HTTP/3, and HTTP/1.1 Upgrade. It defines signature coverage and
replay protection using either a client-generated nonce or a server-provided
nonce obtained through an Accept-Signature challenge.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://yaroslavros.github.io/httpbis-connect-signatures/draft-rosomakho-httpbis-tunnels-signatures.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-rosomakho-httpbis-tunnels-signatures/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        HTTP Working Group mailing list (<eref target="mailto:ietf-http-wg@w3.org"/>),
        which is archived at <eref target="https://lists.w3.org/Archives/Public/ietf-http-wg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/yaroslavros/httpbis-connect-signatures"/>.</t>
    </note>
  </front>
  <middle>
    <?line 49?>

<section anchor="intro">
      <name>Introduction</name>
      <t>HTTP endpoints that establish tunnels often need to authenticate clients before
granting access to network resources. HTTP Message Signatures <xref target="HTTP-SIG"/>
provide a flexible mechanism for authenticating selected components of an HTTP
message, but their use requires a profile that specifies the components to
cover and the verification requirements for a particular application.</t>
      <t>This document defines such a profile for tunnel establishment using the CONNECT
method <xref target="HTTP"/>, extended CONNECT in HTTP/2 <xref target="HTTP2-EXTCONNECT"/> and HTTP/3
<xref target="HTTP3-EXTCONNECT"/>, and HTTP/1.1 Upgrade <xref section="7.8" sectionFormat="of" target="HTTP"/>. These mechanisms support uses such
as UDP proxying <xref target="CONNECT-UDP"/> and WebSockets <xref target="WEBSOCKET"/>. The profile specifies
signature coverage and replay protection for each tunnel establishment request.
Clients can send unsolicited signatures with client-generated nonces; servers
can accept these or require a fresh nonce through an Accept-Signature challenge.</t>
      <t>One motivating use case is authentication of software workloads at CONNECT
proxies. WIMSE Workload-to-Workload Authentication with HTTP Signatures
<xref target="WIMSE-HTTPSIG"/> uses workload credentials and HTTP Message
Signatures to authenticate workload requests. This document is intended to
support that use case while remaining independent of WIMSE and applicable to
other client authentication deployments.</t>
      <t>Authentication applies to the tunnel establishment request. Key identification,
trust establishment, and authorization policy are outside the scope of this
document. The mechanism does not require TLS or signed responses, and does not
provide confidentiality or integrity protection for subsequent tunnel traffic.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="overview">
      <name>Protocol Overview</name>
      <t>The client sends a tunnel establishment request, optionally signed using a
fresh client-generated nonce. According to its policy, the server can accept
an unsolicited signature or require a signature using a server-provided nonce.
If authentication is needed, the server returns an Accept-Signature challenge
with a fresh nonce and the required signature coverage. The client retries
with the requested signature. Before accepting a request, the server verifies
the signature, enforces nonce single use, and applies its authorization policy.</t>
      <figure anchor="authentication-flow">
        <name>Authentication exchange when a challenge is required</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="288" width="416" viewBox="0 0 416 288" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 24,48 L 24,272" fill="none" stroke="black"/>
              <path d="M 392,48 L 392,272" fill="none" stroke="black"/>
              <path d="M 32,80 L 384,80" fill="none" stroke="black"/>
              <path d="M 32,128 L 384,128" fill="none" stroke="black"/>
              <path d="M 32,176 L 384,176" fill="none" stroke="black"/>
              <path d="M 32,224 L 384,224" fill="none" stroke="black"/>
              <path d="M 32,270 L 384,270" fill="none" stroke="black"/>
              <path d="M 32,274 L 384,274" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="392,272 380,266.4 380,277.6" fill="black" transform="rotate(0,384,272)"/>
              <polygon class="arrowhead" points="392,176 380,170.4 380,181.6" fill="black" transform="rotate(0,384,176)"/>
              <polygon class="arrowhead" points="392,80 380,74.4 380,85.6" fill="black" transform="rotate(0,384,80)"/>
              <polygon class="arrowhead" points="40,272 28,266.4 28,277.6" fill="black" transform="rotate(180,32,272)"/>
              <polygon class="arrowhead" points="40,224 28,218.4 28,229.6" fill="black" transform="rotate(180,32,224)"/>
              <polygon class="arrowhead" points="40,128 28,122.4 28,133.6" fill="black" transform="rotate(180,32,128)"/>
              <g class="text">
                <text x="28" y="36">Client</text>
                <text x="388" y="36">Server</text>
                <text x="100" y="68">Unsigned</text>
                <text x="148" y="68">or</text>
                <text x="208" y="68">unsolicited</text>
                <text x="284" y="68">signed</text>
                <text x="344" y="68">request</text>
                <text x="156" y="116">Accept-Signature</text>
                <text x="264" y="116">challenge</text>
                <text x="116" y="164">Signed</text>
                <text x="176" y="164">request</text>
                <text x="228" y="164">with</text>
                <text x="276" y="164">server</text>
                <text x="328" y="164">nonce</text>
                <text x="132" y="212">Successful</text>
                <text x="232" y="212">establishment</text>
                <text x="324" y="212">response</text>
                <text x="164" y="260">Tunnel</text>
                <text x="224" y="260">traffic</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
Client                                       Server
  |                                             |
  |     Unsigned or unsolicited signed request  |
  |-------------------------------------------->|
  |                                             |
  |        Accept-Signature challenge           |
  |<--------------------------------------------|
  |                                             |
  |        Signed request with server nonce     |
  |-------------------------------------------->|
  |                                             |
  |        Successful establishment response    |
  |<--------------------------------------------|
  |                                             |
  |              Tunnel traffic                 |
  |<===========================================>|
]]></artwork>
        </artset>
      </figure>
      <t>If the server accepts an unsolicited signature, it sends the successful
establishment response directly. Each establishment requires a fresh nonce.
Retries can use a different connection; authentication of one request does not
authenticate other requests on either connection.</t>
    </section>
    <section anchor="signature-requirements">
      <name>Signature Requirements</name>
      <t>The server <bcp14>MUST</bcp14> enforce the signature requirements below, whether the client
sends an unsolicited signature or responds to an Accept-Signature challenge.
The client <bcp14>MUST</bcp14> generate the signature in accordance with <xref target="HTTP-SIG"/>.
The Signature-Input and Signature fields <bcp14>MUST</bcp14> be sent in the request header
section so that authentication can complete before tunnel establishment. A
signature accepted for authentication <bcp14>MUST</bcp14> satisfy all applicable requirements;
coverage from separate signatures <bcp14>MUST NOT</bcp14> be combined to satisfy them.</t>
      <section anchor="covered-components">
        <name>Covered Components</name>
        <t>The signature <bcp14>MUST</bcp14> cover the components listed below for the request form in
use. The server <bcp14>MUST</bcp14> reject authentication if any required component is not
covered, even if the signature is otherwise valid.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Request form</th>
              <th align="left">Required components</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Standard CONNECT</td>
              <td align="left">
                <tt>@method</tt>, <tt>@authority</tt></td>
            </tr>
            <tr>
              <td align="left">Extended CONNECT</td>
              <td align="left">
                <tt>@method</tt>, <tt>@authority</tt>, <tt>@scheme</tt>, <tt>@path</tt>, <tt>@query</tt>, <tt>@protocol</tt></td>
            </tr>
            <tr>
              <td align="left">HTTP/1.1 Upgrade</td>
              <td align="left">
                <tt>@method</tt>, <tt>@authority</tt>, <tt>@scheme</tt>, <tt>@path</tt>, <tt>@query</tt>, <tt>upgrade</tt></td>
            </tr>
          </tbody>
        </table>
        <t>For standard CONNECT, <tt>@authority</tt> identifies the target host and port. Coverage
of <tt>@path</tt> and <tt>@query</tt> is not required. For extended CONNECT and HTTP/1.1
Upgrade, the URI components identify the requested resource, including any
destination information conveyed in its path or query. The <tt>@query</tt> component
<bcp14>MUST</bcp14> be covered even when no query is present, using the value defined in
<xref section="2.2.7" sectionFormat="of" target="HTTP-SIG"/>.</t>
        <t>The server <bcp14>MUST</bcp14> require coverage of any additional request fields on which it
relies to determine client identity, the tunnel destination, or permissions for
the requested tunnel. When issuing a challenge, it <bcp14>MUST</bcp14> include all required
components in Accept-Signature.</t>
        <t>Clients <bcp14>MAY</bcp14> cover components beyond these requirements. When responding to a
challenge, components not requested by the server can be covered by a separate
signature, as described in <xref section="5.2" sectionFormat="of" target="HTTP-SIG"/>.</t>
        <t>The <tt>upgrade</tt> component covers the Upgrade field using the field canonicalization
rules in <xref section="2.1" sectionFormat="of" target="HTTP-SIG"/>.</t>
      </section>
      <section anchor="protocol-component">
        <name>The <tt>@protocol</tt> Derived Component</name>
        <t>The <tt>@protocol</tt> derived component identifies the protocol requested by an
extended CONNECT request. Its value is the value of the <tt>:protocol</tt>
pseudo-header field defined in <xref section="4" sectionFormat="of" target="HTTP2-EXTCONNECT"/> and used in
HTTP/3 by <xref target="HTTP3-EXTCONNECT"/>, without case conversion or other normalization.
For example, a request containing <tt>:protocol</tt> with the value <tt>connect-udp</tt>
produces the following signature base line:</t>
        <artwork><![CDATA[
"@protocol": connect-udp
]]></artwork>
        <t>This component is derived from a request. It can also be referenced in a
response signature using the <tt>req</tt> parameter as defined in
<xref section="2.4" sectionFormat="of" target="HTTP-SIG"/>. If the request is not an extended CONNECT request
with a valid <tt>:protocol</tt> pseudo-header field, the component cannot be derived
and signature base generation <bcp14>MUST</bcp14> fail. In particular, <tt>@protocol</tt> is not
derived from the HTTP/1.1 Upgrade field.</t>
      </section>
      <section anchor="signature-parameters">
        <name>Signature Parameters</name>
        <t>The signature <bcp14>MUST</bcp14> include the following parameters defined in
<xref section="2.3" sectionFormat="of" target="HTTP-SIG"/>:</t>
        <ul spacing="normal">
          <li>
            <t><tt>nonce</tt>: a fresh client-generated value for an unsolicited signature, or the
exact value supplied by the server when responding to an Accept-Signature
challenge. The client <bcp14>MUST NOT</bcp14> substitute its own value in a challenge response.</t>
          </li>
          <li>
            <t><tt>created</tt>: the time at which the client generated the signature.</t>
          </li>
          <li>
            <t><tt>expires</tt>: the signature expiration time, which <bcp14>MUST</bcp14> be later than <tt>created</tt>.</t>
          </li>
        </ul>
        <t>Client-generated nonces <bcp14>MUST</bcp14> be unpredictable and <bcp14>MUST NOT</bcp14> be reused with the
same signing key. The server <bcp14>MUST</bcp14> enforce a maximum signature lifetime
(<tt>expires</tt> minus <tt>created</tt>) and <bcp14>SHOULD</bcp14> keep it short, on the order of minutes.
It <bcp14>MUST</bcp14> enforce the signature validity period and nonce single use. For a
challenge response, it <bcp14>MUST</bcp14> also enforce the challenge lifetime; signature
expiration does not extend that lifetime. These checks apply when
authenticating the establishment request, not to the resulting tunnel's lifetime.</t>
        <t>Additional parameters can be required by the challenge or another applicable
profile. This document does not mandate <tt>keyid</tt>, <tt>alg</tt>, or a particular <tt>tag</tt>
value; their use follows <xref target="HTTP-SIG"/> and the applicable deployment or profile.</t>
      </section>
      <section anchor="proxy-authority">
        <name>The <tt>proxy-authority</tt> Signature Parameter</name>
        <t>The <tt>proxy-authority</tt> signature metadata parameter identifies the intended
proxy. It <bcp14>MUST</bcp14> be included in signatures authenticating standard CONNECT,
whether unsolicited or challenged, and <bcp14>MUST NOT</bcp14> be used for extended CONNECT
or HTTP/1.1 Upgrade. In Signature-Input, its value is a String containing the
proxy hostname or IP address followed by a colon and an explicit port. It is
protected by the signature through <tt>@signature-params</tt> as defined in
<xref section="2.3" sectionFormat="of" target="HTTP-SIG"/>.</t>
        <t>The client <bcp14>MUST</bcp14> derive the value from its proxy configuration, retaining the
configured hostname rather than substituting a DNS-resolved address. The value
<bcp14>MUST</bcp14> be normalized as follows:</t>
        <ul spacing="normal">
          <li>
            <t>Hostnames are lowercase ASCII, with internationalized labels represented as
A-labels <xref target="IDNA"/> and any final dot omitted.</t>
          </li>
          <li>
            <t>IPv4 addresses use four decimal octets without leading zeros. IPv6 addresses
use the hexadecimal representation specified in Section 4 of
<xref target="IPV6-TEXT"/>, enclosed in square brackets. IPv6 zone identifiers
are not permitted.</t>
          </li>
          <li>
            <t>The port is a decimal integer from 1 through 65535 without leading zeros.
It <bcp14>MUST</bcp14> be included even when it is the default port for the configured proxy
scheme. For example, <tt>https://proxy.example</tt> produces <tt>proxy.example:443</tt>.</t>
          </li>
        </ul>
        <t>The value <bcp14>MUST NOT</bcp14> contain a scheme, user information, path, query, or fragment.
For example, <tt>proxy.example:8080</tt> and <tt>[2001:db8::1]:443</tt> are valid values.
The proxy <bcp14>MUST</bcp14> reject authentication unless the value is in this normalized
form and exactly matches one of its configured proxy identities. An identity
<bcp14>MUST NOT</bcp14> be accepted solely because it appears in the request.</t>
        <t>An Accept-Signature challenge for standard CONNECT <bcp14>MUST</bcp14> include
<tt>proxy-authority</tt> in its Boolean true form (<tt>;proxy-authority</tt>, equivalent to
<tt>;proxy-authority=?1</tt>). This requests inclusion of the parameter without
specifying a proxy identity. The client <bcp14>MUST</bcp14> supply the normalized String
value derived from its proxy configuration in Signature-Input. The proxy
checks that value against its configured identities as described above.</t>
      </section>
    </section>
    <section anchor="authentication-procedure">
      <name>Authentication Procedure</name>
      <section anchor="unsolicited-signatures">
        <name>Unsolicited Signatures</name>
        <t>A client <bcp14>MAY</bcp14> sign its initial request using a fresh client-generated nonce and
the requirements in <xref target="signature-requirements"/>. Signature selection follows
the applicable profile or server policy; a particular signature label is not
required. The server <bcp14>MAY</bcp14> accept the signature if its policy permits unsolicited
authentication and all checks in <xref target="validating-request"/> succeed. Otherwise, it
can require a server-provided nonce as described below.</t>
        <t>Servers that accept both kinds of nonce <bcp14>MUST</bcp14> distinguish challenge responses
from unsolicited signatures, for example through a recognizable server nonce
format or retained challenge metadata. An expired or consumed server nonce
<bcp14>MUST NOT</bcp14> be accepted as a client-generated nonce. If the server cannot
safely make this distinction, it <bcp14>MUST</bcp14> require a fresh challenge. A policy that
requires a server-provided nonce <bcp14>MUST NOT</bcp14> fall back to unsolicited authentication.</t>
      </section>
      <section anchor="issuing-challenge">
        <name>Issuing a Challenge</name>
        <t>For an otherwise acceptable tunnel establishment request without a signature,
or with an unsolicited signature when policy requires a server-provided nonce,
the server <bcp14>MUST</bcp14> return 403 (Forbidden) with an Accept-Signature field. The field
<bcp14>MUST</bcp14> contain one dictionary member specifying the signature required by this
mechanism, using the syntax in <xref section="5.1" sectionFormat="of" target="HTTP-SIG"/>. It <bcp14>MUST</bcp14> specify the
coverage required by <xref target="signature-requirements"/>, a fresh <tt>nonce</tt> value, and the
<tt>created</tt> and <tt>expires</tt> parameters in their Boolean true form. The response
<bcp14>MUST</bcp14> include <tt>Cache-Control: no-store</tt>. For standard CONNECT, the challenge
<bcp14>MUST</bcp14> also include <tt>proxy-authority</tt> as specified in <xref target="proxy-authority"/>.</t>
        <t>The nonce <bcp14>MUST</bcp14> be unpredictable and unique among challenges that the server
can still accept. The server <bcp14>MUST</bcp14> assign each challenge a bounded lifetime and
<bcp14>SHOULD</bcp14> keep that lifetime short, on the order of minutes.</t>
        <t>The server <bcp14>MUST</bcp14> associate the nonce with the requested signature label,
coverage, parameters, expiration, and the request's method, target, and tunnel
protocol. This association <bcp14>MUST</bcp14> be protected against modification by the
client. A challenge <bcp14>MUST NOT</bcp14> be bound to the connection on which it was issued.</t>
      </section>
      <section anchor="responding-challenge">
        <name>Responding to a Challenge</name>
        <t>Clients <bcp14>MUST</bcp14> support responding to Accept-Signature challenges.</t>
        <t>On receiving a 403 response with Accept-Signature, the client <bcp14>MUST</bcp14> check that
the challenge satisfies <xref target="signature-requirements"/> and is compatible with its
signing policy. If it cannot satisfy the challenge, it <bcp14>MUST</bcp14> fail the
establishment attempt rather than retry with weaker coverage or parameters.</t>
        <t>The client retries the establishment request with the same method, target, and
tunnel protocol. It <bcp14>MUST</bcp14> generate the requested signature following
<xref section="5.2" sectionFormat="of" target="HTTP-SIG"/>, using the same signature label and exact set of
component identifiers, including their parameters, as the challenge. It <bcp14>MUST</bcp14>
include the supplied nonce and generate <tt>created</tt> and <tt>expires</tt> values as
specified in <xref target="signature-parameters"/>. The retry <bcp14>MAY</bcp14> use the same connection or
a different connection.</t>
        <t>The client <bcp14>MUST NOT</bcp14> reuse a signed request for another establishment attempt.
If a retry is needed after a signed request fails or its outcome is unknown,
the client <bcp14>MUST</bcp14> generate a fresh client nonce or obtain a fresh challenge, as
permitted by server policy. A client challenged to use a server nonce <bcp14>MUST</bcp14>
respond to that challenge or fail the attempt. Clients <bcp14>MUST</bcp14> limit automatic
retries to avoid an unbounded challenge-response loop.</t>
      </section>
      <section anchor="validating-request">
        <name>Validating and Accepting a Request</name>
        <t>Before accepting a signed request, the server <bcp14>MUST</bcp14>:</t>
        <ol spacing="normal" type="1"><li>
            <t>Select the signature under the applicable profile or policy. For a challenge
response, identify the issued challenge using the nonce, select the requested
signature label, and verify that the challenge is unexpired and applies to
the request's method, target, and tunnel protocol. For an unsolicited
signature, verify that server policy permits its use.</t>
          </li>
          <li>
            <t>Check the signature coverage and parameters against <xref target="signature-requirements"/>
and any issued challenge, and verify the signature according to
<xref section="3.2" sectionFormat="of" target="HTTP-SIG"/>. For standard CONNECT, this includes checking
<tt>proxy-authority</tt> against the proxy's configured identities.</t>
          </li>
          <li>
            <t>Check that the signature lifetime does not exceed the server's maximum and
that the current time falls within the signature validity period. The server
<bcp14>MAY</bcp14> allow a small, bounded tolerance for clock skew.</t>
          </li>
          <li>
            <t>Atomically check that the nonce is unused and record its consumption. For a
client-generated nonce, the replay record <bcp14>MUST</bcp14> be scoped to the verified
signing key and nonce value, independent of signature labels, key identifier
aliases, or request targets. For a server-provided nonce, the challenge <bcp14>MUST</bcp14>
be consumed at most once. If already consumed, authentication <bcp14>MUST</bcp14> fail.</t>
          </li>
        </ol>
        <t>Single-use enforcement <bcp14>MUST</bcp14> apply across all connections and server instances
that can accept the signature. Client nonce records <bcp14>MUST</bcp14> be retained through
signature expiration, including any clock skew tolerance. Server nonce
consumption <bcp14>MUST</bcp14> be recorded for the entire remaining challenge lifetime.
If single-use enforcement cannot be guaranteed, the server <bcp14>MUST NOT</bcp14> accept
the request. An invalid signature <bcp14>MUST NOT</bcp14> create a replay record or consume
a challenge. Once consumed, a nonce <bcp14>MUST NOT</bcp14> become usable again during its
acceptance window, including when authorization or subsequent tunnel
establishment fails.</t>
        <t>After authentication, the server applies its authorization policy. It <bcp14>MUST NOT</bcp14>
open the requested upstream connection, forward tunnel traffic, or send a
successful establishment response before authentication and authorization
succeed. Successful establishment uses the response defined by the applicable
tunnel protocol: a 2xx response for CONNECT or a 101 (Switching Protocols)
response for HTTP/1.1 Upgrade. Authentication applies only to this request.</t>
      </section>
      <section anchor="authentication-errors">
        <name>Error Handling</name>
        <t>Malformed authentication fields <bcp14>SHOULD</bcp14> result in 400 (Bad Request). For
well-formed requests, failed authentication, including an invalid signature,
a replayed client nonce, or an expired or consumed server nonce, <bcp14>MUST</bcp14> result
in 403 (Forbidden). The server <bcp14>MAY</bcp14> include a fresh Accept-Signature
challenge if another attempt could succeed, and <bcp14>MUST</bcp14> do so in the cases
specified in <xref target="issuing-challenge"/>.</t>
        <t>If authentication succeeds but authorization fails, the server <bcp14>MUST</bcp14> return 403
without an Accept-Signature challenge. A client receiving a 403 response without
a challenge <bcp14>MUST NOT</bcp14> automatically retry using this procedure. Other failures,
such as an unreachable tunnel destination, use the error handling of the
applicable tunnel protocol.</t>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>These examples show successful exchanges at 2026-10-06T00:00:00Z. All
request signatures use Ed25519 and expire 60 seconds later; the server
accepts signatures and any challenges during that interval. Keys and
nonce values are for illustration only and are not suitable for
deployment. Long lines are folded using <xref target="FOLDING"/>; folding is
not part of the messages.</t>
      <t>The client public key used in all three examples is:</t>
      <figure anchor="example-client-key">
        <name>Example client public key</name>
        <sourcecode type="json"><![CDATA[
{
  "kty": "OKP",
  "crv": "Ed25519",
  "x": "LJIz3J11mSpiRKfUwM8TReBzc4OEGvurSYNJ19K4AM8",
  "alg": "Ed25519",
  "kid": "client-key"
}
]]></sourcecode>
      </figure>
      <section anchor="example-standard-connect">
        <name>Standard CONNECT with WIMSE Credentials</name>
        <t>A workload connects to the proxy at <tt>https://proxy.example</tt> and requests
a TCP tunnel to <tt>service.example:443</tt>. The proxy uses WIMSE credentials
<xref target="WIMSE-HTTPSIG"/> and trusts the following issuer public key for the
<tt>example.com</tt> trust domain:</t>
        <figure anchor="example-issuer-key">
          <name>Example WIT issuer public key</name>
          <sourcecode type="json"><![CDATA[
{
  "kty": "OKP",
  "crv": "Ed25519",
  "x": "uJqIC9mMU6Dl3roQZqy6CIrseaodOv_hjPGhel1Q3mk",
  "alg": "Ed25519",
  "kid": "issuer-key"
}
]]></sourcecode>
        </figure>
        <t>The Workload Identity Token (WIT) <xref target="WIMSE-CREDS"/>
in the signed request identifies <tt>wimse://example.com/workload-a</tt>, is
issued by <tt>https://issuer.example</tt>, and binds the client public key above
in <tt>cnf.jwk</tt>. Its <tt>iat</tt> is 1791244740 and its <tt>exp</tt> is 1791248400. The
token's protected header is:</t>
        <figure anchor="example-wit-header">
          <name>WIT protected header</name>
          <sourcecode type="json"><![CDATA[
{"alg":"Ed25519","typ":"wit+jwt","kid":"issuer-key"}
]]></sourcecode>
        </figure>
        <t>Editorial note: this example anticipates changes to WIMSE omitting
<tt>@path</tt> and <tt>@query</tt> for standard CONNECT. It is not fully conformant to
draft-ietf-wimse-http-signature-07.</t>
        <t>The proxy permits unsolicited signatures. The client sends its WIT and
signature with a fresh client-generated nonce. The <tt>proxy-authority</tt>
value is <tt>proxy.example:443</tt>, derived from the configured proxy URI.
The <tt>wimse-aud</tt> value is the proxy identity configured for this WIMSE
deployment. Both identify the intended proxy and are checked
independently. The signing key and algorithm come from the WIT, so
<tt>keyid</tt> and <tt>alg</tt> are absent from Signature-Input. Response signing is
not requested.</t>
        <figure anchor="example-connect-signed">
          <name>Signed CONNECT request</name>
          <artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

CONNECT service.example:443 HTTP/1.1
Host: service.example:443
Workload-Identity-Token: eyJhbGciOiJFZDI1NTE5IiwidHlwIjoid2l0K2p3dCIsIm\
  tpZCI6Imlzc3Vlci1rZXkifQ.eyJpc3MiOiJodHRwczovL2lzc3Vlci5leGFtcGxlIiwi\
  c3ViIjoid2ltc2U6Ly9leGFtcGxlLmNvbS93b3JrbG9hZC1hIiwiaWF0IjoxNzkxMjQ0N\
  zQwLCJleHAiOjE3OTEyNDg0MDAsImNuZiI6eyJqd2siOnsia3R5IjoiT0tQIiwiY3J2Ij\
  oiRWQyNTUxOSIsIngiOiJMSkl6M0oxMW1TcGlSS2ZVd004VFJlQnpjNE9FR3Z1clNZTko\
  xOUs0QU04IiwiYWxnIjoiRWQyNTUxOSIsImtpZCI6ImNsaWVudC1rZXkifX19.9G8ShrC\
  Bs3m9kJDvRo54mRs-Cyczot3oPeX0u5qUNyQ5Q5b7A3I0G-24ZGOGZBmp97AAoCzdYvr6\
  g1A8gIK6Ag
Signature-Input: sig1=("@method" "@authority" \
  "workload-identity-token");created=1791244800;expires=1791244860;\
  nonce="sGcptixoRlVhKrE6YIc1oqzQP3vBoc64";\
  tag="wimse-workload-to-workload";proxy-authority="proxy.example:443";\
  wimse-aud="https://proxy.example"
Signature: sig1=:5qi1gPTvGrDF4B5R1OK5L+4VmD85WCIPlM+bHm7UUmAEehf4Wv/TRp\
  0a5KNeDKuQUQfwQ4n40519anF+8skaDQ==:
]]></artwork>
        </figure>
        <t>The proxy validates the WIT, audience, proxy authority, and request
signature, atomically records the client nonce under the verified
signing key, and authorizes the tunnel. It responds without an
Accept-Signature exchange:</t>
        <figure anchor="example-connect-success">
          <name>CONNECT success</name>
          <artwork><![CDATA[
HTTP/1.1 200 Connection Established
]]></artwork>
        </figure>
      </section>
      <section anchor="example-extended-connect">
        <name>Extended CONNECT for UDP Proxying</name>
        <t>This example uses CONNECT-UDP <xref target="CONNECT-UDP"/> over HTTP/2. The same
fields and signature apply to HTTP/3. Pseudo-header fields and header
fields are shown in decoded form; connection setup and protocol settings
negotiation are omitted. The proxy maps <tt>client-key</tt> to the client
public key in <xref target="example-client-key"/> through local configuration and
requires a server-provided nonce.</t>
        <t>The client requests a UDP tunnel to <tt>192.0.2.1:443</tt>:</t>
        <figure anchor="example-udp-initial">
          <name>Initial CONNECT-UDP request</name>
          <artwork><![CDATA[
:method: CONNECT
:protocol: connect-udp
:scheme: https
:authority: proxy.example
:path: /.well-known/masque/udp/192.0.2.1/443/
capsule-protocol: ?1
]]></artwork>
        </figure>
        <t>The proxy requests a signature:</t>
        <figure anchor="example-udp-challenge">
          <name>CONNECT-UDP challenge</name>
          <artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

:status: 403
cache-control: no-store
content-length: 0
accept-signature: sig1=("@method" "@authority" "@scheme" "@path" \
  "@query" "@protocol");nonce="xAiQNf5KcJLEmgyoVmuNckWgvuNdvmCq";\
  created;expires;keyid="client-key";alg="ed25519"
]]></artwork>
        </figure>
        <t>The client sends the signed request:</t>
        <figure anchor="example-udp-signed">
          <name>Signed CONNECT-UDP request</name>
          <artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

:method: CONNECT
:protocol: connect-udp
:scheme: https
:authority: proxy.example
:path: /.well-known/masque/udp/192.0.2.1/443/
capsule-protocol: ?1
signature-input: sig1=("@method" "@authority" "@scheme" "@path" \
  "@query" "@protocol");created=1791244800;expires=1791244860;\
  nonce="xAiQNf5KcJLEmgyoVmuNckWgvuNdvmCq";keyid="client-key";\
  alg="ed25519"
signature: sig1=:FbyVrcdlNx9SrAKNJBgDhoEHxrx22Lf/moVSW5F23kqv8hwbc9u1xc\
  xyh5qRopJlsPpCWgRFvonN/olXL4z5Cw==:
]]></artwork>
        </figure>
        <t>After validation and authorization, the proxy accepts the tunnel:</t>
        <figure anchor="example-udp-success">
          <name>CONNECT-UDP success</name>
          <artwork><![CDATA[
:status: 200
capsule-protocol: ?1
]]></artwork>
        </figure>
      </section>
      <section anchor="example-websocket">
        <name>HTTP/1.1 WebSocket Upgrade</name>
        <t>A client opens a WebSocket at <tt>ws://chat.example/socket</tt>. The server
maps <tt>client-key</tt> to the public key in <xref target="example-client-key"/>. The
handshake follows <xref target="WEBSOCKET"/> and additionally covers its key and
version fields. This example assumes a client capable of setting the
signature fields. The server requires a server-provided nonce even for
a valid unsolicited signature.</t>
        <t>The client initially sends an unsolicited signature with its own nonce:</t>
        <figure anchor="example-ws-initial">
          <name>Unsolicited signed WebSocket request</name>
          <artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

GET /socket HTTP/1.1
Host: chat.example
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dHVubmVsLWV4YW1wbGUtMQ==
Sec-WebSocket-Version: 13
Signature-Input: sig1=("@method" "@authority" "@scheme" "@path" \
  "@query" "upgrade" "sec-websocket-key" "sec-websocket-version");\
  created=1791244800;expires=1791244860;\
  nonce="tldju9XaHCa61VGB2yTC8vWw9dsm8oDs";keyid="client-key";\
  alg="ed25519"
Signature: sig1=:+TiZgHUrj8II+HLQAlEOfzR67zpxu1iop6i6oLlGlnWzehK0WEgTPn\
  juUHlI7baWRnjPWljilteYo/rUU5/BAg==:
]]></artwork>
        </figure>
        <t>The server requires a fresh server nonce and challenges the client:</t>
        <figure anchor="example-ws-challenge">
          <name>WebSocket challenge</name>
          <artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 403 Forbidden
Cache-Control: no-store
Content-Length: 0
Accept-Signature: sig1=("@method" "@authority" "@scheme" "@path" \
  "@query" "upgrade" "sec-websocket-key" "sec-websocket-version");\
  nonce="EAhASAIcKgZfGHxsn8qtTBT7Tlzlp0qg";created;expires;\
  keyid="client-key";alg="ed25519"
]]></artwork>
        </figure>
        <t>The client retries with the server-provided nonce and a new signature:</t>
        <figure anchor="example-ws-signed">
          <name>Signed WebSocket request</name>
          <artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

GET /socket HTTP/1.1
Host: chat.example
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dHVubmVsLWV4YW1wbGUtMg==
Sec-WebSocket-Version: 13
Signature-Input: sig1=("@method" "@authority" "@scheme" "@path" \
  "@query" "upgrade" "sec-websocket-key" "sec-websocket-version");\
  created=1791244800;expires=1791244860;\
  nonce="EAhASAIcKgZfGHxsn8qtTBT7Tlzlp0qg";keyid="client-key";\
  alg="ed25519"
Signature: sig1=:3ZOPO6A4SOYlAca2kDi+aoVKqrkFovGYRBaoTxD5BXkSmUZuz/79uW\
  4T8VAQmSc2RkdRsSdSG3okLyUM5IvfDQ==:
]]></artwork>
        </figure>
        <t>After validation and authorization, the server switches protocols:</t>
        <figure anchor="example-ws-success">
          <name>WebSocket success</name>
          <artwork><![CDATA[
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: P8RU/XYB7aRBEQ1oQfgq2shti/c=
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>The security considerations of <xref target="HTTP-SIG"/> apply. A valid signature proves
possession of the signing key; the server still needs a trusted association
between that key and a client identity and an authorization decision for the
requested tunnel. Components used in that decision need to be covered as
specified in <xref target="covered-components"/>. Uncovered fields can be modified without
invalidating the signature.</t>
      <t>Replay protection depends on bounded signature lifetimes and atomic single-use
enforcement across all server instances that accept a signature. Random client
nonces do not prevent replay without this state. Server-provided nonces also
bind signatures to fresh challenges, but expiring, self-contained challenges
still require single-use enforcement. Loss or eviction of replay state <bcp14>MUST
NOT</bcp14> allow previously accepted requests to be accepted again; affected requests
<bcp14>MUST</bcp14> be rejected until that protection can be guaranteed.</t>
      <t>Without TLS or equivalent channel protection, an attacker can capture a signed
establishment request and replay it on another connection, racing the client.
Atomic single-use enforcement accepts at most one copy, but cannot ensure that
the legitimate client's copy wins. With either client-generated or
server-provided nonces, the attacker can therefore obtain the tunnel if its
copy is accepted first.</t>
      <t>For standard CONNECT, <tt>@authority</tt> identifies the tunnel destination, not the
proxy. The <tt>proxy-authority</tt> parameter binds the signature to the intended
proxy, provided both parties check it against their configuration. Proxies
sharing an accepted identity and signing-key trust <bcp14>MUST</bcp14> coordinate replay
protection if they can accept the same signature. The parameter does not bind
a transport scheme or authenticate the proxy to the client, and does not
prevent live relay to the intended proxy. Additional audience requirements,
such as WIMSE's <tt>wimse-aud</tt>, continue to apply independently.</t>
      <t>This mechanism does not authenticate the server or protect tunnel traffic.
Without a protected transport, credentials and request details are visible,
and an active attacker can alter challenges or forge responses. An attacker
can also relay a server's challenge to a legitimate client and use the signed
response to establish a tunnel under the attacker's control. Fresh, single-use
nonces do not prevent this live relay or subsequent tunnel hijacking. TLS or
equivalent channel protection can address these risks without being a
prerequisite for this mechanism.</t>
      <t>Clients need to apply their signing policy to challenges, including restrictions
on keys and algorithms, rather than treating Accept-Signature as authority to
use arbitrary credentials. Servers need to enforce their own coverage and
algorithm requirements even if a challenge has been altered in transit.</t>
      <t>Challenge issuance, signature verification, and replay records can be used to
exhaust server resources. Servers <bcp14>SHOULD</bcp14> bound authentication state and
rate-limit authentication attempts. Resource limits <bcp14>MUST NOT</bcp14> cause requests
to be accepted without replay checks.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document requests registration of the following entry in the "HTTP
Signature Derived Component Names" registry established by
<xref section="6.4" sectionFormat="of" target="HTTP-SIG"/>, using the template in
<xref section="6.4.1" sectionFormat="of" target="HTTP-SIG"/>:</t>
      <ul spacing="normal">
        <li>
          <t>Name: <tt>@protocol</tt></t>
        </li>
        <li>
          <t>Description: The value of the <tt>:protocol</tt> pseudo-header field in an extended
CONNECT request</t>
        </li>
        <li>
          <t>Status: Active</t>
        </li>
        <li>
          <t>Target: Request</t>
        </li>
        <li>
          <t>Reference: <xref target="protocol-component"/> of this document</t>
        </li>
      </ul>
      <t>This document also requests registration of the following entry in the "HTTP
Signature Metadata Parameters" registry established by <xref section="6.3" sectionFormat="of" target="HTTP-SIG"/>,
using the template in <xref section="6.3.1" sectionFormat="of" target="HTTP-SIG"/>:</t>
      <ul spacing="normal">
        <li>
          <t>Name: <tt>proxy-authority</tt></t>
        </li>
        <li>
          <t>Description: The hostname or IP address and explicit port of the intended
proxy for a standard CONNECT request</t>
        </li>
        <li>
          <t>Reference: <xref target="proxy-authority"/> of this document</t>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="HTTP-SIG">
          <front>
            <title>HTTP Message Signatures</title>
            <author fullname="A. Backman" initials="A." role="editor" surname="Backman"/>
            <author fullname="J. Richer" initials="J." role="editor" surname="Richer"/>
            <author fullname="M. Sporny" initials="M." surname="Sporny"/>
            <date month="February" year="2024"/>
            <abstract>
              <t>This document describes a mechanism for creating, encoding, and verifying digital signatures or message authentication codes over components of an HTTP message. This mechanism supports use cases where the full HTTP message may not be known to the signer and where the message may be transformed (e.g., by intermediaries) before reaching the verifier. This document also describes a means for requesting that a signature be applied to a subsequent HTTP message in an ongoing HTTP exchange.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9421"/>
          <seriesInfo name="DOI" value="10.17487/RFC9421"/>
        </reference>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="HTTP2-EXTCONNECT">
          <front>
            <title>Bootstrapping WebSockets with HTTP/2</title>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <date month="September" year="2018"/>
            <abstract>
              <t>This document defines a mechanism for running the WebSocket Protocol (RFC 6455) over a single stream of an HTTP/2 connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8441"/>
          <seriesInfo name="DOI" value="10.17487/RFC8441"/>
        </reference>
        <reference anchor="HTTP3-EXTCONNECT">
          <front>
            <title>Bootstrapping WebSockets with HTTP/3</title>
            <author fullname="R. Hamilton" initials="R." surname="Hamilton"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The mechanism for running the WebSocket Protocol over a single stream of an HTTP/2 connection is equally applicable to HTTP/3, but the HTTP-version-specific details need to be specified. This document describes how the mechanism is adapted for HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9220"/>
          <seriesInfo name="DOI" value="10.17487/RFC9220"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="IDNA">
          <front>
            <title>Internationalized Domain Names for Applications (IDNA): Definitions and Document Framework</title>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <date month="August" year="2010"/>
            <abstract>
              <t>This document is one of a collection that, together, describe the protocol and usage context for a revision of Internationalized Domain Names for Applications (IDNA), superseding the earlier version. It describes the document collection and provides definitions and other material that are common to the set. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5890"/>
          <seriesInfo name="DOI" value="10.17487/RFC5890"/>
        </reference>
        <reference anchor="IPV6-TEXT">
          <front>
            <title>A Recommendation for IPv6 Address Text Representation</title>
            <author fullname="S. Kawamura" initials="S." surname="Kawamura"/>
            <author fullname="M. Kawashima" initials="M." surname="Kawashima"/>
            <date month="August" year="2010"/>
            <abstract>
              <t>As IPv6 deployment increases, there will be a dramatic increase in the need to use IPv6 addresses in text. While the IPv6 address architecture in Section 2.2 of RFC 4291 describes a flexible model for text representation of an IPv6 address, this flexibility has been causing problems for operators, system engineers, and users. This document defines a canonical textual representation format. It does not define a format for internal storage, such as within an application or database. It is expected that the canonical format will be followed by humans and systems when representing IPv6 addresses as text, but all implementations must accept and be able to handle any legitimate RFC 4291 format. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5952"/>
          <seriesInfo name="DOI" value="10.17487/RFC5952"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CONNECT-UDP">
          <front>
            <title>Proxying UDP in HTTP</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes how to proxy UDP in HTTP, similar to how the HTTP CONNECT method allows proxying TCP in HTTP. More specifically, this document defines a protocol that allows an HTTP client to create a tunnel for UDP communications through an HTTP server that acts as a proxy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9298"/>
          <seriesInfo name="DOI" value="10.17487/RFC9298"/>
        </reference>
        <reference anchor="WEBSOCKET">
          <front>
            <title>The WebSocket Protocol</title>
            <author fullname="I. Fette" initials="I." surname="Fette"/>
            <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
            <date month="December" year="2011"/>
            <abstract>
              <t>The WebSocket Protocol enables two-way communication between a client running untrusted code in a controlled environment to a remote host that has opted-in to communications from that code. The security model used for this is the origin-based security model commonly used by web browsers. The protocol consists of an opening handshake followed by basic message framing, layered over TCP. The goal of this technology is to provide a mechanism for browser-based applications that need two-way communication with servers that does not rely on opening multiple HTTP connections (e.g., using XMLHttpRequest or s and long polling). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6455"/>
          <seriesInfo name="DOI" value="10.17487/RFC6455"/>
        </reference>
        <reference anchor="WIMSE-HTTPSIG">
          <front>
            <title>WIMSE Workload-to-Workload Authentication with HTTP Signatures</title>
            <author fullname="Joseph A. Salowey" initials="J. A." surname="Salowey">
              <organization>Palo Alto Networks</organization>
            </author>
            <author fullname="Yaron Sheffer" initials="Y." surname="Sheffer">
              <organization>Independent</organization>
            </author>
            <date day="20" month="October" year="2026"/>
            <abstract>
              <t>   The WIMSE architecture defines authentication and authorization for
   software workloads in a variety of runtime environments, from the
   most basic ones to complex multi-service, multi-cloud, multi-tenant
   deployments.  This document defines one of the mechanisms to provide
   workload authentication, using HTTP Signatures.  While only
   applicable to HTTP traffic, the protocol provides end-to-end
   protection of requests (and optionally, responses), even when service
   traffic is not end-to-end encrypted, that is, when TLS proxies and
   load balancers are used.  Authentication is based on the Workload
   Identity Token (WIT).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-http-signature-08"/>
        </reference>
        <reference anchor="FOLDING">
          <front>
            <title>Handling Long Lines in Content of Internet-Drafts and RFCs</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="E. Auerswald" initials="E." surname="Auerswald"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <author fullname="Q. Wu" initials="Q." surname="Wu"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>This document defines two strategies for handling long lines in width-bounded text content. One strategy, called the "single backslash" strategy, is based on the historical use of a single backslash ('\') character to indicate where line-folding has occurred, with the continuation occurring with the first character that is not a space character (' ') on the next line. The second strategy, called the "double backslash" strategy, extends the first strategy by adding a second backslash character to identify where the continuation begins and is thereby able to handle cases not supported by the first strategy. Both strategies use a self-describing header enabling automated reconstitution of the original content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8792"/>
          <seriesInfo name="DOI" value="10.17487/RFC8792"/>
        </reference>
        <reference anchor="WIMSE-CREDS">
          <front>
            <title>WIMSE Workload Credentials</title>
            <author fullname="Brian Campbell" initials="B." surname="Campbell">
              <organization>Ping Identity</organization>
            </author>
            <author fullname="Joseph A. Salowey" initials="J. A." surname="Salowey">
              <organization>CyberArk</organization>
            </author>
            <author fullname="Arndt Schwenkschuster" initials="A." surname="Schwenkschuster">
              <organization>Defakto Security</organization>
            </author>
            <author fullname="Yaron Sheffer" initials="Y." surname="Sheffer">
              <organization>Intuit</organization>
            </author>
            <author fullname="Yaroslav Rosomakho" initials="Y." surname="Rosomakho">
              <organization>Zscaler</organization>
            </author>
            <date day="2" month="July" year="2026"/>
            <abstract>
              <t>   The WIMSE architecture defines authentication and authorization for
   software workloads in a variety of runtime environments, from the
   most basic ones up to complex multi-service, multi-cloud, multi-
   tenant deployments.

   This document defines the credentials that workloads use to represent
   their identity.  They can be used in various protocols to
   authenticate workloads to each other.  To use these credentials,
   workloads must provide proof of possession of the associated private
   key material, which is covered in other documents.  This document
   focuses on the credentials alone, independent of the proof-of-
   possession mechanism.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-workload-creds-02"/>
        </reference>
      </references>
    </references>
    <?line 693?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
/0kz998kkab/OyXStynqz0mktY+nZ6eb/fXh6Yew77mrt/vBr278/t3n5PZ1
fHf44WLXjS8f9jd2f78dzq8+Zl9WXm5n1zjx+uXW+/75fOitXtyOL+RwPDxc
i2+PllfHG4O7SX0g5l7Wm2W1Quh7jTIlkCTVlvjS+N2yHOjAEpSaCpQ/R4Es
cnrO2dbF1crvH3Zfuhe7B+fd+Hwy/bwqZ2mw4r2qPX/R2stPbtl62N5T/ZYL
RmawiTt779T5R31jxLR60Su+CJZPsdcGRj2w1KFczIVs70uxiPHWvn3114o/
7RQATbd9IirKcDk5SVcCzb0WMfLTe58qoMDMNOH/cnM53TGiWNSBt/ClbhKP
Nlu1pZzVq1JnzWklM1T/8InVoK1a0l/T5BLM1atIj1BRH9VOhS/kqO45WAmi
Snfybi62AXhR+RUKzo5QAz5dgFotlVUVDxQutMr5hF3OZ5U8lkscCxdRXbu4
8QLmjec6hqSaBo1j7oiQoF2b6hI+HUGkxBD6M6ZmsaQgJN1FE5j7tGs2AOyl
6n/Jv9xC8g3ORMXjk5a6TWiXQAOKiLT0LdD6gkYszJB0b8G/CzzdWVftnjbM
pahUmUOlv3jCIM5kuMxvsJooDpNJfrMViw53HHcy4TSnqQ/IyzM/8TcZEHHI
ILfwrMglL7UEarhWIFU/pmDdy8eArC7W0TWByBFpiv0suMsguDIctlQWW6WV
Mee2rR8/CbDg1pRq2fWGietpclW3yUS/TG1OkdpUw2VTyIsstVgySlVpKf6I
WeLn17FCfwpW5zz/tSEqIF8gbUXYgRHtDt3VuJwsjbHzbh21NfWdjhwyOAMX
P6qLJ7lDrm6RC1oWb92ZxrtBQnWCf6LTaU1RFrVq0s1ynkjxWi0U8joBq/9N
XEiv8lSUW+DT04VyumOvC/ep6UReox8kxQhvm+Lr9BM5MzdRhYbm/AXhqyQ8
l2pQkYm66EvXDRB/TFHCInDur7usVFIXLnupiLY5uLkCgBAQqDTUr9mp7iNO
sR2ybwVbCuHvyu+OsOgKsdNP4iPtl8CpYnWO1SpL528KvRLyUjzKhf8k7Xx6
k64+B1FG2OL0QTHfrbIVNT+kUjmVEtrc3CqlSzSlnz+5NjfE82oLA7Bm5Wdz
TD9xrFEPOU1xB3pwFGI1qVKxHv66W5F73BAxYzlveHcqTuymBFT+rQcJ0/WR
Ia2jJD9JqyaSLpFW+F/31LRit3nVLwzJf8DM/ASHdalJrc+3UNAVbDuvUcM0
bRVZr9NIiVnUUfu7M7Pgk0vXYdpKQotnJTQDTzXCSrnDbCBv89zbyOcfBYFN
EIlJcLfzWgtDI1YPW/NDbbpZSpAY60t3PYgLCjWvIoZtgDvHFx8E7O5WlULm
5RayWbh7ilXoZLRUEoSuzJOZWExD1+/AGQfiS5Y23WmLIN+51UkP9o4hrMLP
6+WlH4UGJbpht11VO3Oxfa+v6FNZd0j9AYrtPevqmMxcvouWXwayftCtaWtE
nXZV2pmsRjig/zBzUeqZUIf5wTt9PlUCzlery5XJZGtQPg0+tMzFwkK1OtdJ
SypVocn5AqLVop0bCRk7o2SPaKJSB+EeJ1zTO+if9KvuQeBG7tfyT9QZaycB
1sxLYSelgkR4NVnqqm36adDcYazpB3yCDcsaes5lzsZUM2ddE94st3O1rwkj
gLAauNjiDYaUuz9Qo7QT+mVMq6kqPNunziwL9tZQ8TzVHLiu8yvV3OZdZMGx
LfeR/QtWqlJYv09iFBuH0f2onr4HAE8udBvcHvdcKLdJ/qp/e8sgpYwjJVr/
dUQd606GecPYJ5Hk2BAvNdVrilokFYc8h6RKsVsNqp5oMKiKxvNOghoGxk5y
lH3AP9VY6aSVPImZYjeMGrTQD3FixxhqB+VhRi/0x9T5TII3zz/i649fNSaA
Mg6une6fAsvqN8ED/L9gmFHf7XgAAA==

-->

</rfc>
