HTTP Header Fields for Proxied SVCB Metadata
draft-proxied-svcb-headers-00

Document Type Active Internet-Draft (individual)
Author Tommy Pauly 
Last updated 2021-02-19
Stream (None)
Intended RFC status (None)
Formats pdf htmlized bibtex
Stream Stream state (No stream defined)
Consensus Boilerplate Unknown
RFC Editor Note (None)
IESG IESG state I-D Exists
Telechat date
Responsible AD (None)
Send notices to (None)
Network Working Group                                           T. Pauly
Internet-Draft                                               Apple, Inc.
Intended status: Standards Track                        19 February 2021
Expires: 23 August 2021

              HTTP Header Fields for Proxied SVCB Metadata
                     draft-proxied-svcb-headers-00

Abstract

   This document defines HTTP header fields for the passing Service
   Binding (SVCB) DNS metadata in HTTP responses.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/tfpauly/privacy-proxy.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at https://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on 23 August 2021.

Copyright Notice

   Copyright (c) 2021 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents (https://trustee.ietf.org/
   license-info) in effect on the date of publication of this document.
   Please review these documents carefully, as they describe your rights
   and restrictions with respect to this document.  Code Components

Pauly                    Expires 23 August 2021                 [Page 1]
Internet-Draft            Proxied SVCB Headers             February 2021

   extracted from this document must include Simplified BSD License text
   as described in Section 4.e of the Trust Legal Provisions and are
   provided without warranty as described in the Simplified BSD License.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
     1.1.  Requirements  . . . . . . . . . . . . . . . . . . . . . .   3
   2.  SVCB Request Header Field . . . . . . . . . . . . . . . . . .   3
   3.  SVCB Response Header Fields . . . . . . . . . . . . . . . . .   3
   4.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .   4
     4.1.  HTTP Headers  . . . . . . . . . . . . . . . . . . . . . .   4
   5.  Security Considerations . . . . . . . . . . . . . . . . . . .   5
   6.  Normative References  . . . . . . . . . . . . . . . . . . . .   5
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .   6

1.  Introduction

   CONNECT [RFC7231] and CONNECT-UDP [I-D.ietf-masque-connect-udp] are
   HTTP methods that clients may use to establish TCP or UDP flows to
   target servers.  Once proxy servers establish these flows, proxy
   servers treat allocated flows as opaque byte or datagram streams
   respectively.  Clients specify the target in authority-form
   (Section 5.3 of [RFC7230]), including the name or IP address of the
   server along with a port number.  When using a name instead of an IP
   address, the proxy server locally resolves the name to an IPv4 or
   IPv6 address with A or AAAA queries.  The client does not see these A
   or AAAA answers, as they are only relevant to the proxy in
   establishing a connection to the target.

   In some circumstances, some DNS metadata may be useful to clients.
   This is especially true for information contained in Service Binding
   (SVCB or HTTPS) records [I-D.ietf-dnsop-svcb-https].  These records
   can influence client behavior even when clients are not directly
   interacting with target IP addresses.  The records can be used to
   determine which application-level protocols are supported by an
   endpoint.  These records also can include a TLS Encrypted Client
   Hello [I-D.ietf-tls-esni] configuration, which can be used in
   protecting the end-to-end TLS handshake.

   This document specifies HTTP header fields that proxy servers may use
   to relay information retrieved from SVCB records from proxy servers
   to clients when using CONNECT or CONNECT-UDP.

Pauly                    Expires 23 August 2021                 [Page 2]
Internet-Draft            Proxied SVCB Headers             February 2021

1.1.  Requirements

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in
   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
   capitals, as shown here.

2.  SVCB Request Header Field

   Clients can request SVCB parameters with the Structured Header
   [RFC8941] "DNS-SVCB-Keys".  Its value MUST be an sf-list whose
   members are sf-integer items that MUST NOT contain parameters.  Its
   ABNF is:

   DNS-SVCB-Keys = sf-list

   Each list member corresponds to the numeric version of an
   SvcParamKey.

   For example, a client wanting to receive ALPN and ECH Config
   parameters would send a request for 1 (alpn) and 5 (echconfig):

   HEADERS
   :method = CONNECT
   :authority = svc.example.com:443
   dns-svcb-keys = 1, 5

3.  SVCB Response Header Fields

   A proxy server that receives a request with "DNS-SVCB-Keys" MAY
   respond with the Structured Header "DNS-SVCB-Params" response header
   fields.  The value of "DNS-SVCB-Params" MUST be an sf-list whose
   members are sf-string, each of which MUST contain parameters.

   DNS-SVCB-Params = sf-list

   Each list member is an sf-string that represents the TargetName of a
   single received SVCB or HTTPS record.  The Parameters associated with
   each list member correspond to the SvcParam key-value pairs for that
   record, the priority of the record, and the TTL of the record.

   The priority of the record MUST be a parameter with the key
   "priority", and a value as an sf-integer.  Alias forms, with priority
   0, MUST NOT be included.

   The TTL of the record MUST be a parameter with the key "ttl", and a
   value as an sf-integer.

Pauly                    Expires 23 August 2021                 [Page 3]
Internet-Draft            Proxied SVCB Headers             February 2021

   Each SvcParam that matches a key requested by the client is a
   parameters with a key that is the character "p" followed by the
   numeric version of the SvcParamKey.  For example, the ALPN
   SvcParamKey, with the numeric value 1, would have a parameter key
   "p1".  The value of each parameter MUST be an sf-binary item that
   contains the bytes of the SvcParamValue.

   Proxy servers MUST NOT include the "DNS-SVCB-Params" response header
   field if the corresponding request did not include a "DNS-SVCB-Keys".
   Servers MAY include specific SvcParamKey values that were not
   requested.  Specifically, servers SHOULD include the "mandatory"
   parameter if present, which would be presented as "p0", along with
   any parameters that are defined as mandatory for that record.

   As an example, assume that the server received the following
   "svc.example.com" SVCB records:

   svc.example.com. 3600 IN HTTPS 1 svc2.example.com. alpn=h2,h3 echconfig="123..."
   svc.example.com. 3600 IN HTTPS 2 . alpn=h2 echconfig="abc..."

   A successful CONNECT response would include the following headers, if
   the client requested both "alpn" and "echconfig":

HEADERS
:method = CONNECT
:status = 200
dns-svcb-params = "svc2.example.com.";priority=1;ttl=3600;p1=:aDIsaDM=:;p5=:MTIzLi4u:,
                  "svc.example.com.";priority=2;ttl=3600;p1=:aDI=:;p5=:YWJjLi4u:

4.  IANA Considerations

4.1.  HTTP Headers

   This document registers the "DNS-SVCB-Keys" and "DNS-SVCB-Params",
   headers in the "Permanent Message Header Field Names"
   <https://www.iana.org/assignments/message-headers>.

     +----------------------+----------+--------+---------------+
     | Header Field Name    | Protocol | Status |   Reference   |
     +----------------------+----------+--------+---------------+
     | DNS-SVCB-Keys        |   http   |  exp   | This document |
     +----------------------+----------+--------+---------------+
     | DNS-SVCB-Params      |   http   |  exp   | This document |
     +----------------------+----------+--------+---------------+

Pauly                    Expires 23 August 2021                 [Page 4]
Internet-Draft            Proxied SVCB Headers             February 2021

5.  Security Considerations

   The "DNS-SVCB-Params" header in Section 3 does not include any DNSSEC
   information.  Clients that depend on the contents of the SVCB record
   being DNSSEC-validated MUST NOT use this metadata without otherwise
   fetching the record and its corresponding RRSIG record and locally
   verifying its contents.

6.  Normative References

   [I-D.ietf-dnsop-svcb-https]
              Schwartz, B., Bishop, M., and E. Nygren, "Service binding
              and parameter specification via the DNS (DNS SVCB and
              HTTPS RRs)", Work in Progress, Internet-Draft, draft-ietf-
              dnsop-svcb-https-02, 2 November 2020,
              <http://www.ietf.org/internet-drafts/draft-ietf-dnsop-
              svcb-https-02.txt>.

   [I-D.ietf-masque-connect-udp]
              Schinazi, D., "The CONNECT-UDP HTTP Method", Work in
              Progress, Internet-Draft, draft-ietf-masque-connect-udp-
              03, 5 January 2021, <http://www.ietf.org/internet-drafts/
              draft-ietf-masque-connect-udp-03.txt>.

   [I-D.ietf-tls-esni]
              Rescorla, E., Oku, K., Sullivan, N., and C. Wood, "TLS
              Encrypted Client Hello", Work in Progress, Internet-Draft,
              draft-ietf-tls-esni-09, 16 December 2020,
              <http://www.ietf.org/internet-drafts/draft-ietf-tls-esni-
              09.txt>.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/info/rfc2119>.

   [RFC7230]  Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer
              Protocol (HTTP/1.1): Message Syntax and Routing",
              RFC 7230, DOI 10.17487/RFC7230, June 2014,
              <https://www.rfc-editor.org/info/rfc7230>.

   [RFC7231]  Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer
              Protocol (HTTP/1.1): Semantics and Content", RFC 7231,
              DOI 10.17487/RFC7231, June 2014,
              <https://www.rfc-editor.org/info/rfc7231>.

Pauly                    Expires 23 August 2021                 [Page 5]
Internet-Draft            Proxied SVCB Headers             February 2021

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/info/rfc8174>.

   [RFC8941]  Nottingham, M. and P-H. Kamp, "Structured Field Values for
              HTTP", RFC 8941, DOI 10.17487/RFC8941, February 2021,
              <https://www.rfc-editor.org/info/rfc8941>.

Author's Address

   Tommy Pauly
   Apple, Inc.

   Email: tpauly@apple.com

Pauly                    Expires 23 August 2021                 [Page 6]