Internet DRAFT - draft-nygren-service-bindings

draft-nygren-service-bindings







Network Working Group                                          E. Nygren
Internet-Draft                                       Akamai Technologies
Intended status: Standards Track                            July 3, 2014
Expires: January 4, 2015


                  Service Binding DNS Records (DNS B)
                    draft-nygren-service-bindings-00

Abstract

   This document describes a DNS "B" RR which binds together information
   needed to establish connection to a service across multiple protocol
   layers, including the location of the server, the application-level
   protocol, and security bootstrap information.

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 http://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 January 4, 2015.

Copyright Notice

   Copyright (c) 2014 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
   (http://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 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.




Nygren                   Expires January 4, 2015                [Page 1]

Internet-Draft              Service Bindings                   July 2014


Table of Contents

   1.  Overview and rationale  . . . . . . . . . . . . . . . . . . .   2
     1.1.  Relationship to SRV RR type . . . . . . . . . . . . . . .   3
     1.2.  Introductory example  . . . . . . . . . . . . . . . . . .   3
   2.  Notational Conventions  . . . . . . . . . . . . . . . . . . .   4
   3.  Applicability Statement . . . . . . . . . . . . . . . . . . .   4
   4.  The Service Binding Record  . . . . . . . . . . . . . . . . .   5
     4.1.  B record RDATA encoding . . . . . . . . . . . . . . . . .   6
     4.2.  Service Binding Parameters  . . . . . . . . . . . . . . .   6
     4.3.  Standard Service Binding Parameters . . . . . . . . . . .   7
     4.4.  Optional Security Parameters  . . . . . . . . . . . . . .   8
     4.5.  Examples for other possible future Parameters . . . . . .   9
   5.  Selecting a Service Binding to Use  . . . . . . . . . . . . .  10
     5.1.  Handling B record responses . . . . . . . . . . . . . . .  10
     5.2.  Handling a lack of Service Binding records  . . . . . . .  10
   6.  Operational Examples  . . . . . . . . . . . . . . . . . . . .  11
     6.1.  Example: Moving a service and domain between operators  .  11
   7.  Open Areas for Discussion . . . . . . . . . . . . . . . . . .  12
   8.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  14
   9.  Security Considerations . . . . . . . . . . . . . . . . . . .  14
   10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . .  15
   11. References  . . . . . . . . . . . . . . . . . . . . . . . . .  15
     11.1.  Normative References . . . . . . . . . . . . . . . . . .  15
     11.2.  Informative References . . . . . . . . . . . . . . . . .  16
     11.3.  URIs . . . . . . . . . . . . . . . . . . . . . . . . . .  16
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .  16

1.  Overview and rationale

   As the protocols underlying services evolve to provide enhanced
   performance and security properties, clients have an increasing
   number of ways to contact any given service on a domain.  Contacting
   any given implementation instance of a service on a domain may
   require parameters across multiple protocol layers.  Different
   servers with different address records may even desire to implement
   the same service, especially in the case where older protocols lacked
   functionality required to make a smooth transition to newer
   protocols.

   The DNS B RR allows administrators to bind together the parameters
   needed to contact an instance of a service on a domain into a single
   record, or "service binding".  Multiple service bindings (multiple B
   records in an RRset) may provide a client with multiple ways to
   contact a given service, each with its own associated protocol(s) and
   related parameters.





Nygren                   Expires January 4, 2015                [Page 2]

Internet-Draft              Service Bindings                   July 2014


   Service bindings give clients a single DNS query [RFC1035] to resolve
   to obtain the B RRset for a service and domain.  Clients are able to
   then filter B RRs based on which protocols they support.  After
   selecting an B RR within this RRset, it should then be clear to the
   client whether other RRs need to be resolved prior to establishing
   communication with the service for a given protocol.

1.1.  Relationship to SRV RR type

   The B RR has close similarities of purpose to the SRV RR [RFC2782]
   but the B RR covers additional use-cases, including:

   o  Multiple application-level protocol implementations for a service

   o  Providing information for improving the security of a connection
      to a service (such as constraints on server certificates as well
      as handshake encryption keys)

   o  A single RRset name that can be queried that covers multiple
      lower-level protocol implementations for a service, such as when
      the same service is offered over multiple transport-layer
      protocols

   Similar to SRV, the B RR provides:

   o  Multiple address records for a given domain

   o  Priorities and weights to guide client selection

   o  The information needed to contact a given server (such as target
      hostname and port number) is bound together in a single record

1.2.  Introductory example

   If a web browser supporting B records wishes to fetch the URL
   https://www.example.com/, it would use the URI scheme ("https") as
   the the service and perform a lookup of:

   QNAME=_https._b.www.example.com, QCLASS=IN, QTYPE=B

   which might return an RRset with multiple resource records:










Nygren                   Expires January 4, 2015                [Page 3]

Internet-Draft              Service Bindings                   July 2014


   1 0 server-experimental.example.com.
        { "a": "h2", "t": "fictionfast", "tp": 9443 }

   3 0 server-primary.example.com.
        { "a": "h2", "t": "tcp", "tp": 443,
          "dane": "_443._tcp.server-primary-www-cert.example.com.",
          "tlshp": ["JgxJkCv0va0", "OBZVN8LPo+SB9eQ/"] }

   5 0 server-legacy.example.com.
        { "a": "http/1.1", "t": "tcp", "tp": 443,
          "dane": "_443._tcp.server-legacy-www-cert.example.com" }

   The first of these specifies using HTTP/2 over a fictional
   experimental secure transport protocol "fictionfast" over UDP port
   9443 from the server(s) with address record server-
   experimental.example.com.

   For clients not supporting this first item, HTTP/2
   [I-D.ietf-httpbis-http2] is available over TLS via TCP port 443 with
   certificate information available from a DANE record at
   "_443._tcp.server-primary-www-cert.example.com." and with TLS 1.3
   server handshake encryption parameters specified
   [I-D.rescorla-tls13-new-flows] from server(s) with the server-
   primary.example.com address record.

   For clients not supporting HTTP/2, a separate set of legacy servers
   is available for HTTP/1.1 which happens to have different certificate
   information available from a separate DANE record.

   *NOTE:* HTTPS is selected above for illustrative purposes only, and
   the HTTPS examples within this document should not be considered to
   be a definitive statement on the way for HTTPS to use B records.

2.  Notational Conventions

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in [RFC2119].

3.  Applicability Statement

   In general, it is expected that service binding records will be used
   by clients for applications where the relevant protocol specification
   indicates that clients should use the B record.  Such specification
   MUST define the symbolic name to be used in the Service field of the
   B record as described below.  Such specification MUST also define the
   Parameters available as well as their interpretation.  It also MUST




Nygren                   Expires January 4, 2015                [Page 4]

Internet-Draft              Service Bindings                   July 2014


   include security considerations.  Service binding records SHOULD NOT
   be used in the absence of such specification.

   The current version of this proposal includes specifics for how
   service bindings might be used in the context of HTTP/2 as well as
   TLS/1.3.  It is expected that those would be split out to a separate
   draft.

4.  The Service Binding Record

   The service binding record is of the format:

       _Service._b.Name TTL Class B Priority Weight Target Parameters

   where:

   Service  The symbolic name of the desired service.
      An underscore (_) is prepended to the service identifier to avoid
      collisions with DNS labels that occur in nature.  In many
      specifications it is expected that the Service is likely to be the
      same as the URI Scheme [RFC3986] (such as "http" or "https").

   _b The literal label "_b", intended to prevent collisions with DNS
      labels that occur in nature.

   Name  The domain this RR refers to.  Similar to SRV RR [RFC2782], the
      name one searches for is not this name.

   TTL  Standard DNS meaning [RFC1035].

   Class  Standard DNS meaning [RFC1035].  B records occur in the IN
      Class.

   Priority  The priority of this service binding.  After filtering
      service bindings for protocols that it supports, the client MUST
      attempt to contact the target host with the lowest-numbered
      priority it can reach; target hosts with the same priority SHOULD
      be tried in an order defined by the weight field.  The range is
      0-65535.  This is a 16 bit unsigned integer in network byte order.

   Weight  A server selection mechanism.  The weight field specifies a
      relative weight for entries with the same priority.  Larger
      weights SHOULD be given a proportionately higher probability of
      being selected.  The range of this number is 0-65535.  This is a
      16 bit unsigned integer in network byte order.  Domain
      administrators SHOULD use Weight 0 when there isn't any server
      selection to do, to make the RR easier to read for humans (less
      noisy).  In the presence of records containing weights greater



Nygren                   Expires January 4, 2015                [Page 5]

Internet-Draft              Service Bindings                   July 2014


      than 0, records with weight 0 should have a very small chance of
      being selected.  Clients SHOULD use the same weight selection
      algorithm as described in [RFC2782].

   Target  The domain name of the target host.  There MUST be one or
      more address records for this name (A RR's and/or AAAA RR's, or
      their most modern equivalent).  The name MAY be a CNAME alias (in
      the sense of [RFC1034]).  Implementors are encouraged, but not
      required, to return the address record(s) in the Additional Data
      section where possible and appropriate.  Unless and until
      permitted by future standards action, name compression is not to
      be used for this field.

      The special target value of "." indicates that this service is not
      available on this domain.  When used, the RRset MUST contain only
      this single record.  However, the record MAY have additional
      parameters (not yet defined), such as to specify that an alternate
      service should be used instead.

   Parameters  A collection of tag:value parameters specifying
      additional attributes for this service binding.  These are encoded
      in canonicalized CBOR [RFC7049] using the map data type.  Their
      textual representation is JSON, with binary byte arrays (such as
      literal keys) being base64 [RFC4648] encoded.  While some tags are
      defined here, additional tags may be defined in the specifications
      for the particular Service, as well as in specifications for
      additional protocols for implementing the Service.

4.1.  B record RDATA encoding

   _A more formal definition of the RDATA encoding and parameter textual
   representation syntax will be included in a future version of this
   draft once the core concepts have stabilized._

4.2.  Service Binding Parameters

   The parameters of the B record provide extensibility, allowing
   additional parameters to be specified depending on the particular
   service and protocol.

   Clients MUST use parameters to filter out service bindings specifying
   protocols or other parameters that they do not support, as specified
   by those parameters.

   Any parameters not specified in the initial specification of Service
   Binding usage for a given Service and protocol combination must be
   capable of being safely ignored by a client.




Nygren                   Expires January 4, 2015                [Page 6]

Internet-Draft              Service Bindings                   July 2014


   Some parameters MUST NOT be used by a client unless all relevant DNS
   records can be securely validated, such as with DNSSEC [RFC2535].
   This means that both the B record, any aliases leading to it, and any
   aliases and records leading from names specified in that parameter
   must be validated.  This is discussed in more length in Security
   Considerations [1].

   The specification for any given parameter SHOULD include:

   o  The tag used to identify the parameter

   o  The valid type and allowed value ranges for the parameter

   o  Whether the parameter is optional, and its default value if not

   o  What is the behavior if the DNS records can not be securely
      validated

   o  A description of how the client should use the parameter value

4.3.  Standard Service Binding Parameters

   Application Layer Protocol (tag "a")  A string representing the
      application layer protocol to be used when contacting the service.
      The valid values are service-dependent and should be the same
      values as used in ALPN [I-D.ietf-tls-applayerprotoneg].  For
      example, "h2" represents HTTP/2.

      If not specified, the default application-layer protocol for the
      given service is assumed.

      Clients MUST filter out service bindings utilizing application
      layer protocols that they do not support or recognize, as well as
      to use the proper application protocol when contacting servers
      using this binding.

   Transport Layer Protocol (tag "t")  A string representing the
      transport layer protocol to be used when contacting the service.
      The valid values are service dependent.  For example, "tcp" is
      likely to be used for many services.

      If not specified, the default transport-layer protocol for the
      given service is assumed.

      Clients MUST filter out service bindings utilizing transport layer
      protocols that they do not support or recognize, as well as to use
      the proper transport protocol when contacting servers using this
      binding.



Nygren                   Expires January 4, 2015                [Page 7]

Internet-Draft              Service Bindings                   July 2014


      _Note for discussion: it may make sense to omit this as a separate
      parameter and to have the Application Layer Protocol tag describe
      the entire stack, as in_ [I-D.ietf-httpbis-http2].

   Transport Layer Port (tag "tp")  An integer specifying the transport
      layer protocol port to be used when contacting the service.  The
      valid values are transport layer protocol dependent.

      If not specified, the default port for the given service and
      transport protocol is assumed.

4.4.  Optional Security Parameters

   The following parameters should likely move to separate
   specifications:

   DANE Certificate Controls  (tag "dane")  The value of this optional
      parameter is a DNS domain name pointing to a DANE TLSA [RFC6698]
      record associated with this service binding.

      This is particularly useful to bind TLSA records with specific
      servers, especially in the case where different servers have
      different certificates and perhaps even different operators.

      This is also useful to indicate that TLSA records are available
      (to reduce the need for speculative DNS lookups)

      If relevant DNS records can not be securely validated, clients
      MUST NOT loosen their security policies based on the TLSA record.
      However, clients MAY use the record to apply more restrictive
      policies even if the TLSA record could not be securely validated.

      In particular, if this parameter is present, a client SHOULD
      resolve the named TLSA record and use it to constrain the TLS
      server certificates that it will accept.  If the the relevant DNS
      records can not be securely validated, the TLSA record must only
      be used in addition to policies already enforced by the client.
      For example, if a "CA Constraint" certificate usage is specified,
      then this SHOULD limit the CA allowed to those specified in the
      TLSA record(s), but only if the CA is also in a trust chain that
      the client would already accept.

   TLS Handshake Parameters (tag "tlshp")  This optional parameter
      specifies ServerParameters for bootstrapping the TLS 1.3
      handshake, such as for encrypting the SNI and other parts of the
      ClientHello to make them less vulnerable to passive eavesdropping
      [I-D.rescorla-tls13-new-flows].




Nygren                   Expires January 4, 2015                [Page 8]

Internet-Draft              Service Bindings                   July 2014


      The value of this parameter is a list containing the binary values
      of the ServerParameter label followed by the ServerDHParams or
      ServerECDHParams.

      Clients MAY use these values even if the B record is not securely
      validated, as the intent of these parameters is to protect against
      passive eavesdropping.  Note that there may be limited value in
      handshake encryption unless DNS lookups are also encrypted.

4.5.  Examples for other possible future Parameters

   Some of these may also make sense to include in an future version of
   this draft:

   o  A parameter indicating that this DNS record must have been
      securely validated (such as with DNSSEC) or must otherwise be
      skipped.  This could allow for incremental deployment of DANE-
      managed certificates on some alternate set of servers even without
      universal DNSSEC adoption.

   o  Minimum and/or maximum version of a protocol supported.  (For
      example, this could be helpful to mitigate downgrade attacks.)

   o  Which extensions to a protocol are supported, allowing a client to
      opportunistically send them in its handshake.

   o  Hints as to whether a target address record has A and/or AAAA
      records.  (Careful consideration would need to be given to how
      this played with DNS64 as well as other transition technologies.)
      A reasonable compromise would be to have a hint indicating that a
      AAAA record was available and encouraged (such that clients might
      wait longer to get a response from nameservers) as well as a
      separate hint indicating that no A record is available.

   o  Selected Service Binding Indicator - a label that can be passed
      from client to server indicating which service binding it
      selected.  This may be helpful for both load reporting/feedback,
      and diagnostics.

   o  HSTS-style [RFC6797] indicator parameter.  This would be returned
      along with a target of "." on a less secure service to indicate
      that a more secure scheme/service should be used (such as "https"
      instead of "http").  This might be a boolean "sts=1" parameter,
      such as with a record like:

   _http._b.www.example.com 2D IN B 0 0 . { "sts": 1 }





Nygren                   Expires January 4, 2015                [Page 9]

Internet-Draft              Service Bindings                   July 2014


5.  Selecting a Service Binding to Use

   When a client supporting Service Bindings wishes to make a connection
   to a service, it SHOULD query the B records for the service.  It MAY
   choose to opportunistically also issue DNS queries for the address
   records (eg, A and AAAA) to reduce the latency for the case where no
   B record is available.

5.1.  Handling B record responses

   In the case where an RRset for B records is returned, the client
   should:

   1.  Filter out any B RR's from the RRset which it does not support.
       In particular, it MUST ignore any B records containing an
       Application Layer Protocol that is unknown, unsupported, or
       explicitly disallowed for the particular service.

   2.  The remaining B RR's should be sorted by priority.  An entry
       should be selected from the top priority (lowest numeric priority
       value).  It multiple records have the same priority, the
       weighting algorithm specified in [RFC2782] SHOULD be used to
       order them.

   3.  The client should attempt to contact the service using the
       parameters specified in the first selected record from the sorted
       list.

   4.  If a given attempt fails, the client MAY attempt to contact the
       service using the next record in the sorted list.  After some
       number of tries, the client MAY attempt to contact the service
       directly using the address records for the domain.

5.2.  Handling a lack of Service Binding records

   Not all clients will immediately implement Service Binding records
   for any given Service, and administrators may not always put Service
   Binding records in-place.  Just as importantly, experiments have
   shown that new DNS RR types take awhile before they are accessible to
   most clients.  (_Reference needed_)

   As such, client SHOULD directly lookup and use the address records
   for the domain name when no valid B record is unavailable.  In this
   case, the default application and transport layer protocols SHOULD be
   used.  Clients and Servers MAY then use inline upgrade or signaling
   mechanisms such as AltSvc [I-D.ietf-httpbis-alt-svc] or ALPN
   [I-D.ietf-tls-applayerprotoneg] for upgrading to newer protocols
   instantiating the Service.



Nygren                   Expires January 4, 2015               [Page 10]

Internet-Draft              Service Bindings                   July 2014


6.  Operational Examples

   A few illustrative examples follow to help to demonstrate how Service
   Binding records might be used.  More examples may be added in a
   future version of this draft.  (_In particular, an example should be
   added on how a client might resolve and use some specific B records.)

6.1.  Example: Moving a service and domain between operators

   A common deployment model is for different administrators (and
   sometimes entirely separate organizations) to operate the DNS for a
   domain than those that operate a service on the domain.  Either or
   both might even be out-sourced to separate entities such as a
   hosting/infrastructure provider or Content Delivery Network (CDN).
   It is critical that it be possible to move domains and services
   between operators and administrators without any disruption in
   service and with minimal coordination between the different
   organizations.  Service Binding records simplify this by allowing a
   delegation of name via a single DNS alias per service/domain.  All
   other properties (such as TLSA records) then follow directly along
   from this.

   For example with:

   _https._b.www.example.com.
            6H IN CNAME _https._b.www.example.com.example-1.net.

   _https._b.www.example.com.example-1.net.
            6H IN B 0 0 server-primary.example-1.net.
            { "a": "h2",
            "dane": "_443._tcp.server-primary-www-cert.example-1.net.",
            "tlshp": ["JgxJkCv0va0", "OBZVN8LPo+SB9eQ/"] }

   the administrator of the example.com DNS zone delegated control over
   www.example.com to an operator example-1.net.

   In the example above, it would be recommended for the example-1.net
   authorities to also return ADDITIONAL records for the "server-
   primary.example-1.net." address records and for the
   "_443._tcp.server-primary-www-cert.example-1.net."  TLSA record along
   with the B record response.

   The DANE TLSA records and TLS 1.3 handshake parameters and supported
   Application Layer Protocols are bound in this case to the "server-
   primary.example-1.net." target as they should be.  If the
   administrator of example.com were to move the "www.example.com."
   CNAME to point to a different operator (eg, "example-2.net"), that




Nygren                   Expires January 4, 2015               [Page 11]

Internet-Draft              Service Bindings                   July 2014


   second operator would provide their own service bindings which
   clients would use as a unit.

   The value of this Service Binding approach can be seen here when
   contrasting against having multiple independent records, each with
   their own TTL.  For example, if "www.example.com" is a CNAME to
   address records on example-1.net and "_443._tcp.www.example.com" is a
   CNAME to TLSA records on example-1.net, there is no way to change
   either of these CNAMEs to point to example-2.net without a situation
   where some clients are getting address records for example-1 and TLSA
   records for example-2, resulting in a possible denial-of-service.

7.  Open Areas for Discussion

   As this is a early version of this draft, a number of design choices
   are still open for active discussion:

   o  What encoding should be used for the Parameters?  Some options
      include:

      *  CBOR [RFC7049] - has the advantage of allowing new parameters
         to be added with self-describing types in a way that unknown
         new parameters can be ignored.

      *  Something ad-hoc, such as the tag-value system of DKIM
         [RFC6376] section 3.2.  This might be more compact, but also
         ends up being more ad-hoc.

      *  What textual representation should be used?  JSON, or something
         more in-line with other DNS record types?  The illustrative
         examples here use JSON for the time-being.

   o  Should there be a more formal general definition of the transport
      vs protocol layering and filtering?  It may be preferable to have
      a single identifier (ALPN) specifying the full stack.

      *  Which layers should be included?  More or less?

      *  How does TLS fit in?

      *  What more examples should we give?

   o  How much do we need to worry about packet size limitations, and
      what can we do about them?

      *  Should we do any form of name compression?

      *  Should we allow names (such as the DANE names) to be relative?



Nygren                   Expires January 4, 2015               [Page 12]

Internet-Draft              Service Bindings                   July 2014


   o  Should the TLS 1.3 handshake parameters move to their own record
      that is just named from the B record?

   o  What should be the name of the Resource Record type: is "B" a good
      name, or should something longer such as "SB" or "SBND" be used?

   o  What should be a standard part of the record and what should be
      parameters?  Everything could be a parameter, including priority
      and target and weight.  In the other direction, some existing
      parameters could be standard.  There may be a reasonable balance
      in the current proposal.

   o  There is an operational risk that the B record and normal address
      records (A and AAAA) could diverge over time due to administrative
      management skew.  For a CDN or hosting provider, taking advantage
      of B records also means that the content provider would need to
      CNAME over an additional records per-service.

   o  We may want to give examples of additional use-cases where this is
      helpful:

      1.  Apex zone domain names - can be used instead of a CNAME to
          delegate over to a CDN or hosting provider

      2.  Dealing with the SNI challenge for TLS: specify that clients
          using a Service Binding MUST send TLS SNI.  This would allow
          the use of a larger set of SNI-only servers for the B record
          targets than for the normal address records on the domain,

   o  Should there be a parameter to indication which service binding
      was used when making a connection?  In particular, a parameter
      which is a label or string that gets passed from the client to the
      server (such as a response header or as "Indicated Service")?

   o  Why a separate domain name (eg, "_http._b.www.example.com") rather
      than just a record on "www.example.com" (as in the DANISH
      proposal)?

      *  The reason is that you _do_ want a separate name-per-service,
         as otherwise the RRset will get too big if you have multiple
         names.

      *  Is the "_b" actually needed?  Or could this just be
         "_http.www.example.com" ?

   o  Which of the additional parameters above should we include in
      subsequent versions of this draft?




Nygren                   Expires January 4, 2015               [Page 13]

Internet-Draft              Service Bindings                   July 2014


8.  IANA Considerations

   The IANA will need to assign an RR type value to the B RR.

   The IANA will also need to maintain a registry of Parameters allowed
   B RRs.  (Details on this will need to be expanded in a future version
   of this draft.)

9.  Security Considerations

   Service Bindings have many of the same security issues as SRV records
   or most other DNS record types (such as A and AAAA address records).
   In particular, if the client is not securely validating DNS
   resolutions then a man-in-the-middle attacker could trick a client
   into contacting an attacker selected server and port and protocol.
   Similar attacks could also force a client to downgrade to a less
   secure protocol or to fall back to using address records.

   Clients MAY chose to bound the TTLs of B RRsets to a reasonable value
   and/or forget B RRsets on network changes to limit the damage that
   can be done by such a man-in-the-middle.

   For each service binding parameter type, specific attention must be
   paid to the security considerations relevant to it.  In particular:

   Application Layer Protocol  Care must be taken to disallow and filter
      out any invalid ALPN and Service combinations.  For example,
      clients MUST NOT allow ALPN "h2c" in combination with Service
      "https".

   DANE Certificate Controls  DANE TLSA records can be used to either
      restrict the set of allowed server certificates to a subset of
      those that a client would normally allow.  They can also be used
      to specify alternate certificates or trust roots to use for
      validation, relying on DNSSEC instead of the CA hierarchy.

      If a man-in-the-middle attacker can inject DNS responses (and the
      client is not securely validating the responses), then in the
      former case the attacker can only force a denial-of-service by
      causing the client to fail its validation.  Allowing this may be
      an acceptable trade-off to allow administrators to limit the scope
      of allowed certificates even for clients not performing
      validation.  As such, clients MAY use B and TLSA records to
      constrain allowed certificates to a strict subset of those that
      would otherwise be allowed.

      However, in the former case (where alternate certificates that are
      not ones a client would already trust can be specified), an



Nygren                   Expires January 4, 2015               [Page 14]

Internet-Draft              Service Bindings                   July 2014


      attacker or unscrupulous DNS resolver operator could utilize this
      to force a client to trust an adversary-controlled server.  As
      such, clients MUST NOT use DANE TLSA records unless the B RRset,
      the TLSA RRset, all aliases (eg, CNAMEs) pointing to them, and all
      authorities of these can be securely validated.

   (_Additional security considerations will need to be added to a
   future version of this draft._)

10.  Acknowledgments

   This draws heavily on many previous DNS RFCs such as [RFC2782].

   Discussions with Eric Rescorla, Daniel Kahn Gilmore, Mark Nottingham,
   and others on the TLS and HTTPBIS working groups have heavily
   influenced this proposal.  Suggestions from Richard Barnes and others
   have also been incorporated into this draft.

11.  References

11.1.  Normative References

   [I-D.ietf-tls-applayerprotoneg]
              Friedl, S., Popov, A., Langley, A., and S. Emile,
              "Transport Layer Security (TLS) Application Layer Protocol
              Negotiation Extension", draft-ietf-tls-applayerprotoneg-05
              (work in progress), March 2014.

   [RFC1034]  Mockapetris, P., "Domain names - concepts and facilities",
              STD 13, RFC 1034, November 1987.

   [RFC1035]  Mockapetris, P., "Domain names - implementation and
              specification", STD 13, RFC 1035, November 1987.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, March 1997.

   [RFC2535]  Eastlake, D., "Domain Name System Security Extensions",
              RFC 2535, March 1999.

   [RFC2782]  Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR for
              specifying the location of services (DNS SRV)", RFC 2782,
              February 2000.

   [RFC3986]  Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
              Resource Identifier (URI): Generic Syntax", STD 66, RFC
              3986, January 2005.




Nygren                   Expires January 4, 2015               [Page 15]

Internet-Draft              Service Bindings                   July 2014


   [RFC4648]  Josefsson, S., "The Base16, Base32, and Base64 Data
              Encodings", RFC 4648, October 2006.

   [RFC6698]  Hoffman, P. and J. Schlyter, "The DNS-Based Authentication
              of Named Entities (DANE) Transport Layer Security (TLS)
              Protocol: TLSA", RFC 6698, August 2012.

   [RFC6797]  Hodges, J., Jackson, C., and A. Barth, "HTTP Strict
              Transport Security (HSTS)", RFC 6797, November 2012.

   [RFC7049]  Bormann, C. and P. Hoffman, "Concise Binary Object
              Representation (CBOR)", RFC 7049, October 2013.

11.2.  Informative References

   [I-D.ietf-httpbis-alt-svc]
              Nottingham, M., McManus, P., and J. Reschke, "HTTP
              Alternative Services", draft-ietf-httpbis-alt-svc-01 (work
              in progress), April 2014.

   [I-D.ietf-httpbis-http2]
              Belshe, M., Peon, R., and M. Thomson, "Hypertext Transfer
              Protocol version 2", draft-ietf-httpbis-http2-13 (work in
              progress), June 2014.

   [I-D.rescorla-tls13-new-flows]
              Rescorla, E., "New Handshake Flows for TLS 1.3", draft-
              rescorla-tls13-new-flows-01 (work in progress), February
              2014.

   [RFC6376]  Crocker, D., Hansen, T., and M. Kucherawy, "DomainKeys
              Identified Mail (DKIM) Signatures", STD 76, RFC 6376,
              September 2011.

11.3.  URIs

   [1] #security

Author's Address

   Erik Nygren
   Akamai Technologies

   Email: erik+ietf@nygren.org
   URI:   http://erik.nygren.org/






Nygren                   Expires January 4, 2015               [Page 16]