One document matched: draft-ietf-dane-protocol-05.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY rfc2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY rfc4025 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4025.xml">
<!ENTITY rfc4033 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4033.xml">
<!ENTITY rfc4034 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4034.xml">
<!ENTITY rfc4035 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4035.xml">
<!ENTITY rfc4255 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4255.xml">
<!ENTITY rfc5246 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5246.xml">
<!ENTITY rfc5280 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5280.xml">
]>

<!-- Possibly add a note to the security considerations about:
> You may want to run a commercial CA on port 443 to get good interop with
> deployed https clients, but you may want to use a trustworthy CA on port
> 4443 to get good security for some other services. Having the
> commercial CA be able to MITM the connection on 4443 sounds counter to
> what I perceive DANE is aiming to achieve.
-->

<!-- Possibly add:
Client treatment of any information included in the trust anchor is a
matter of local policy. This specification does not mandate that such
information be inspected or validated by the domain name
administrator.
-->

<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

<?rfc strict='yes'?>
<?rfc toc="yes" ?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes"?>
<?rfc strict="no" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>

<rfc ipr="trust200902"
    docName="draft-ietf-dane-protocol-05"
    category="std"
>


<front>
<title abbrev="DNS Cert Linkage for TLS">
Using Secure DNS to Associate Certificates with Domain Names For TLS</title>

<author initials='P.' surname="Hoffman" fullname='Paul Hoffman'>
<organization>VPN Consortium</organization>
<address>
<email>paul.hoffman@vpnc.org</email>
</address>
</author>
<author initials="J." surname="Schlyter" fullname="Jakob Schlyter">
<organization>Kirei AB</organization>
<address>
<email>jakob@kirei.se</email>
</address>
</author>

<date month="February" year="2011"/>

<abstract>

<t>TLS and DTLS use certificates for authenticating the server. Users want
their applications to verify that the certificate provided by the TLS server
is in fact associated with the domain name they expect. 
DNSSEC provides a mechanism for a zone operator to sign DNS information
directly.  This way, bindings of keys to domains are asserted not by external
entities, but by the entities that operate the DNS.
This document describes how to use secure DNS to associate
the TLS server's certificate with the the intended domain name.</t>

</abstract>

</front>

<middle>

<section title="Introduction">

<t>The first response from the server in TLS may contain a certificate. In
order for the TLS client to authenticate that it is talking to the expected
TLS server, the client must validate that this certificate is associated with
the domain name used by the client to get to the server. Currently, the client
must extract the domain name from the certificate, must trust a trust anchor
upon which the server's certificate is rooted, and must successfully validate
the certificate.</t>

<t>Some people want a different way to authenticate the association of the
server's certificate with the intended domain name without trusting the CA.
Given that the DNS administrator for a domain name is authorized to give
identifying information about the zone, it makes sense to allow that
administrator to also make an authoritative binding between the domain name
and a certificate that might be used by a host at that domain name. The
easiest way to do this is to use the DNS.</t>

<t>This document applies to both TLS <xref target='RFC5246'/> and DTLS <xref
target='4347bis'/>. In order to make the document more readable, it mostly
only talks about "TLS", but in all cases, it means "TLS or DTLS". This
document only relates to securely associating certificates for TLS and DTLS
with host names; other security protocols are handled in other documents. For
example, keys for IPsec are covered in <xref target='RFC4025'/> and keys for
SSH are covered in <xref target='RFC4255'/>.</t>

<section title="Certificate Associations">

<t>In this document, a certificate association is based on a cryptographic
hash of a certificate (sometimes called a "fingerprint") or on the certificate
itself. For a fingerprint, a hash is taken of the binary, DER-encoded
certificate, and that hash is the certificate association; the type of hash
function used can be chosen by the DNS administrator. When using the
certificate itself in the certificate association, the entire certificate in
the normal format is used. This document also only applies to PKIX <xref
target="RFC5280"/> certificates.</t>

<t>Certificate associations are made between a certificate or the hash of a
certificate and a domain name. Server software that is running TLS that is
found at that domain name would use a certificate that has a certificate
association given in the DNS, as described in this document. A DNS query can
return multiple certificate associations, such as in the case of different
server software on a single host using different certificates (even if they
are normally accessed with different host names), or in the case that a server
is changing from one certificate to another.</t>

</section>

<section title="Securing Certificate Associations">

<t>This document defines a secure method to associate the certificate that is
obtained from the TLS server with a domain name using DNS protected by DNSSEC.
Because the certificate association was retrieved based on a DNS query, the
domain name in the query is by definition associated with the certificate.</t>

<t>DNSSEC, which is defined in RFCs 4033, 4034, and 4035 (<xref
target='RFC4033'/>, <xref target='RFC4034'/>, and <xref target='RFC4035'/>),
uses cryptographic keys and digital signatures to provide authentication of
DNS data. Information retrieved from the DNS and that is validated using
DNSSEC is thereby proved to be the authoritative data. The DNSSEC signature
MUST be validated on all responses in order to assure the proof of origin of
the data.</t>

<t>This document only relates to securely getting the DNS information for the
certificate association using DNSSEC; other secure DNS mechanisms are out of
scope.</t>

</section>

<section title="Terminology">

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

<t>A note on terminology: Some people have said that this protocol is a form
of "certificate exclusion". This is true, but in a very unusual sense. That
is, a DNS reply that contains two of the certificate types defined here
inherently excludes every other possible certificate in the universe other
than those found with a pre-image attack against one of those two. The
certificate type defined here is better thought of as "enumeration" of a small
number of certificate associations, not "exclusion" of a near-infinite number
of other certificates.</t>

<t>Some of the terminology in this draft may not match with the
terminology used in RFC 5280. This will be fixed in future versions of this
draft, with help from the PKIX community. In specific, we need to say
(in a PKIX-appropriate way) that when we say "valid up to" and "chains to",
full RFC 5280 path processing including revocation status checking is
intended.</t>

</section>

</section>

<section title="Getting TLS Certificate Associations from the DNS">

<t>This document defines a new DNS resource record type, "TLSA". A query on a
prepared domain name for the TLSA RR can return one or more records of the type TLSA.
The TLSA RRType is TBD.</t>

<section title="Requested Domain Name">

<t>Domain names are prepared for requests in the following manner.

<list style="numbers">

<t>The decimal representation of the port number on which a TLS-based
service is assumed to exist is prepended with an underscore character
("_") to become the left-most label in the prepared domain name.</t>

<t>The protocol name of the transport on which a TLS-based service is assumed
to exist is prepended with an underscore character ("_") to become the second
left-most label in the prepared domain name. The transport names defined for
this protocol are "tcp", "udp" and "sctp".</t>

<t>The domain name is appended to the result of step 2 to complete
the prepared domain name.</t>

</list></t>

<t>For example, to request a TLSA resource record for an HTTP server
running TLS on port 443 at "www.example.com", you would use
"_443._tcp.www.example.com" in the request. To request a TLSA
resource record for an SMTP server running the STARTTLS protocol
on port 25 at "mail.example.com", you would use
"_25._tcp.mail.example.com".</t>

</section>

<section title="Format of the Resource Record">

<t>The format of the data in the resource record is a binary record with three
values, which MUST be in the order defined here:</t>

<t><list style='symbols'>

<t>A one-octet value, called "certificate type", specifying the provided
association that will be used to match the target certificate. This will be an
IANA registry in order to make it easier to add additional certificate types
in the future. The types defined in this document are:

<list style='empty'>
<t>1 -- An end-entity certificate in DER encoding</t>
<t>2 -- A certification authority's certificate in DER encoding</t>
</list></t>

<t>A one-octet value, called "reference type", specifying how the certificate
association is presented. This value is defined in a new IANA registry. The
types defined in this document are:

<list style='empty'>
<t>0 -- Full certificate</t>
<t>1 -- SHA-1 hash of the certificate</t>
<t>2 -- SHA-256 hash of the certificate</t>
<t>3 -- SHA-384 hash of the certificate</t>
</list>

Using the same hash algorithm as is used in the signature in the
certificate will make it more likely that the TLS client will understand this
TLSA data.</t>

<t>The "certificate for association". This is the bytes containing the
full certificate or the hash of the associated certificate (that is, the
certificate or the hash of the certificate itself, not of the TLS ASN.1Cert
object).</t>

</list></t>

<t>Certificate types 1 and 2 explicitly only apply to PKIX-formatted
certificates. If TLS allows other formats later, or if extensions to this
protocol are made that accept other formats for certificates, those
certificates will need certificate types.</t>

</section>

<section title="Making Certificate Associations">

<t>A TLS client conforming to this protocol MUST treat the certificate for
association in a TLSA resource record for a domain name as a trust anchor for
that domain name at the specific port number and transport name that was
queried. This trust anchor MUST only be used for the domain name of the
resource record. The trust anchor MUST NOT be loaded for longer than the TTL
on the TSLA record.</t>

<t>The TLS client determines whether or not the certificate offered by the TLS
server matches the trust anchor received in the TLSA resource record. If the
certificate from the TLS server matches, the TLS client accepts the
certificate association. Each certificate type has a different method for
determining matching.</t>

<t>Certificate type 1 (end-entity certificate) is matched against the first
certificate offered by the TLS server. The certificate for association is used
only for exact matching, not for chained validation. With reference type 0,
the certificate association is valid if the certificate in the TLSA data
matches to the first certificate offered by TLS. With reference types other
than 0, the certificate association is valid if the hash of the first
certificate offered by the TLS server matches the value from the TLSA
data.</t>

<t>Certificate type 2 (certification authority's certificate) can be used in
one of two ways. With reference type 0, the certificate in the TLSA resource
record is used in chaining from the end-entity given in TLS. The certificate
association is valid if the first certificate in the certificate bundle can be
validly chained to the trust anchor from the TLSA data. With reference types
other than 0, if the hash of any certificate past the first in the certificate
bundle from TLS matches the trust anchor from the TLSA data, and the chain in
the certificate bundle is valid up to that TLSA trust anchor, then the
certificate association is valid. Alternately, if the first certificate
offered chains to an existing trust anchor in the TLS client's trust anchor
repository, and the hash of that trust anchor matches the value from the TLSA
data, then the certificate association is valid.</t>

<t>[[ Need discussion of self-signed certificates being CA certificates.
Need to be sure that this discussion uses correct PKIX terminology
and is carefully explained. ]]</t>

</section>

<section title="Presentation Format">

<t>The RDATA of the presentation format of the TLSA resource record consists
of two numbers (certificate and hash type) followed by the bytes containing
the certificate or the hash of the associated certificate itself, presented in
hex. An example of a SHA-256 hash (type 2) of an end-entity certificate (type
1) would be:

<figure><artwork><![CDATA[
_443._tcp.www.example.com. IN TLSA (
   1 2 5c1502a6549c423be0a0aa9d9a16904de5ef0f5c98
       c735fcca79f09230aa7141 )
]]></artwork></figure></t>

<t>An example of an unhashed CA certificate (type 2) would be:

<figure><artwork><![CDATA[
_443._tcp.www.example.com. IN TLSA (
   2 0 308202c5308201ada00302010202090... )
]]></artwork></figure></t>

<!--
<t>The use of mnemonics instead of numbers is not allowed.</t>
-->

<t>Because the length of hashes and certificates can be quite long,
presentation format explicitly allows line breaks and white space in
the hex values; those characters are removed when converting to the
wire format.</t>

</section>

<section title="Wire Format">

<t>The wire format is:

<figure><artwork><![CDATA[
                     1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Cert type   |   Hash type   |                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               /
/                                                               /
/                    Certificate for association                /
/                                                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

</t>

<t>The wire format for the RDATA in the first example given above would be:

<figure><artwork><![CDATA[
_443._tcp.www.example.com. IN TYPE65534 \# 34 ( 01025c1502a6549c42
              3be0a0aa9d9a16904de5ef0f5c98c735fcca79f09230aa7141 )
]]></artwork></figure></t>

<t>The wire format for the RDATA in the second example given above would be:

<figure><artwork><![CDATA[
_443._tcp.www.example.com. IN TYPE65534 \# 715 0200308202c5308201a...
]]></artwork></figure></t>

<t>Note that in the preceding examples, "TYPE65534" is given as an
example. That RR Type is in the IANA "private use" range; the real
RR Type for TLSA will be issued by IANA, as described in the IANA
Considerations section below.</t>

</section>

</section>

<section title="Use of TLS Certificate Associations in TLS">

<t>In order to use one or more TLS certificate associations described in this
document obtained from the DNS, an application MUST assure that the
certificates were obtained using DNS protected by DNSSEC.
TLSA records must only be trusted if they were obtained from a
trusted source. This could be a localhost DNS resolver answer with
the AD bit set, an inline validating resolver library primed with the
proper trust anchors, or obtained from a remote nameserver to which
one has a secured channel of communication.</t>

<t>If a certificate association contains a hash type that is not understood by
the TLS client, that certificate association MUST be marked as unusable.</t>

<t>An application that requests TLS certificate associations using the method
described in this document obtains zero or more usable certificate
associations. If the application receives zero usable certificate
associations, it processes TLS in the normal fashion.</t>

<t>If a match between one of the certificate association(s) and the server's
end entity certificate in TLS is found, the TLS client continues the TLS
handshake. If no match between the usable certificate association(s) and the
server's end entity certificate in TLS is found, the TLS client MUST abort the
handshake with an "access_denied" error.</t>

</section>

<section title='IANA Considerations'>

<section title='TLSA RRtype'>

<t>This document uses a new DNS RRType, TLSA, whose value is TBD. A separate
request for the RRType will be submitted to the expert reviewer, and future
versions of this document will have that value instead of TBD.</t>

</section>

<section title='TLSA Certificate Types'>

<t>This document creates a new registry, "Certificate Types for TLSA
Resource Records". The registry policy is "RFC Required". The initial
entries in the registry are:

<figure><artwork><![CDATA[
Value        Short description                         Ref.
-------------------------------------------------------------
0            Reserved                                  [This]
1            End-entity certificate                    [This]
2            CA's certificate                          [This]
3-254        Unassigned
255          Private use
]]></artwork></figure></t>

<t>Applications to the registry can request specific values
that have yet to be assigned.</t>

</section>

<section title='TLSA Hash Types'>

<t>This document creates a new registry, "Hash Types for TLSA Resource
Records". The registry policy is "Specification Required". The initial entries
in the registry are:

<figure><artwork><![CDATA[
Value        Short description       Ref.
-----------------------------------------------------
0            No hash used            [This]
1            SHA-1                   NIST FIPS 180-2
2            SHA-256                 NIST FIPS 180-2
3            SHA-384                 NIST FIPS 180-2
4-254        Unassigned
255          Private use
]]></artwork></figure></t>

<t>Applications to the registry can request specific values
that have yet to be assigned.</t>

</section>

</section>

<section title='Security Considerations'>

<t>The security of the protocols described in this document relies on the
security of DNSSEC as used by the client requesting A/AAAA and TLSA records.</t>

<t>A DNS administrator who goes rogue and changes both the A/AAAA and TLSA records
for a domain name can cause the user to go to an unauthorized server that will
appear authorized, unless the client performs certificate validation and
rejects the certificate. That administrator could probably get a certificate
issued anyway, so this is not an additional threat.</t>

<t>The values in the TLSA data will be normally entered in the DNS through the
same system used to enter A/AAAA records, and other DNS information for the
host name. If the authentication for changes to the host information is weak,
an attacker can easily change any of this information. Given that the TLSA
data is not easily human-readable, an attacker might change those records and
A/AAAA records and not have the change be noticed if changes to a zone are
only monitored visually.</t>

<t>If the authentication mechanism for adding or changing TLSA data in a zone
is weaker than the authentication mechanism for changing the A/AAAA records,
a man-in-the-middle who can redirect traffic to their site may be able to
impersonate the attacked host in TLS if they can use the weaker authentication
mechanism. A better design for authenticating DNS would be to have the same
level of authentication used for all DNS additions and changes for a
particular host.</t>

<t>SSL proxies can sometimes act as a man-in-the-middle for TLS
clients. In these scenarios, the clients add a new trust anchor whose
private key is kept on the SSL proxy; the proxy intercepts TLS
requests, creates a new TLS session with the intended host, and sets
up a TLS session with the client using a certificate that chains to
the trust anchor installed in the client by the proxy. In such
environments, the TLSA protocol will prevent the SSL proxy from
functioning as expected because the TLS client will get a certificate
association from the DNS that will not match the certificate that the
SSL proxy uses with the client. The client, seeing the proxy's new
certificate for the supposed destination will not set up a TLS
session.</t>

</section>

<section title='Acknowledgements'>

<t>Many of the ideas in this document have been discussed over many years.
More recently, the ideas have been discussed by the authors and others in a
more focused fashion. In particular, some of the ideas here originated with
Paul Vixie, Dan Kaminsky, Jeff Hodges, Phill Hallam-Baker, Simon Josefsson,
Warren Kumari, Adam Langley, Ilari Liusvaara, Scott Schmit, and Ondrej Sury.</t>

</section>

</middle>

<back>

<references title="Normative References">

&rfc2119;
&rfc4033;
&rfc4034;
&rfc4035;
&rfc5246;
&rfc5280;

<reference anchor='4347bis'>
<front>
<title>Datagram Transport Layer Security version 1.2</title>
<author initials='E.' surname='Rescorla' fullname='Eric Rescorla'>
<organization /></author>
<author initials='N.' surname='Modadugu' fullname='Nagendra Modadugu'>
<organization /></author>
<date year='2010' month='July' />
</front>
<seriesInfo name='Internet-Draft' value='draft-ietf-tls-rfc4347-bis' />
</reference>

</references>

<references title="Informative References">

&rfc4025;
&rfc4255;

</references>

</back>

</rfc>


PAFTECH AB 2003-20262026-04-23 14:16:46