<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<rfc docName="draft-nygren-service-bindings-00" category="std">

<?rfc toc="yes"?>
<?rfc tocindent="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>

  <front>
    <title abbrev="Service Bindings">Service Binding DNS Records (DNS B)</title>

    <author initials="E." surname="Nygren" fullname="Erik Nygren">
      <organization>Akamai Technologies</organization>
      <address>
        <email>erik+ietf@nygren.org</email>
        <uri>http://erik.nygren.org/</uri>
      </address>
    </author>

    <date year="2014"/>

    <area>General</area>
    
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>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.</t>



    </abstract>


  </front>

  <middle>


<section anchor="overview" title="Overview and rationale">

<t>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.</t>

<t>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.</t>

<t>Service bindings give clients a single DNS query <xref target="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.</t>

<section anchor="srv" title="Relationship to SRV RR type">

<t>The B RR has close similarities of purpose to the SRV RR <xref target="RFC2782"/> 
but the B RR covers additional use-cases, including:</t>

<t><list style="symbols">
  <t>Multiple application-level protocol implementations for a service</t>
  <t>Providing information for improving the security of a connection
to a service (such as constraints on server certificates
as well as handshake encryption keys)</t>
  <t>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</t>
</list></t>

<t>Similar to SRV, the B RR provides:</t>

<t><list style="symbols">
  <t>Multiple address records for a given domain</t>
  <t>Priorities and weights to guide client selection</t>
  <t>The information needed to contact a given server (such as target hostname 
and port number) is bound together in a single record</t>
</list></t>

</section>
<section anchor="intro-example" title="Introductory example">

<t>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:</t>

<figure><artwork><![CDATA[
QNAME=_https._b.www.example.com, QCLASS=IN, QTYPE=B
]]></artwork></figure>

<t>which might return an RRset with multiple resource records:</t>

<figure><artwork><![CDATA[
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" }
]]></artwork></figure>

<t>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.</t>

<t>For clients not supporting this first item, HTTP/2 <xref target="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 <xref target="I-D.rescorla-tls13-new-flows"/>
from server(s) with the server-primary.example.com address record.</t>

<t>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.</t>

<t><spanx style="strong">NOTE:</spanx>  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.</t>

</section>
</section>
<section anchor="notational-conventions" title="Notational Conventions">

<t>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
<xref target="RFC2119"/>.</t>

</section>
<section anchor="applicability-statement" title="Applicability Statement">

<t>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
include security considerations.  Service binding records SHOULD NOT
be used in the absence of such specification.</t>

<t>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.</t>

</section>
<section anchor="the-service-binding-record" title="The Service Binding Record">

<t>The service binding record is of the format:</t>

<figure><artwork><![CDATA[
    _Service._b.Name TTL Class B Priority Weight Target Parameters
]]></artwork></figure>

<t>where:</t>

<t><list style="hanging">
  <t hangText='Service'>
  The symbolic name of the desired service.<vspace />
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 <xref target="RFC3986"/> (such as “http”
or “https”).</t>
  <t hangText='_b'>
  The literal label “_b”, intended to prevent collisions with DNS labels
that occur in nature.  </t>
  <t hangText='Name'>
  The domain this RR refers to.  Similar to SRV RR <xref target="RFC2782"/>, the name one searches
for is not this name.</t>
  <t hangText='TTL'>
  Standard DNS meaning <xref target="RFC1035"/>.</t>
  <t hangText='Class'>
  Standard DNS meaning <xref target="RFC1035"/>.   B records occur in the IN Class.</t>
  <t hangText='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.</t>
  <t hangText='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
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 <xref target="RFC2782"/>.</t>
  <t hangText='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 <xref target="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.</t>
  <t>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.</t>
  <t hangText='Parameters'>
  A collection of tag:value parameters specifying additional attributes
for this service binding.  These are encoded in canonicalized CBOR <xref target="RFC7049"/> 
using the map data type.  Their textual representation is JSON, with binary byte arrays
(such as literal keys) being base64 <xref target="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.</t>
</list></t>

<section anchor="b-record-rdata-encoding" title="B record RDATA encoding">

<t><spanx style="emph">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.</spanx></t>

</section>
<section anchor="service-binding-parameters" title="Service Binding Parameters">

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

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

<t>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.</t>

<t>Some parameters MUST NOT be used by a client unless
all relevant DNS records can be securely validated, such 
as with DNSSEC <xref target="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 <eref target="#security">Security Considerations</eref>.</t>

<t>The specification for any given parameter SHOULD include:</t>

<t><list style="symbols">
  <t>The tag used to identify the parameter</t>
  <t>The valid type and allowed value ranges for the parameter</t>
  <t>Whether the parameter is optional, and its default value if not</t>
  <t>What is the behavior if the DNS records can not be securely validated</t>
  <t>A description of how the client should use the parameter value</t>
</list></t>

</section>
<section anchor="standard-service-binding-parameters" title="Standard Service Binding Parameters">

<t><list style="hanging">
  <t hangText='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
<xref target="I-D.ietf-tls-applayerprotoneg"/>.  For example, “h2” represents HTTP/2.</t>
  <t>If not specified, the default application-layer protocol for the 
given service is assumed.</t>
  <t>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.</t>
  <t hangText='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.</t>
  <t>If not specified, the default transport-layer protocol for the 
given service is assumed.</t>
  <t>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.</t>
  <t><spanx style="emph">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</spanx> <xref target="I-D.ietf-httpbis-http2"/>.</t>
  <t hangText='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.</t>
  <t>If not specified, the default port for the given service and
transport protocol is assumed.</t>
</list></t>

</section>
<section anchor="optional-security-parameters" title="Optional Security Parameters">

<t>The following parameters should likely move to separate specifications:</t>

<t><list style="hanging">
  <t hangText='DANE Certificate Controls  (tag “dane”)'>
  The value of this optional parameter is a DNS domain name pointing
to a DANE TLSA <xref target="RFC6698"/> record associated with this service binding.</t>
  <t>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.</t>
  <t>This is also useful to indicate that TLSA records are
available (to reduce the need for speculative DNS lookups)</t>
  <t>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.</t>
  <t>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.</t>
  <t hangText='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 <xref target="I-D.rescorla-tls13-new-flows"/>.</t>
  <t>The value of this parameter is a list containing the binary
values of the ServerParameter label followed by the
ServerDHParams or ServerECDHParams.</t>
  <t>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.</t>
</list></t>

</section>
<section anchor="examples-for-other-possible-future-parameters" title="Examples for other possible future Parameters">

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

<t><list style="symbols">
  <t>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.</t>
  <t>Minimum and/or maximum version of a protocol supported.
(For example, this could be helpful to mitigate downgrade attacks.)</t>
  <t>Which extensions to a protocol are supported, allowing a client to
opportunistically send them in its handshake.</t>
  <t>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.</t>
  <t>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.</t>
  <t>HSTS-style <xref target="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:</t>
</list></t>

<figure><artwork><![CDATA[
_http._b.www.example.com 2D IN B 0 0 . { "sts": 1 }
]]></artwork></figure>

</section>
</section>
<section anchor="selecting-a-service-binding-to-use" title="Selecting a Service Binding to Use">

<t>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.</t>

<section anchor="handling-b-record-responses" title="Handling B record responses">

<t>In the case where an RRset for B records is returned, the client
should:</t>

<t><list style="numbers">
  <t>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.</t>
  <t>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 <xref target="RFC2782"/> SHOULD be used to order them.</t>
  <t>The client should attempt to contact the service
using the parameters specified in the first selected record
from the sorted list.</t>
  <t>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.</t>
</list></t>

</section>
<section anchor="handling-a-lack-of-service-binding-records" title="Handling a lack of Service Binding records">

<t>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.  (<spanx style="emph">Reference needed</spanx>)</t>

<t>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 <xref target="I-D.ietf-httpbis-alt-svc"/> or ALPN
<xref target="I-D.ietf-tls-applayerprotoneg"/> for upgrading to newer protocols
instantiating the Service.</t>

</section>
</section>
<section anchor="operational-examples" title="Operational Examples">

<t>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.)</t>

<section anchor="example-moving-a-service-and-domain-between-operators" title="Example: Moving a service and domain between operators">

<t>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.</t>

<t>For example with:</t>

<figure><artwork><![CDATA[
_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/"] }
]]></artwork></figure>

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

<t>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.</t>

<t>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 second
operator would provide their own service bindings which clients
would use as a unit.</t>

<t>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.</t>

</section>
</section>
<section anchor="open" title="Open Areas for Discussion">

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

<t><list style="symbols">
  <t>What encoding should be used for the Parameters?  Some options include:
  <list style="symbols">
      <t>CBOR <xref target="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.</t>
      <t>Something ad-hoc, such as the tag-value system of DKIM <xref target="RFC6376"/> section 3.2.
This might be more compact, but also ends up being more ad-hoc.</t>
      <t>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.</t>
    </list></t>
  <t>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.
  <list style="symbols">
      <t>Which layers should be included?  More or less?</t>
      <t>How does TLS fit in?  </t>
      <t>What more examples should we give?</t>
    </list></t>
  <t>How much do we need to worry about packet size limitations, and what can we do about them?
  <list style="symbols">
      <t>Should we do any form of name compression?  </t>
      <t>Should we allow names (such as the DANE names) to be relative?</t>
    </list></t>
  <t>Should the TLS 1.3 handshake parameters move to their own record that is just named from the B record?</t>
  <t>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?</t>
  <t>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.</t>
  <t>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.</t>
  <t>We may want to give examples of additional use-cases
where this is helpful:
  <list style="numbers">
      <t>Apex zone domain names - can be used instead of a CNAME to delegate over to a CDN or hosting provider</t>
      <t>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,</t>
    </list></t>
  <t>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”)?</t>
  <t>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)?
  <list style="symbols">
      <t>The reason is that you <spanx style="emph">do</spanx> want a separate name-per-service,
as otherwise the RRset will get too big if you have multiple names.</t>
      <t>Is the “_b” actually needed?  Or could this just be “_http.www.example.com” ?</t>
    </list></t>
  <t>Which of the additional parameters above should we include in 
subsequent versions of this draft?</t>
</list></t>

</section>
<section anchor="iana" title="IANA Considerations">

<t>The IANA will need to assign an RR type value to the B RR.</t>

<t>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.)</t>

</section>
<section anchor="security" title="Security Considerations">

<t>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.</t>

<t>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.</t>

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

<t><list style="hanging">
  <t hangText='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”.</t>
  <t hangText='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.</t>
  <t>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.</t>
  <t>However, in the former case (where alternate certificates that are
not ones a client would already trust can be specified), an 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.</t>
</list></t>

<t>(<spanx style="emph">Additional security considerations will need to be added to a future version
of this draft.</spanx>)</t>

</section>
<section anchor="acknowledgments" title="Acknowledgments">

<t>This draws heavily on many previous DNS RFCs such as <xref target="RFC2782"/>.</t>

<t>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.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference anchor='RFC1034'>

<front>
<title abbrev='Domain Concepts and Facilities'>Domain names - concepts and facilities</title>
<author initials='P.' surname='Mockapetris' fullname='P. Mockapetris'>
<organization>Information Sciences Institute (ISI)</organization></author>
<date year='1987' day='1' month='November' /></front>

<seriesInfo name='STD' value='13' />
<seriesInfo name='RFC' value='1034' />
<format type='TXT' octets='129180' target='http://www.rfc-editor.org/rfc/rfc1034.txt' />
</reference>



<reference anchor='RFC1035'>

<front>
<title abbrev='Domain Implementation and Specification'>Domain names - implementation and specification</title>
<author initials='P.' surname='Mockapetris' fullname='P. Mockapetris'>
<organization>USC/ISI</organization>
<address>
<postal>
<street>4676 Admiralty Way</street>
<city>Marina del Rey</city>
<region>CA</region>
<code>90291</code>
<country>US</country></postal>
<phone>+1 213 822 1511</phone></address></author>
<date year='1987' day='1' month='November' /></front>

<seriesInfo name='STD' value='13' />
<seriesInfo name='RFC' value='1035' />
<format type='TXT' octets='125626' target='http://www.rfc-editor.org/rfc/rfc1035.txt' />
</reference>



<reference anchor='RFC2119'>

<front>
<title abbrev='RFC Key Words'>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='Scott Bradner'>
<organization>Harvard University</organization>
<address>
<postal>
<street>1350 Mass. Ave.</street>
<street>Cambridge</street>
<street>MA 02138</street></postal>
<phone>- +1 617 495 3864</phone>
<email>sob@harvard.edu</email></address></author>
<date year='1997' month='March' />
<area>General</area>
<keyword>keyword</keyword>
<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.  Authors who follow these guidelines
   should incorporate this phrase near the beginning of their document:

<list>
<t>
      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
      RFC 2119.
</t></list></t>
<t>
   Note that the force of these words is modified by the requirement
   level of the document in which they are used.
</t></abstract></front>

<seriesInfo name='BCP' value='14' />
<seriesInfo name='RFC' value='2119' />
<format type='TXT' octets='4723' target='http://www.rfc-editor.org/rfc/rfc2119.txt' />
<format type='HTML' octets='17970' target='http://xml.resource.org/public/rfc/html/rfc2119.html' />
<format type='XML' octets='5777' target='http://xml.resource.org/public/rfc/xml/rfc2119.xml' />
</reference>



<reference anchor='RFC2782'>

<front>
<title abbrev='DNS SRV RR'>A DNS RR for specifying the location of services (DNS SRV)</title>
<author initials='A.' surname='Gulbrandsen' fullname='Arnt Gulbrandsen'>
<organization>Troll Tech</organization>
<address>
<postal>
<street>Waldemar Thranes gate 98B</street>
<city>Oslo</city>
<region />
<code>N-0175</code>
<country>NO</country></postal>
<phone>+47 22 806390</phone>
<facsimile>+47 22 806380</facsimile>
<email>arnt@troll.no</email></address></author>
<author initials='P.' surname='Vixie' fullname='Paul Vixie'>
<organization>Internet Software Consortium</organization>
<address>
<postal>
<street>950 Charter Street</street>
<city>Redwood City</city>
<region>CA</region>
<code>94063</code>
<country>US</country></postal>
<phone>+1 650 779 7001</phone></address></author>
<author initials='L.' surname='Esibov' fullname='Levon Esibov'>
<organization>Microsoft Corporation</organization>
<address>
<postal>
<street>One Microsoft Way</street>
<city>Redmond</city>
<region>WA</region>
<code>98052</code>
<country>US</country></postal>
<email>levone@microsoft.com</email></address></author>
<date year='2000' month='February' />
<abstract>
<t>This document describes a DNS RR which specifies the location of the
   server(s) for a specific protocol and domain.</t></abstract></front>

<seriesInfo name='RFC' value='2782' />
<format type='TXT' octets='24013' target='http://www.rfc-editor.org/rfc/rfc2782.txt' />
</reference>



<reference anchor='RFC2535'>

<front>
<title abbrev='DNS Security Extensions'>Domain Name System Security Extensions</title>
<author initials='D.' surname='Eastlake' fullname='Donald E. Eastlake 3rd'>
<organization>IBM</organization>
<address>
<postal>
<street>65 Shindegan Hill Road</street>
<street>RR #1</street>
<city>Carmel</city>
<region>NY</region>
<code>10512</code>
<country>US</country></postal>
<phone>+1 914 784 7913</phone>
<facsimile>+1 914 784 3833</facsimile>
<email>dee3@us.ibm.com</email></address></author>
<date year='1999' month='March' />
<abstract>
<t>Extensions to the Domain Name System (DNS) are described that provide data integrity and authentication to security aware resolvers and applications through the use of cryptographic digital signatures. These digital signatures are included in secured zones as resource records.  Security can also be provided through non-security aware DNS servers in some cases.</t>
<t>The extensions provide for the storage of authenticated public keys in the DNS.  This storage of keys can support general public key distribution services as well as DNS security.  The stored keys enable security aware resolvers to learn the authenticating key of zones in addition to those for which they are initially configured. Keys associated with DNS names can be retrieved to support other protocols.  Provision is made for a variety of key types and algorithms.</t>
<t>In addition, the security extensions provide for the optional authentication of DNS protocol transactions and requests.</t>
<t>This document incorporates feedback on RFC 2065 from early implementers and potential users.</t></abstract></front>

<seriesInfo name='RFC' value='2535' />
<format type='TXT' octets='110958' target='http://www.rfc-editor.org/rfc/rfc2535.txt' />
</reference>



<reference anchor='RFC3986'>

<front>
<title abbrev='URI Generic Syntax'>Uniform Resource Identifier (URI): Generic Syntax</title>
<author initials='T.' surname='Berners-Lee' fullname='Tim Berners-Lee'>
<organization abbrev='W3C/MIT'>World Wide Web Consortium</organization>
<address>
<postal>
<street>Massachusetts Institute of Technology</street>
<street>77 Massachusetts Avenue</street>
<city>Cambridge</city>
<region>MA</region>
<code>02139</code>
<country>USA</country></postal>
<phone>+1-617-253-5702</phone>
<facsimile>+1-617-258-5999</facsimile>
<email>timbl@w3.org</email>
<uri>http://www.w3.org/People/Berners-Lee/</uri></address></author>
<author initials='R.' surname='Fielding' fullname='Roy T. Fielding'>
<organization abbrev='Day Software'>Day Software</organization>
<address>
<postal>
<street>5251 California Ave., Suite 110</street>
<city>Irvine</city>
<region>CA</region>
<code>92617</code>
<country>USA</country></postal>
<phone>+1-949-679-2960</phone>
<facsimile>+1-949-679-2972</facsimile>
<email>fielding@gbiv.com</email>
<uri>http://roy.gbiv.com/</uri></address></author>
<author initials='L.' surname='Masinter' fullname='Larry Masinter'>
<organization abbrev='Adobe Systems'>Adobe Systems Incorporated</organization>
<address>
<postal>
<street>345 Park Ave</street>
<city>San Jose</city>
<region>CA</region>
<code>95110</code>
<country>USA</country></postal>
<phone>+1-408-536-3024</phone>
<email>LMM@acm.org</email>
<uri>http://larry.masinter.net/</uri></address></author>
<date year='2005' month='January' />
<area>Applications</area>
<keyword>uniform resource identifier</keyword>
<keyword>URI</keyword>
<keyword>URL</keyword>
<keyword>URN</keyword>
<keyword>WWW</keyword>
<keyword>resource</keyword>
<abstract>
<t>
A Uniform Resource Identifier (URI) is a compact sequence of characters
that identifies an abstract or physical resource.  This specification
defines the generic URI syntax and a process for resolving URI references
that might be in relative form, along with guidelines and security
considerations for the use of URIs on the Internet.
The URI syntax defines a grammar that is a superset of all valid URIs,
allowing an implementation to parse the common components of a URI
reference without knowing the scheme-specific requirements of every
possible identifier.  This specification does not define a generative
grammar for URIs; that task is performed by the individual
specifications of each URI scheme.
</t></abstract></front>

<seriesInfo name='STD' value='66' />
<seriesInfo name='RFC' value='3986' />
<format type='TXT' octets='141811' target='http://www.rfc-editor.org/rfc/rfc3986.txt' />
<format type='HTML' octets='214067' target='http://xml.resource.org/public/rfc/html/rfc3986.html' />
<format type='XML' octets='163534' target='http://xml.resource.org/public/rfc/xml/rfc3986.xml' />
</reference>



<reference anchor='RFC4648'>

<front>
<title>The Base16, Base32, and Base64 Data Encodings</title>
<author initials='S.' surname='Josefsson' fullname='S. Josefsson'>
<organization /></author>
<date year='2006' month='October' />
<abstract>
<t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes.  It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='4648' />
<format type='TXT' octets='35491' target='http://www.rfc-editor.org/rfc/rfc4648.txt' />
</reference>



<reference anchor='RFC6698'>

<front>
<title>The DNS-Based Authentication of Named Entities (DANE) Transport Layer Security (TLS) Protocol: TLSA</title>
<author initials='P.' surname='Hoffman' fullname='P. Hoffman'>
<organization /></author>
<author initials='J.' surname='Schlyter' fullname='J. Schlyter'>
<organization /></author>
<date year='2012' month='August' />
<abstract>
<t>Encrypted communication on the Internet often uses Transport Layer Security (TLS), which depends on third parties to certify the keys used.  This document improves on that situation by enabling the administrators of domain names to specify the keys used in that domain's TLS servers.  This requires matching improvements in TLS client software, but no change in TLS server software. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='6698' />
<format type='TXT' octets='84034' target='http://www.rfc-editor.org/rfc/rfc6698.txt' />
</reference>



<reference anchor='RFC6797'>

<front>
<title>HTTP Strict Transport Security (HSTS)</title>
<author initials='J.' surname='Hodges' fullname='J. Hodges'>
<organization /></author>
<author initials='C.' surname='Jackson' fullname='C. Jackson'>
<organization /></author>
<author initials='A.' surname='Barth' fullname='A. Barth'>
<organization /></author>
<date year='2012' month='November' />
<abstract>
<t>This specification defines a mechanism enabling web sites to declare themselves accessible only via secure connections and/or for users to be able to direct their user agent(s) to interact with given sites only over secure connections.  This overall policy is referred to as HTTP Strict Transport Security (HSTS).  The policy is declared by web sites via the Strict-Transport-Security HTTP response header field and/or by other means, such as user agent configuration, for example. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='6797' />
<format type='TXT' octets='103554' target='http://www.rfc-editor.org/rfc/rfc6797.txt' />
</reference>



<reference anchor='RFC7049'>

<front>
<title>Concise Binary Object Representation (CBOR)</title>
<author initials='C.' surname='Bormann' fullname='C. Bormann'>
<organization /></author>
<author initials='P.' surname='Hoffman' fullname='P. Hoffman'>
<organization /></author>
<date year='2013' month='October' />
<abstract>
<t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation.  These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t></abstract></front>

<seriesInfo name='RFC' value='7049' />
<format type='TXT' octets='134062' target='http://www.rfc-editor.org/rfc/rfc7049.txt' />
</reference>



<reference anchor='I-D.ietf-tls-applayerprotoneg'>
<front>
<title>Transport Layer Security (TLS) Application Layer Protocol Negotiation Extension</title>

<author initials='S' surname='Friedl' fullname='Stephan Friedl'>
    <organization />
</author>

<author initials='A' surname='Popov' fullname='Andrey Popov'>
    <organization />
</author>

<author initials='A' surname='Langley' fullname='Adam Langley'>
    <organization />
</author>

<author initials='S' surname='Emile' fullname='Stephan Emile'>
    <organization />
</author>

<date month='March' day='3' year='2014' />

<abstract><t>This document describes a Transport Layer Security (TLS) extension for application layer protocol negotiation within the TLS handshake. For instances in which the TLS connection is established over a well known TCP or UDP port not associated with the desired application layer protocol, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-tls-applayerprotoneg-05' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-tls-applayerprotoneg-05.txt' />
</reference>




    </references>

    <references title='Informative References'>





<reference anchor='RFC6376'>

<front>
<title>DomainKeys Identified Mail (DKIM) Signatures</title>
<author initials='D.' surname='Crocker' fullname='D. Crocker'>
<organization /></author>
<author initials='T.' surname='Hansen' fullname='T. Hansen'>
<organization /></author>
<author initials='M.' surname='Kucherawy' fullname='M. Kucherawy'>
<organization /></author>
<date year='2011' month='September' />
<abstract>
<t>DomainKeys Identified Mail (DKIM) permits a person, role, or organization that owns the signing domain to claim some responsibility for a message by associating the domain with the message. This can be an author's organization, an operational relay, or one of their agents. DKIM separates the question of the identity of the Signer of the message from the purported author of the message. Assertion of responsibility is validated through a cryptographic signature and by querying the Signer's domain directly to retrieve the appropriate public key. Message transit from author to recipient is through relays that typically make no substantive change to the message content and thus preserve the DKIM signature.&lt;/t>&lt;t> This memo obsoletes RFC 4871 and RFC 5672. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='STD' value='76' />
<seriesInfo name='RFC' value='6376' />
<format type='TXT' octets='176999' target='http://www.rfc-editor.org/rfc/rfc6376.txt' />
</reference>



<reference anchor='I-D.ietf-httpbis-http2'>
<front>
<title>Hypertext Transfer Protocol version 2</title>

<author initials='M' surname='Belshe' fullname='Mike Belshe'>
    <organization />
</author>

<author initials='R' surname='Peon' fullname='Roberto Peon'>
    <organization />
</author>

<author initials='M' surname='Thomson' fullname='Martin Thomson'>
    <organization />
</author>

<date month='June' day='17' year='2014' />

<abstract><t>This specification describes an optimized expression of the syntax of the Hypertext Transfer Protocol (HTTP).  HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent messages on the same connection.  It also introduces unsolicited push of representations from servers to clients.  This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax.  HTTP's existing semantics remain unchanged.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-httpbis-http2-13' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-httpbis-http2-13.txt' />
</reference>



<reference anchor='I-D.rescorla-tls13-new-flows'>
<front>
<title>New Handshake Flows for TLS 1.3</title>

<author initials='E' surname='Rescorla' fullname='Eric Rescorla'>
    <organization />
</author>

<date month='February' day='19' year='2014' />

<abstract><t>This document sketches some potential new handshake flows for TLS 1.3.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-rescorla-tls13-new-flows-01' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-rescorla-tls13-new-flows-01.txt' />
</reference>



<reference anchor='I-D.ietf-httpbis-alt-svc'>
<front>
<title>HTTP Alternative Services</title>

<author initials='M' surname='Nottingham' fullname='Mark Nottingham'>
    <organization />
</author>

<author initials='P' surname='McManus' fullname='Patrick McManus'>
    <organization />
</author>

<author initials='J' surname='Reschke' fullname='Julian Reschke'>
    <organization />
</author>

<date month='April' day='1' year='2014' />

<abstract><t>This document specifies "alternative services" for HTTP, which allow an origin's resources to be authoritatively available at a separate network location, possibly accessed with a different protocol configuration.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-httpbis-alt-svc-01' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-httpbis-alt-svc-01.txt' />
</reference>




    </references>



  </back>
</rfc>

