<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc compact="yes"?>
<?rfc iprnotified="no" ?>
<?rfc strict="yes"?>
<?rfc symrefs="yes"?>
<?rfc toc="yes"?>
<?rfc tocdepth="4"?>

<rfc category="std" docName="draft-saintandre-tls-server-id-check-03" ipr="trust200902">

  <front>
    <title abbrev="Server Identity">Representation and Verification of Application Server Identity in Certificates Used with Transport Layer Security (TLS)</title>

    <author initials="P." surname="Saint-Andre" fullname="Peter Saint-Andre" role="editor">
      <organization>Cisco</organization>
      <address>
        <email>psaintan@cisco.com</email>
      </address>
    </author>

    <author initials="J." surname="Hodges" fullname="Jeff Hodges" role="editor">
      <organization>PayPal</organization>
      <address>
        <email>Jeff.Hodges@PayPal.com</email>
      </address>
    </author>

    <date month="March" day="8" year="2010"/>

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

    <abstract>
      <t>Many application technologies enable a secure connection between two entities using certificates in the context of Transport Layer Security (TLS).  This document specifies procedures for representing and verifying the identity of application servers in such interactions.</t>
    </abstract>
  </front>

  <middle>

    <section title="Introduction" anchor="intro">
      <section title="Motivation" anchor="motivation">
        <t>When a client wishes to establish a secure communication channel with an application server (e.g., "the HTTP server for example.com"), at a minimum the client needs to verify the identity of the server in order to prevent certain passive and active attacks against the connection.  To establish secure connections, many application technologies use Transport Layer Security <xref target='TLS'/> with certificates issued by certification authorities that are part of the Internet X.509 Public Key Infrastructure (PKI) as described in <xref target="X509"/>; such application technologies include but are not limited to the following:</t>
        <t>
          <list style="symbols">
            <t>The Hypertext Transfer Protocol <xref target="HTTP"/>, for which see also <xref target="HTTP-TLS"/></t>
            <t>The Internet Message Access Protocol <xref target="IMAP"/> and the Post Office Protocol <xref target="POP3"/>, for which see also <xref target="USINGTLS"/></t>
            <t>The Lightweight Directory Access Protocol <xref target="LDAP"/>, for which see also <xref target="LDAP-AUTH"/> and its predecessor <xref target="LDAP-TLS"/></t>
            <t>The NETCONF Configuration Protocol <xref target="NETCONF"/>, for which see also <xref target="NETCONF-SSH"/> and <xref target="NETCONF-TLS"/></t>
            <t>The Network News Transfer Protocol <xref target="NNTP"/>, for which see also <xref target="NNTP-TLS"/></t>
            <t>The Session Initiation Protocol <xref target="SIP"/>, for which see also <xref target="SIP-CERTS"/></t>
            <t>The Simple Mail Transfer Protocol <xref target="SMTP"/>, for which see also <xref target="SMTP-AUTH"/> and <xref target="SMTP-TLS"/></t>
            <t>The Syslog Protocol <xref target="SYSLOG"/>, for which see also <xref target="SYSLOG-TLS"/></t>
            <t>The Extensible Messaging and Presence Protocol <xref target="XMPP"/>, for which see also <xref target="XMPPBIS"/></t>
          </list>
        </t>
        <t>Different application protocols have traditionally specified their own rules for representing and verifying server identities.  Unfortunately, this divergence of approaches has caused some confusion among certification authorities, protocol designers, and application developers.</t>
        <t>Futhermore, currently the vast majority of deployed application servers use domain names in their certificates (typically via a subjectAltName extension of dNSName or a subjectName component of Common Name).  Ideally, service operators would use application service identities in their certificates (such as an SRVName <xref target='SRVNAME'/>, a URI, or an application-specific name form), since this would reduce the possibility of attacks against unrelated services at domain names that provide many different application services.</t>
        <t>To codify secure authentication practices, this document specifies recommended procedures for representing and verifying server identities in certificates intended for use in applications that employ TLS.</t>
      </section>

      <section title="Scope" anchor="scope">
        <t>This document applies only to server identities associated with domain names, only to TLS, and only to the PKI.  Similar considerations might apply to client identities (e.g., for mutual authentication), to identities other than domain names (e.g., IP addresses), to security protocols other than TLS (e.g., <xref target='IPSEC'/> and <xref target='DTLS'/>), and to keys or certificates created outside the context of the PKI (e.g., where a dependency on Certificate Revocation Lists or the Online Certificate Status Protocol might introduce unacceptable latency or denial of service attacks).  Although those scenarios might be able to re-use some aspects of the representation and verification rules provided here, they are outside the scope of this document and need to be addressed by separate specifications.</t>
      </section>

      <section title="Terminology" anchor="terminology">
        <t>Most security-related terms in this document are to be understood in the sense defined in <xref target="SECTERMS"/>; such terms include, but are not limited to, "attack", "authentication", "authorization", "certificate", "credential", "identity", "self-signed certificate", "trust", "trust anchor", "trust chain", "validate", and "verify".</t>
        <t>The following capitalized keywords are to be interpreted as described in <xref target="TERMS"/>: "MUST", "SHALL", "REQUIRED"; "MUST NOT", "SHALL NOT"; "SHOULD", "RECOMMENDED"; "SHOULD NOT", "NOT RECOMMENDED"; "MAY", "OPTIONAL".</t>
      </section>

      <section title="Contributors" anchor="contributors">
        <t>The following individuals made significant contributions to the text of this document: Shumon Huque, RL 'Bob' Morgan, and Kurt Zeilenga.</t>
      </section>

      <section title="Acknowledgements" anchor="acknowledgements">
        <t>The editors and contributors wish to thank the following individuals for their feedback and suggestions: Dave Crocker, Cyrus Daboo, Philip Guenther, David Harrington, Paul Hoffman, Scott Lawrence, Alexey Melnikov, Tom Petch, Pete Resnick, Joe Salowey, and Dan Wing.</t>
      </section>

    </section>

    <section title="Architectural Assumptions" anchor="architecture">
      <t>Internet applications often use a client-server architecture in which a client connects to a server in order to retrieve or upload data, access a broader network of services, or communicate with other entities on the network.  From the security perspective, a client might be a user agent controlled by a human, an automated process such as a bot, or a peer server.  We assume that an application server hosts information, enables a provisioned account to perform authorized services, or provides network access on behalf of a particular organization or service that is canonically identified by a domain name (not, e.g., an IP address).  The specific application provided (e.g., a web site or an instant messaging system) might further restrict the identity type that is represented or verified in a TLS interaction; such an identity type is often informal (e.g., most people expect a service that is provided on port 443 to be a web server) but can be specified more formally through the use of DNS SRV records <xref target='DNS-SRV'/>, a Uniform Resource Identifier <xref target='URI'/> represented by a subjectAltName of uniformResourceIdentifier, the SRVName certificate extension defined in <xref target='SRVNAME'/>, or other certificate extensions that have been defined for particular identity types (e.g., the XmppAddr extension for use in <xref target='XMPP'/>).  The certificate presented by an application server might contain one identity or it might contain multiple identities of different types (e.g., one identity might be a simple dNSName and another might be an SRVName that restricts the certificate to use in the context of the specified service).</t>
      <t>When a client connects to an application server, it has some conception of either the server's identity (e.g., "an XMPP server for example.com") or of the server's location (e.g., "the SMTP server at mail.example.com").  The client expects at least one of the server's presented identities to match this reference identity.  It is important to note that the reference identity is provided by a human user or configured into the client application (e.g., in the domain part of an "Application Unique String" as described in <xref target='SIP-LOC'/>), and is not an identity that is derived from the reference identity in an automated fashion (e.g., an IP address discovered through DNS resolution of the reference identity).  Only a match between the reference identity and a presented identity enables the client to be sure that the certificate can legitimately be used to secure the connection.  However, a user-oriented client MAY provide a configuration setting that enables a human user to explicitly specify a particular hostname to be checked for connection purposes, thus explicitly overriding matching rules.</t>
      <t>To summarize, we define the following terms to assist in understanding the process of representing and verifying server identity:</t>
      <t>
        <list style="hanging">
          <t hangText="identity set:">The set of identities that are presented by a server to a client (in the form of the server's X.509 certificate) when the client attempts to establish a secure connection with the server.</t>
          <t hangText="identity type:">The "natural kind" of identity to which a presented identity or reference identity belongs.  For example, the reference identity might be a domain name, an IPv4 or IPv6 address, or a particular service in the sense of <xref target='DNS-SRV'/> or <xref target='SRVNAME'/>.  This specification does not provide a complete taxonomy of identity types but assumes that an application server is identified by a domain name that could be represented in the form of several identity types (e.g., a dNSName and an SRVName).</t>
          <t hangText="presented identity:">A single member of the identity set.</t>
          <t hangText="reference identity:">The client's conception of the server's identity before it attempts to establish a secure connection with the server, i.e. the identity that the client expects the server to present and to which the client makes reference when attempting to verify the server's identity.  The reference identity MUST be provided by the human user controlling the client (if any), e.g. when specifying the server portion of the user's account name on the server or when explicitly configuring the client to connect to a particular host.  The reference identity MAY be reflected in the TLS "server_name" extension as specified in <xref target='TLS'/>.</t>
        </list>
      </t>
    </section>

    <section title="Representation of Server Identity" anchor="representation">
      <t>The following rules apply to the representation of application server identities in certificates issued by certification authorities, i.e., certificates that are to used for securing connections to application servers such as web sites, email services, and instant messaging services.</t>
      <t>
        <list style='numbers'>
          <t>The certification authority MUST issue the certificate based on the domain name at which the server will provide the relevant service (not an IP address or host name for a specific machine).</t>
          <t>An identity MAY contain one instance of the wildcard character '*' but only as the left-most label.  An application protocol that re-uses the rules specified in this document MUST specify whether the wildcard character is or is not allowed in certificates issued for use with that protocol.</t>
          <t>If the service at which the certificate will be used deploys a technology that is discovered by means of DNS SRV records <xref target='DNS-SRV'/>, then the certificate SHOULD include an identity of type SRVName <xref target='SRVNAME'/>.</t>
          <t>If the service is associated with a particular URI, then the certificate MAY include an identity of type uniformResourceIdentifier (i.e., a subjectAltName extension that includes a uniformResourceIdentifier name form whose authority component is the domain name of the service).</t>
          <t>Although the certificate MAY include other application-specific identities for types that were defined before specification of the SRVName extension (e.g., XmppAddr for <xref target='XMPP'/>) or for which service names do not exist, the SRVName extension is preferred.</t>
          <t>If the certificate does not include an SRVName, uniformResourceIdentifier, or other application-specific identity type, then the certificate MUST include an identity of dNSName.</t>
          <t>The certificate SHOULD NOT represent the server's domain name in an identity of Common Name (CN) (see <xref target='LDAP-SCHEMA'/>) in the leaf Relative Distinguished Name (RDN) of the subjectName, even though it is recognized that many deployed clients still check this legacy identity.  For example, here the CN is the leaf RDN, which is acceptable:
            <figure>
              <artwork><![CDATA[
        cn=www.example.com, ou=Web Services, c=GB
              ]]></artwork>
            </figure>
          </t>
          <t>The certificate MUST NOT represent the server's domain name in an identity of Common Name (CN) where the CN is in something other than the "leaf" (left-most) position within the Relative Distinguished Names (RDNs) of the subjectName.  For example, here the CN is not the leaf RDN, which is unacceptable:
            <figure>
              <artwork><![CDATA[
        c=GB, ou=Web Services, cn=www.example.com
              ]]></artwork>
            </figure>
          </t>
          <t>The certificate MUST NOT represent the server's domain name by means of a series of Domain Component (DC) attributes (because the order of Domain Components is not guaranteed, certain attacks are possible if DC attributes are included).</t>
        </list>
      </t>
    </section>

    <section title="Verification of Server Identity" anchor="verification">
      <section title="Overview" anchor="certs-overview">
        <t>At a high level, the client verifies the server's identity in accordance with the following rules:</t>
        <t>
          <list style="numbers">
            <t>Before connecting to the server, the client determines the possible identity type(s) of the reference identity.</t>
            <t>During the process of attempting to establish a secure connection, the server MUST present its identity set to the client in the form of an X.509 certificate <xref target="X509"/>.</t>
            <t>Upon being presented with the server's identity set, the client MUST check the reference identity against the presented identities for the purpose of finding a match.  To do so, the client iterates through all of the subjectAltName extensions it recognizes in the server's certificate and compares the value of each extension to the reference identity until it has either produced a match or exhausted the identities in the identity set (comparison rules for matching particular identity types are provided under <xref target="certs-rules"/>, including fallbacks to several subjectName fields).  Even if the application technology does not define an application-specific preference order for checking of identities, the client SHOULD check them in order from most specific (e.g., SRVName) to least specific (e.g., dNSName).</t>
            <t>Before attempting to find a match in relation to a particular presented identity, the client MAY map the reference identity to a different identity type.  Such a mapping MAY be performed for any available subjectAltName type to which the reference identity can be mapped; however, the reference identity SHOULD be mapped only to types for which the mapping is inherently secure (e.g., extracting the domain name from a URI to match against a subjectAltName of type dNSName or SRVName).</t>
            <t>The client MUST NOT attempt to match against an an identity of type SRVName <xref target='SRVNAME'/> unless the service to which the client has connected deploys a technology that is discovered by means of DNS SRV records <xref target='DNS-SRV'/>.</t>
            <t>If the identity set has more than one member, a match with any of the presented identities is acceptable.</t>
          </list>
        </t>
        <t><list style='empty'><t>Note: A hostname that is resolved via the Domain Name System MUST NOT be used as the reference identity unless an administrator or human user has explicitly configured an application to associate a particular hostname (and potentially port) with the hostname to which the application connects (e.g., to "hardcode" an association between an original hostname of example.net and a configured hostname of connector.example.com:443).</t></list></t>
        <t>In addition to the identity check described in this section, a client might complete further verification to ensure that the server is authorized to provide the service it is requested to provide.  Methods for doing so (which might include consulting local policy information) are out of scope for this document.</t>
      </section>
      <section title="Comparison Rules" anchor="certs-rules">
        <t>This document assumes that the reference identity is a domain name as defined by <xref target='RFC1034'/> and <xref target='RFC1035'/> for "traditional" domain names or by <xref target='IDNA2003'/> or <xref target='IDNA2008'/> for internationalized domain names.  The client MUST match the reference identity against subjectAltName extensions of type dNSName and SRVName <xref target='SRVNAME'/> according to the following rules.</t> 
        <section title="Traditional Domain Names" anchor="certs-rules-trad">
          <t>If the reference identity is a "traditional" domain name, then matching of reference identity against the presented identity is performed by comparing the set of domain components using a case-insensitive ASCII comparison (as clarified by <xref target='DNS-CASE'/>).</t>
        </section>
        <section title="Internationalized Domain Names" anchor="certs-rules-idn">
          <t>Note: This section needs to be updated to reflect <xref target='IDNA2008'/>.</t>
          <t>If the reference identity is an internationalized domain name, then an implementation MUST convert the reference identity to the ASCII Compatible Encoding (ACE) format as specified in Section 4 of <xref target='IDNA2003'/> before comparison with subjectAltName values of type dNSName; specifically, the conversion operation specified in Section 4 of <xref target='IDNA2003'/> MUST be performed as follows:</t>
          <t>
            <list style="symbols">
              <t>In step 1, the domain name SHALL be considered a "stored string".</t>
              <t>In step 3, set the flag called "UseSTD3ASCIIRules".</t>
              <t>In step 4, process each label with the "ToASCII" operation.</t>
              <t>In step 5, change all label separators to U+002E (full stop).</t>
            </list>
          </t> 
          <t>After performing the "to-ASCII" conversion with regard to an internationalized domain name, the DNS labels and names MUST be compared for equality according to the rules specified in Section 3 of <xref target='IDNA2003'/>, i.e. once all label separators are replaced with U+002E (dot) they are compared in a case-insensitive manner.</t>
        </section>
        <section title="Wildcards" anchor="certs-rules-wildcards">
          <t>Unless otherwise specified by an application protocol that re-uses the rules specified in this document, the client MAY match against an identity that contains one instance of the wildcard character '*' as the left-most label of the domain name.  If it does so, the client MUST match the reference identity against the entire left-most label only (thus *.example.com matches foo.example.com but not bar.foo.example.com or example.com itself).  The client MUST ignore a presented identity in which the wildcard character is contained within a label fragment (e.g., baz*.example.net is not allowed and MUST NOT be taken to match baz1.example.net and baz2.example.net).</t>
        </section>
        <section title="Common Names" anchor="certs-rules-cn">
          <t>If and only if the identity set does not include subjectAltName extensions of type dNSName, SRVName, uniformResourceIdentifier (or other application-specific subjectAltName extensions), the client MAY as a fallback check the value of the Common Name (CN) if presented as the leaf (left-most) Relative Distinguished Name (RND) in the subjectName component of the server's X.509 certificate.  In existing certificates, the CN is often used for representing a domain name; for example, consider the following subjectName with a leaf RDN of Common Name:</t>
          <figure>
            <artwork><![CDATA[
cn=www.example.com, ou=Web Services, c=GB
            ]]></artwork>
          </figure>
          <t>Here the Common Name is "www.example.com" and the client could choose to compare the reference identity against that CN.  When doing so, the client MUST follow the comparison rules described above for subjectAltName extensions of type dNSName and SRVName.</t>
          <t>A client MUST NOT check the Common Name if it is other than the leaf (left-most) Relative Distinguished Name (RDN) in the subjectName.</t>
        </section>
        <section title="Relative Distinguished Names" anchor="certs-rules-rdn">
          <t>A client MUST NOT check Relative Distinguished Names (RDNs) other than the Common Name; in particular, this means that a series of Domain Component (DC) attributes MUST NOT be checked (because the order of Domain Components is not guaranteed, certain attacks are possible if DC attributes are checked).</t>
        </section>
      </section>
      <section title="Outcome" anchor="certs-outcome">
        <t>The outcome of the checking procedure is one of the following:</t>
        <t>
          <list style='hanging'>
            <t hangText='Case #1:'>The client finds at least one presented identity that matches the reference identity; the entity MUST use this as the validated identity of the server.</t>
            <t hangText='Case #2:'>The client finds no subjectAltName or subjectName that matches the reference identity but a human user has permanently accepted the certificate during a previous connection attempt; the client MUST verify that the cached certificate was presented and MUST notify the user if the certificate has changed since the last time that a secure connection was successfully negotiated.</t>
            <t hangText='Case #3:'>The client finds no subjectAltName or subjectName that matches the reference identity and a human user has not permanently accepted the certificate during a previous connection attempt.  The client MUST NOT use the presented identity (if any).  Instead, if the client is a user-oriented application, then it MUST either (1) automatically terminate the connection with a bad certificate error or (2) show the certificate (including the entire certificate chain) to the user and give the user the choice of terminating the connecting or accepting the certificate temporarily (i.e., for this connection attempt only) or permanently (i.e., for all future connection attempts) and then continuing with the connection; if a user permanently accepts a certificate in this way, the client MUST cache the certificate (or some non-forgeable representation such as a hash value) and in future connection MUST attempt behave as in Case #2.  (It is the resposibility of the human user to verify the hash value or fingerprint of the certificate with the server over a trusted communication layer.)  If the client is an automated application, then it SHOULD terminate the connection with a bad certificate error and log the error to an appropriate audit log; an automated application MAY provide a configuration setting that disables this check, but MUST enable the check by default.</t>
          </list>
        </t>
      </section>
    </section>

    <section title="Security Considerations" anchor="security">
      <t>This entire document discusses security.</t>
    </section>

    <section title="IANA Considerations" anchor="iana">
      <t>This document has no actions for the IANA.</t>
    </section>

  </middle>

  <back>

    <references title="Normative References">

<reference anchor='IDNA2003'>
<front>
<title>Internationalizing Domain Names in Applications (IDNA)</title>
<author initials='P.' surname='Faltstrom' fullname='P. Faltstrom'>
<organization /></author>
<author initials='P.' surname='Hoffman' fullname='P. Hoffman'>
<organization /></author>
<author initials='A.' surname='Costello' fullname='A. Costello'>
<organization /></author>
<date month='March' year='2003' /></front>
<seriesInfo name='RFC' value='3490' />
<format type='TXT' octets='51943' target='ftp://ftp.isi.edu/in-notes/rfc3490.txt' />
</reference>

<reference anchor='IDNA2008'>
<front>
<title>Internationalized Domain Names in Applications (IDNA): Protocol</title>
<author initials='J' surname='Klensin' fullname='John Klensin'>
    <organization />
</author>
<date month='January' day='7' year='2010' />
<abstract><t>This document is the revised protocol definition for internationalized domain names (IDNs).  The rationale for changes, the relationship to the older specification, and important</t></abstract>
</front>
<seriesInfo name='Internet-Draft' value='draft-ietf-idnabis-protocol-18' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-idnabis-protocol-18.txt' />
</reference>

<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='ftp://ftp.isi.edu/in-notes/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='ftp://ftp.isi.edu/in-notes/rfc1035.txt' />
</reference>

<reference anchor='SRVNAME'>
<front>
<title>Internet X.509 Public Key Infrastructure Subject Alternative Name for Expression of Service Name</title>
<author initials='S.' surname='Santesson' fullname='S. Santesson'>
<organization /></author>
<date year='2007' month='August' />
<abstract>
<t>This document defines a new name form for inclusion in the otherName field of an X.509 Subject Alternative Name extension that allows a certificate subject to be associated with the service name and domain name components of a DNS Service Resource Record. [STANDARDS TRACK]</t></abstract></front>
<seriesInfo name='RFC' value='4985' />
<format type='TXT' octets='17868' target='ftp://ftp.isi.edu/in-notes/rfc4985.txt' />
</reference>

<reference anchor='TERMS'>
<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 month='March' year='1997' />
<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 &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL
      NOT&quot;, &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;,  &quot;MAY&quot;, and
      &quot;OPTIONAL&quot; 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='ftp://ftp.isi.edu/in-notes/rfc2119.txt' />
<format type='HTML' octets='14486' target='http://xml.resource.org/public/rfc/html/rfc2119.html' />
<format type='XML' octets='5661' target='http://xml.resource.org/public/rfc/xml/rfc2119.xml' />
</reference>

<reference anchor='X509'>
<front>
<title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
<author initials='D.' surname='Cooper' fullname='D. Cooper'>
<organization /></author>
<author initials='S.' surname='Santesson' fullname='S. Santesson'>
<organization /></author>
<author initials='S.' surname='Farrell' fullname='S. Farrell'>
<organization /></author>
<author initials='S.' surname='Boeyen' fullname='S. Boeyen'>
<organization /></author>
<author initials='R.' surname='Housley' fullname='R. Housley'>
<organization /></author>
<author initials='W.' surname='Polk' fullname='W. Polk'>
<organization /></author>
<date year='2008' month='May' />
<abstract>
<t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet.  An overview of this approach and model is provided as an introduction.  The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms.  Standard certificate extensions are described and two Internet-specific extensions are defined.  A set of required certificate extensions is specified.  The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions.  An algorithm for X.509 certification path validation is described.  An ASN.1 module and examples are provided in the appendices. [STANDARDS TRACK]</t></abstract></front>
<seriesInfo name='RFC' value='5280' />
<format type='TXT' octets='352580' target='ftp://ftp.isi.edu/in-notes/rfc5280.txt' />
</reference>

    </references>

    <references title="Informative References">

<reference anchor='DNS-CASE'>
<front>
<title>Domain Name System (DNS) Case Insensitivity Clarification</title>
<author initials='D.' surname='Eastlake' fullname='D. Eastlake'>
<organization /></author>
<date year='2006' month='January' />
<abstract>
<t>Domain Name System (DNS) names are "case insensitive".  This document explains exactly what that means and provides a clear specification of the rules.  This clarification updates RFCs 1034, 1035, and 2181. [STANDARDS TRACK]</t></abstract></front>
<seriesInfo name='RFC' value='4343' />
<format type='TXT' octets='22899' target='ftp://ftp.isi.edu/in-notes/rfc4343.txt' />
</reference>

<reference anchor='DNS-SRV'>
<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 month='February' year='2000' />
<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='ftp://ftp.isi.edu/in-notes/rfc2782.txt' />
</reference>

<reference anchor='DNSSEC'>
<front>
<title>DNS Security Introduction and Requirements</title>
<author initials='R.' surname='Arends' fullname='R. Arends'>
<organization /></author>
<author initials='R.' surname='Austein' fullname='R. Austein'>
<organization /></author>
<author initials='M.' surname='Larson' fullname='M. Larson'>
<organization /></author>
<author initials='D.' surname='Massey' fullname='D. Massey'>
<organization /></author>
<author initials='S.' surname='Rose' fullname='S. Rose'>
<organization /></author>
<date year='2005' month='March' />
<abstract>
<t>The Domain Name System Security Extensions (DNSSEC) add data origin authentication and data integrity to the Domain Name System. This document introduces these extensions and describes their capabilities and limitations. This document also discusses the services that the DNS security extensions do and do not provide. Last, this document describes the interrelationships between the documents that collectively describe DNSSEC. [STANDARDS TRACK] </t></abstract></front>
<seriesInfo name='RFC' value='4033' />
<format type='TXT' octets='52445' target='ftp://ftp.isi.edu/in-notes/rfc4033.txt' />
</reference>

<reference anchor='DTLS'>
<front>
<title>Datagram Transport Layer Security</title>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'>
<organization /></author>
<author initials='N.' surname='Modadugu' fullname='N. Modadugu'>
<organization /></author>
<date year='2006' month='April' />
<abstract>
<t>This document specifies Version 1.0 of the Datagram Transport Layer Security (DTLS) protocol.  The DTLS protocol provides communications privacy for datagram protocols.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery.  The DTLS protocol is based on the Transport Layer Security (TLS) protocol and provides equivalent security guarantees.  Datagram semantics of the underlying transport are preserved by the DTLS protocol. [STANDARDS TRACK]</t></abstract></front>
<seriesInfo name='RFC' value='4347' />
<format type='TXT' octets='56014' target='ftp://ftp.isi.edu/in-notes/rfc4347.txt' />
</reference>

<reference anchor='HTTP'>
<front>
<title abbrev='HTTP/1.1'>Hypertext Transfer Protocol -- HTTP/1.1</title>
<author initials='R.' surname='Fielding' fullname='Roy T.  Fielding'>
<organization abbrev='UC Irvine'>Department of Information and Computer Science</organization>
<address>
<postal>
<street>University of California, Irvine</street>
<city>Irvine</city>
<region>CA</region>
<code>92697-3425</code></postal>
<facsimile>+1(949)824-1715</facsimile>
<email>fielding@ics.uci.edu</email></address></author>
<author initials='J.' surname='Gettys' fullname='James Gettys'>
<organization abbrev='Compaq/W3C'>World Wide Web Consortium</organization>
<address>
<postal>
<street>MIT Laboratory for Computer Science, NE43-356</street>
<street>545 Technology Square</street>
<city>Cambridge</city>
<region>MA</region>
<code>02139</code></postal>
<facsimile>+1(617)258-8682</facsimile>
<email>jg@w3.org</email></address></author>
<author initials='J.' surname='Mogul' fullname='Jeffrey C.  Mogul'>
<organization abbrev='Compaq'>Compaq Computer Corporation</organization>
<address>
<postal>
<street>Western Research Laboratory</street>
<street>250 University Avenue</street>
<city>Palo Alto</city>
<region>CA</region>
<code>94305</code></postal>
<email>mogul@wrl.dec.com</email></address></author>
<author initials='H.' surname='Frystyk' fullname='Henrik Frystyk Nielsen'>
<organization abbrev='MIT/LCS'>World Wide Web Consortium</organization>
<address>
<postal>
<street>MIT Laboratory for Computer Science, NE43-356</street>
<street>545 Technology Square</street>
<city>Cambridge</city>
<region>MA</region>
<code>02139</code></postal>
<facsimile>+1(617)258-8682</facsimile>
<email>frystyk@w3.org</email></address></author>
<author initials='L.' surname='Masinter' fullname='Larry Masinter'>
<organization abbrev='Xerox'>Xerox Corporation</organization>
<address>
<postal>
<street>MIT Laboratory for Computer Science, NE43-356</street>
<street>3333 Coyote Hill Road</street>
<city>Palo Alto</city>
<region>CA</region>
<code>94034</code></postal>
<email>masinter@parc.xerox.com</email></address></author>
<author initials='P.' surname='Leach' fullname='Paul J.  Leach'>
<organization abbrev='Microsoft'>Microsoft Corporation</organization>
<address>
<postal>
<street>1 Microsoft Way</street>
<city>Redmond</city>
<region>WA</region>
<code>98052</code></postal>
<email>paulle@microsoft.com</email></address></author>
<author initials='T.' surname='Berners-Lee' fullname='Tim Berners-Lee'>
<organization abbrev='MIT/LCS'>World Wide Web Consortium</organization>
<address>
<postal>
<street>MIT Laboratory for Computer Science, NE43-356</street>
<street>545 Technology Square</street>
<city>Cambridge</city>
<region>MA</region>
<code>02139</code></postal>
<facsimile>+1(617)258-8682</facsimile>
<email>timbl@w3.org</email></address></author>
<date month='June' year='1999' />
<abstract>
<t>
   The Hypertext Transfer Protocol (HTTP) is an application-level
   protocol for distributed, collaborative, hypermedia information
   systems.  It is a generic, stateless, protocol which can be used for
   many tasks beyond its use for hypertext, such as name servers and
   distributed object management systems, through extension of its
   request methods, error codes and headers .  A feature of HTTP is
   the typing and negotiation of data representation, allowing systems
   to be built independently of the data being transferred.
</t>
<t>
   HTTP has been in use by the World-Wide Web global information
   initiative since 1990.  This specification defines the protocol
   referred to as "HTTP/1.1", and is an update to RFC 2068 .
</t></abstract></front>
<seriesInfo name='RFC' value='2616' />
<format type='TXT' octets='422317' target='ftp://ftp.isi.edu/in-notes/rfc2616.txt' />
<format type='PS' octets='5529857' target='ftp://ftp.isi.edu/in-notes/rfc2616.ps' />
<format type='PDF' octets='550558' target='ftp://ftp.isi.edu/in-notes/rfc2616.pdf' />
<format type='HTML' octets='498891' target='http://xml.resource.org/public/rfc/html/rfc2616.html' />
<format type='XML' octets='471630' target='http://xml.resource.org/public/rfc/xml/rfc2616.xml' />
</reference>

<reference anchor='HTTP-TLS'>
<front>
<title>HTTP Over TLS</title>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'>
<organization /></author>
<date year='2000' month='May' />
<abstract>
<t>This memo describes how to use Transport Layer Security (TLS) to secure Hypertext Transfer Protocol (HTTP) connections over the Internet.  This memo provides information for the Internet community.</t></abstract></front>
<seriesInfo name='RFC' value='2818' />
<format type='TXT' octets='15170' target='ftp://ftp.isi.edu/in-notes/rfc2818.txt' />
</reference>

<reference anchor='IMAP'>
<front>
<title>INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1</title>
<author initials='M.' surname='Crispin' fullname='M. Crispin'>
<organization /></author>
<date year='2003' month='March' /></front>
<seriesInfo name='RFC' value='3501' />
<format type='TXT' octets='227640' target='ftp://ftp.isi.edu/in-notes/rfc3501.txt' />
</reference>

<reference anchor='IP'>
<front>
<title abbrev='Internet Protocol'>Internet Protocol</title>
<author initials='J.' surname='Postel' fullname='Jon Postel'>
<organization>University of Southern California (USC)/Information Sciences Institute</organization>
<address>
<postal>
<street>4676 Admiralty Way</street>
<city>Marina del Rey</city>
<region>CA</region>
<code>90291</code>
<country>US</country></postal></address></author>
<date year='1981' day='1' month='September' /></front>
<seriesInfo name='STD' value='5' />
<seriesInfo name='RFC' value='791' />
<format type='TXT' octets='97779' target='ftp://ftp.isi.edu/in-notes/rfc791.txt' />
</reference>

<reference anchor='IPv6'>
<front>
<title abbrev='IPv6 Specification'>Internet Protocol, Version 6 (IPv6) Specification</title>
<author initials='S.E.' surname='Deering' fullname='Stephen E. Deering'>
<organization>Cisco Systems, Inc.</organization>
<address>
<postal>
<street>170 West Tasman Drive</street>
<street>San Jose</street>
<region>CA</region>
<code>95134-1706</code>
<country>USA</country></postal>
<phone>+1 408 527 8213</phone>
<facsimile>+1 408 527 8254</facsimile>
<email>deering@cisco.com</email></address></author>
<author initials='R.M.' surname='Hinden' fullname='Robert M. Hinden'>
<organization>Nokia</organization>
<address>
<postal>
<street>232 Java Drive</street>
<street>Sunnyvale</street>
<region>CA</region>
<code>94089</code>
<country>USA</country></postal>
<phone>+1 408 990 2004</phone>
<facsimile>+1 408 743 5677</facsimile>
<email>hinden@iprg.nokia.com</email></address></author>
<date year='1998' month='December' />
<area>Internet</area>
<keyword>internet protocol version 6</keyword>
<keyword>IPv6</keyword>
<abstract>
<t>
   This document specifies version 6 of the Internet Protocol (IPv6),
   also sometimes referred to as IP Next Generation or IPng.
</t></abstract></front>
<seriesInfo name='RFC' value='2460' />
<format type='TXT' octets='85490' target='ftp://ftp.isi.edu/in-notes/rfc2460.txt' />
<format type='HTML' octets='99496' target='http://xml.resource.org/public/rfc/html/rfc2460.html' />
<format type='XML' octets='93343' target='http://xml.resource.org/public/rfc/xml/rfc2460.xml' />
</reference>

<reference anchor='IPSEC'>
<front>
<title>Security Architecture for the Internet Protocol</title>
<author initials='S.' surname='Kent' fullname='S. Kent'>
<organization /></author>
<author initials='K.' surname='Seo' fullname='K. Seo'>
<organization /></author>
<date year='2005' month='December' />
<abstract>
<t>This document describes an updated version of the "Security Architecture for IP", which is designed to provide security services for traffic at the IP layer.  This document obsoletes RFC 2401 (November 1998). [STANDARDS TRACK]</t></abstract></front>
<seriesInfo name='RFC' value='4301' />
<format type='TXT' octets='262123' target='ftp://ftp.isi.edu/in-notes/rfc4301.txt' />
</reference>

<reference anchor='LDAP'>
<front>
<title>Lightweight Directory Access Protocol (LDAP): The Protocol</title>
<author initials='J.' surname='Sermersheim' fullname='J. Sermersheim'>
<organization /></author>
<date year='2006' month='June' />
<abstract>
<t>This document describes the protocol elements, along with their semantics and encodings, of the Lightweight Directory Access Protocol (LDAP).  LDAP provides access to distributed directory services that act in accordance with X.500 data and service models.  These protocol elements are based on those described in the X.500 Directory Access Protocol (DAP). [STANDARDS TRACK]</t></abstract></front>
<seriesInfo name='RFC' value='4511' />
<format type='TXT' octets='150116' target='ftp://ftp.isi.edu/in-notes/rfc4511.txt' />
</reference>

<reference anchor='LDAP-AUTH'>
<front>
<title>Lightweight Directory Access Protocol (LDAP): Authentication Methods and Security Mechanisms</title>
<author initials='R.' surname='Harrison' fullname='R. Harrison'>
<organization /></author>
<date year='2006' month='June' />
<abstract>
<t>This document describes authentication methods and security mechanisms of the Lightweight Directory Access Protocol (LDAP). This document details establishment of Transport Layer Security (TLS) using the StartTLS operation.&lt;/t>&lt;t> This document details the simple Bind authentication method including anonymous, unauthenticated, and name/password mechanisms and the Simple Authentication and Security Layer (SASL) Bind authentication method including the EXTERNAL mechanism.&lt;/t>&lt;t> This document discusses various authentication and authorization states through which a session to an LDAP server may pass and the actions that trigger these state changes.&lt;/t>&lt;t> This document, together with other documents in the LDAP Technical Specification (see Section 1 of the specification's road map), obsoletes RFC 2251, RFC 2829, and RFC 2830. [STANDARDS TRACK]</t></abstract></front>
<seriesInfo name='RFC' value='4513' />
<format type='TXT' octets='80546' target='ftp://ftp.isi.edu/in-notes/rfc4513.txt' />
</reference>

<reference anchor='LDAP-SCHEMA'>
<front>
<title>Lightweight Directory Access Protocol (LDAP): Schema for User Applications</title>
<author initials='A.' surname='Sciberras' fullname='A. Sciberras'>
<organization /></author>
<date year='2006' month='June' />
<abstract>
<t>This document is an integral part of the Lightweight Directory Access Protocol (LDAP) technical specification.  It provides a technical specification of attribute types and object classes intended for use by LDAP directory clients for many directory services, such as White Pages.  These objects are widely used as a basis for the schema in many LDAP directories.  This document does not cover attributes used for the administration of directory servers, nor does it include directory objects defined for specific uses in other documents. [STANDARDS TRACK]</t></abstract></front>
<seriesInfo name='RFC' value='4519' />
<format type='TXT' octets='64996' target='ftp://ftp.isi.edu/in-notes/rfc4519.txt' />
</reference>

<reference anchor='LDAP-TLS'>
<front>
<title>Lightweight Directory Access Protocol (v3): Extension for Transport Layer Security</title>
<author initials='J.' surname='Hodges' fullname='J. Hodges'>
<organization /></author>
<author initials='R.' surname='Morgan' fullname='R. Morgan'>
<organization /></author>
<author initials='M.' surname='Wahl' fullname='M. Wahl'>
<organization /></author>
<date year='2000' month='May' />
<abstract>
<t>This document defines the "Start Transport Layer Security (TLS) Operation" for LDAP. [STANDARDS TRACK]</t></abstract></front>
<seriesInfo name='RFC' value='2830' />
<format type='TXT' octets='24469' target='ftp://ftp.isi.edu/in-notes/rfc2830.txt' />
</reference>

<reference anchor='NETCONF'>
<front>
<title>NETCONF Configuration Protocol</title>
<author initials='R.' surname='Enns' fullname='R. Enns'>
<organization /></author>
<date year='2006' month='December' />
<abstract>
<t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices.  It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages.  The NETCONF protocol operations are realized on top of a simple Remote Procedure Call (RPC) layer. [STANDARDS TRACK]</t></abstract></front>
<seriesInfo name='RFC' value='4741' />
<format type='TXT' octets='173914' target='ftp://ftp.isi.edu/in-notes/rfc4741.txt' />
</reference>

<reference anchor='NETCONF-SSH'>
<front>
<title>Using the NETCONF Configuration Protocol over Secure SHell (SSH)</title>
<author initials='M.' surname='Wasserman' fullname='M. Wasserman'>
<organization /></author>
<author initials='T.' surname='Goddard' fullname='T. Goddard'>
<organization /></author>
<date year='2006' month='December' />
<abstract>
<t>This document describes a method for invoking and running the Network Configuration Protocol (NETCONF) within a Secure Shell (SSH) session as an SSH subsystem. [STANDARDS TRACK]</t></abstract></front>
<seriesInfo name='RFC' value='4742' />
<format type='TXT' octets='17807' target='ftp://ftp.isi.edu/in-notes/rfc4742.txt' />
</reference>

<reference anchor='NETCONF-TLS'>
<front>
<title>NETCONF over Transport Layer Security (TLS)</title>
<author initials='M.' surname='Badra' fullname='M. Badra'>
<organization /></author>
<date year='2009' month='May' />
<abstract>
<t>The Network Configuration Protocol (NETCONF) provides mechanisms to install, manipulate, and delete the configuration of network devices.  This document describes how to use the Transport Layer Security (TLS) protocol to secure NETCONF exchanges. [STANDARDS TRACK]</t></abstract></front>
<seriesInfo name='RFC' value='5539' />
<format type='TXT' octets='16073' target='ftp://ftp.isi.edu/in-notes/rfc5539.txt' />
</reference>

<reference anchor='NNTP'>
<front>
<title>Network News Transfer Protocol (NNTP)</title>
<author initials='C.' surname='Feather' fullname='C. Feather'>
<organization /></author>
<date year='2006' month='October' />
<abstract>
<t>The Network News Transfer Protocol (NNTP) has been in use in the Internet for a decade, and remains one of the most popular protocols (by volume) in use today.  This document is a replacement for RFC 977, and officially updates the protocol specification.  It clarifies some vagueness in RFC 977, includes some new base functionality, and provides a specific mechanism to add standardized extensions to NNTP. [STANDARDS TRACK]</t></abstract></front>
<seriesInfo name='RFC' value='3977' />
<format type='TXT' octets='247440' target='ftp://ftp.isi.edu/in-notes/rfc3977.txt' />
</reference>

<reference anchor='NNTP-TLS'>
<front>
<title>Using Transport Layer Security (TLS) with Network News Transfer Protocol (NNTP)</title>
<author initials='K.' surname='Murchison' fullname='K. Murchison'>
<organization /></author>
<author initials='J.' surname='Vinocur' fullname='J. Vinocur'>
<organization /></author>
<author initials='C.' surname='Newman' fullname='C. Newman'>
<organization /></author>
<date year='2006' month='October' />
<abstract>
<t>This memo defines an extension to the Network News Transfer Protocol (NNTP) that allows an NNTP client and server to use Transport Layer Security (TLS).  The primary goal is to provide encryption for single-link confidentiality purposes, but data integrity, (optional) certificate-based peer entity authentication, and (optional) data compression are also possible. [STANDARDS TRACK]</t></abstract></front>
<seriesInfo name='RFC' value='4642' />
<format type='TXT' octets='29366' target='ftp://ftp.isi.edu/in-notes/rfc4642.txt' />
</reference>

<reference anchor='POP3'>
<front>
<title abbrev='POP3'>Post Office Protocol - Version 3</title>
<author initials='J.G.' surname='Myers' fullname='John G.  Myers'>
<organization>Carnegie-Mellon University</organization>
<address>
<postal>
<street>5000 Forbes Ave</street>
<city>Pittsburgh</city>
<region>PA</region>
<code>15213</code>
<country>US</country></postal>
<email>jgm+@cmu.edu</email></address></author>
<author initials='M.T.' surname='Rose' fullname='Marshall T.  Rose'>
<organization>Dover Beach Consulting, Inc.</organization>
<address>
<postal>
<street>420 Whisman Court</street>
<city>Mountain View</city>
<region>CA</region>
<code>94043-2186</code>
<country>US</country></postal>
<email>mrose@dbc.mtview.ca.us</email></address></author>
<date month='May' year='1996' /></front>
<seriesInfo name='STD' value='53' />
<seriesInfo name='RFC' value='1939' />
<format type='TXT' octets='47018' target='ftp://ftp.isi.edu/in-notes/rfc1939.txt' />
</reference>

<reference anchor='RFC2459'>
<front>
<title abbrev='Internet X.509 Public Key Infrastructure'>Internet X.509 Public Key Infrastructure Certificate and CRL Profile</title>
<author initials='R.' surname='Housley' fullname='Russell Housley'>
<organization>SPYRUS</organization>
<address>
<postal>
<street>381 Elden Street</street>
<street>Suite 1120</street>
<city>Herndon</city>
<region>VA</region>
<code>20170</code>
<country>US</country></postal>
<email>housley@spyrus.com</email></address></author>
<author initials='W.' surname='Ford' fullname='Warwick Ford'>
<organization>VeriSign, Inc.</organization>
<address>
<postal>
<street>One Alewife Center</street>
<city>Cambridge</city>
<region>MA</region>
<code>02140</code>
<country>US</country></postal>
<email>wford@verisign.com</email></address></author>
<author initials='T.' surname='Polk' fullname='Tim Polk'>
<organization>NIST</organization>
<address>
<postal>
<street />
<city>Gaithersburg</city>
<region>MD</region>
<code>20899</code>
<country>US</country></postal>
<email>wpolk@nist.gov</email></address></author>
<author initials='D.' surname='Solo' fullname='David Solo'>
<organization>Citicorp</organization>
<address>
<postal>
<street>666 Fifth Ave</street>
<street>3rd Floor</street>
<city>New York</city>
<region>NY</region>
<code>10103</code>
<country>US</country></postal>
<email>david.solo@citicorp.com</email></address></author>
<date year='1999' month='January' />
<abstract>
<t>This memo profiles the X.509 v3 certificate and  X.509 v2 CRL for use in the Internet.  An overview of the approach and model are provided  as an introduction.  The .509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms (e.g., IP addresses).  Standard certificate extensions are described and one new Internet-specific extension is defined.  A required set of certificate extensions is specified.  The X.509 v2 CRL format is described and a required extension set is defined as well.  An algorithm for X.509 certificate path validation is described. Supplemental information is provided describing the format of public keys and digital signatures in X.509 certificates for common Internet public key encryption algorithms (i.e., RSA, DSA, and Diffie-Hellman).  ASN.1 modules and examples are provided in the appendices.</t>
<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>
<t>Please send comments on this document to the ietf-pkix@imc.org mail list.</t></abstract></front>
<seriesInfo name='RFC' value='2459' />
<format type='TXT' octets='278438' target='ftp://ftp.isi.edu/in-notes/rfc2459.txt' />
</reference>

<reference anchor='SECTERMS'>
<front>
<title>Internet Security Glossary, Version 2</title>
<author initials='R.' surname='Shirey' fullname='R. Shirey'>
<organization /></author>
<date year='2007' month='August' />
<abstract>
<t>This Glossary provides definitions, abbreviations, and explanations of terminology for information system security.  The 334 pages of entries offer recommendations to improve the comprehensibility of written material that is generated in the Internet Standards Process (RFC 2026).  The recommendations follow the principles that such writing should (a) use the same term or definition whenever the same concept is mentioned; (b) use terms in their plainest, dictionary sense; (c) use terms that are already well-established in open publications; and (d) avoid terms that either favor a particular vendor or favor a particular technology or mechanism over other, competing techniques that already exist or could be developed.  This memo provides information for the Internet community.</t></abstract></front>
<seriesInfo name='RFC' value='4949' />
<format type='TXT' octets='867626' target='ftp://ftp.isi.edu/in-notes/rfc4949.txt' />
</reference>

<reference anchor='SIP'>
<front>
<title>SIP: Session Initiation Protocol</title>
<author initials='J.' surname='Rosenberg' fullname='J. Rosenberg'>
<organization /></author>
<author initials='H.' surname='Schulzrinne' fullname='H. Schulzrinne'>
<organization /></author>
<author initials='G.' surname='Camarillo' fullname='G. Camarillo'>
<organization /></author>
<author initials='A.' surname='Johnston' fullname='A. Johnston'>
<organization /></author>
<author initials='J.' surname='Peterson' fullname='J. Peterson'>
<organization /></author>
<author initials='R.' surname='Sparks' fullname='R. Sparks'>
<organization /></author>
<author initials='M.' surname='Handley' fullname='M. Handley'>
<organization /></author>
<author initials='E.' surname='Schooler' fullname='E. Schooler'>
<organization /></author>
<date year='2002' month='June' />
<abstract>
<t>This document describes Session Initiation Protocol (SIP), an application-layer control (signaling) protocol for creating, modifying, and terminating sessions with one or more participants.  These sessions include Internet telephone calls, multimedia distribution, and multimedia conferences. [STANDARDS TRACK]</t></abstract></front>
<seriesInfo name='RFC' value='3261' />
<format type='TXT' octets='647976' target='ftp://ftp.isi.edu/in-notes/rfc3261.txt' />
</reference>

<reference anchor='SIP-CERTS'>
<front>
<title>Domain Certificates in the Session Initiation Protocol (SIP)</title>
<author initials='V' surname='Gurbani' fullname='Vijay  Gurbani'>
    <organization />
</author>
<author initials='S' surname='Lawrence' fullname='Scott Lawrence'>
    <organization />
</author>
<author initials='B' surname='Laboratories' fullname='Bell Laboratories'>
    <organization />
</author>
<date month='May' day='18' year='2009' />
<abstract><t>This document describes how to construct and interpret certain information in a X.509 PKIX-compliant certificate for use in a Session Initiation Protocol (SIP) over Transport Layer Security (TLS) connection.  More specifically, this document describes how to encode and extract the identity of a SIP domain in a certificate and how to use that identity for SIP domain authentication.  As such, this document is relevant both to implementors of SIP and to issuers of cetificates.</t></abstract>
</front>
<seriesInfo name='Internet-Draft' value='draft-ietf-sip-domain-certs-04' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-sip-domain-certs-04.txt' />
</reference>

<reference anchor='SIP-LOC'>
<front>
<title>Session Initiation Protocol (SIP): Locating SIP Servers</title>
<author initials='J.' surname='Rosenberg' fullname='J. Rosenberg'>
<organization /></author>
<author initials='H.' surname='Schulzrinne' fullname='H. Schulzrinne'>
<organization /></author>
<date year='2002' month='June' />
<abstract>
<t>The Session Initiation Protocol (SIP) uses DNS procedures to allow a client to resolve a SIP Uniform Resource Identifier (URI) into the IP address, port, and transport protocol of the next hop to contact.  It also uses DNS to allow a server to send a response to a backup client if the primary client has failed.  This document describes those DNS procedures in detail. [STANDARDS TRACK]</t></abstract></front>
<seriesInfo name='RFC' value='3263' />
<format type='TXT' octets='42310' target='ftp://ftp.isi.edu/in-notes/rfc3263.txt' />
</reference>

<reference anchor='SMTP'>
<front>
<title>Simple Mail Transfer Protocol</title>
<author initials='J.' surname='Klensin' fullname='J. Klensin'>
<organization /></author>
<date year='2008' month='October' />
<abstract>
<t>This document is a specification of the basic protocol for Internet electronic mail transport.  It consolidates, updates, and clarifies several previous documents, making all or parts of most of them obsolete.  It covers the SMTP extension mechanisms and best practices for the contemporary Internet, but does not provide details about particular extensions.  Although SMTP was designed as a mail transport and delivery protocol, this specification also contains information that is important to its use as a "mail submission" protocol for "split-UA" (User Agent) mail reading systems and mobile environments. [STANDARDS TRACK]</t></abstract></front>
<seriesInfo name='RFC' value='5321' />
<format type='TXT' octets='225929' target='ftp://ftp.isi.edu/in-notes/rfc5321.txt' />
</reference>

<reference anchor='SMTP-AUTH'>
<front>
<title>SMTP Service Extension for Authentication</title>
<author initials='R.' surname='Siemborski' fullname='R. Siemborski'>
<organization /></author>
<author initials='A.' surname='Melnikov' fullname='A. Melnikov'>
<organization /></author>
<date year='2007' month='July' />
<abstract>
<t>This document defines a Simple Mail Transport Protocol (SMTP) extension whereby an SMTP client may indicate an authentication mechanism to the server, perform an authentication protocol exchange, and optionally negotiate a security layer for subsequent protocol interactions during this session. This extension includes a profile of the Simple Authentication and Security Layer (SASL) for SMTP.&lt;/t>&lt;t> This document obsoletes RFC 2554. [STANDARDS TRACK]</t></abstract></front>
<seriesInfo name='RFC' value='4954' />
<format type='TXT' octets='43493' target='ftp://ftp.isi.edu/in-notes/rfc4954.txt' />
</reference>

<reference anchor='SMTP-TLS'>
<front>
<title>SMTP Service Extension for Secure SMTP over Transport Layer Security</title>
<author initials='P.' surname='Hoffman' fullname='P. Hoffman'>
<organization /></author>
<date year='2002' month='February' />
<abstract>
<t>This document describes an extension to the SMTP (Simple Mail Transfer Protocol) service that allows an SMTP server and client to use TLS (Transport Layer Security) to provide private, authenticated communication over the Internet.  This gives SMTP agents the ability to protect some or all of their communications from eavesdroppers and attackers. [STANDARDS TRACK]</t></abstract></front>
<seriesInfo name='RFC' value='3207' />
<format type='TXT' octets='18679' target='ftp://ftp.isi.edu/in-notes/rfc3207.txt' />
</reference>

<reference anchor='SYSLOG'>
<front>
<title>The Syslog Protocol</title>
<author initials='R.' surname='Gerhards' fullname='R. Gerhards'>
<organization /></author>
<date year='2009' month='March' />
<abstract>
<t>This document describes the syslog protocol, which is used to convey event notification messages. This protocol utilizes a layered architecture, which allows the use of any number of transport protocols for transmission of syslog messages. It also provides a message format that allows vendor-specific extensions to be provided in a structured way.&lt;/t>&lt;t> This document has been written with the original design goals for traditional syslog in mind. The need for a new layered specification has arisen because standardization efforts for reliable and secure syslog extensions suffer from the lack of a Standards-Track and transport-independent RFC. Without this document, each other standard needs to define its own syslog packet format and transport mechanism, which over time will introduce subtle compatibility issues. This document tries to provide a foundation that syslog extensions can build on. This layered architecture approach also provides a solid basis that allows code to be written once for each syslog feature rather than once for each transport. [STANDARDS TRACK]</t></abstract></front>
<seriesInfo name='RFC' value='5424' />
<format type='TXT' octets='85162' target='ftp://ftp.isi.edu/in-notes/rfc5424.txt' />
</reference>

<reference anchor='SYSLOG-TLS'>
<front>
<title>Transport Layer Security (TLS) Transport Mapping for Syslog</title>
<author initials='F.' surname='Miao' fullname='F. Miao'>
<organization /></author>
<author initials='Y.' surname='Ma' fullname='Y. Ma'>
<organization /></author>
<author initials='J.' surname='Salowey' fullname='J. Salowey'>
<organization /></author>
<date year='2009' month='March' />
<abstract>
<t>This document describes the use of Transport Layer Security (TLS) to provide a secure connection for the transport of syslog messages.  This document describes the security threats to syslog and how TLS can be used to counter such threats. [STANDARDS TRACK]</t></abstract></front>
<seriesInfo name='RFC' value='5425' />
<format type='TXT' octets='28159' target='ftp://ftp.isi.edu/in-notes/rfc5425.txt' />
</reference>

<reference anchor='TLS'>
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.2</title>
<author initials='T.' surname='Dierks' fullname='T. Dierks'>
<organization /></author>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'>
<organization /></author>
<date year='2008' month='August' />
<abstract>
<t>This document specifies Version 1.2 of the Transport Layer Security (TLS) protocol.  The TLS protocol provides communications security over the Internet.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery. [STANDARDS TRACK]</t></abstract></front>
<seriesInfo name='RFC' value='5246' />
<format type='TXT' octets='222395' target='ftp://ftp.isi.edu/in-notes/rfc5246.txt' />
</reference>

<reference anchor='URI'>
<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='ftp://ftp.isi.edu/in-notes/rfc3986.txt' />
<format type='HTML' octets='200858' target='http://xml.resource.org/public/rfc/html/rfc3986.html' />
<format type='XML' octets='165759' target='http://xml.resource.org/public/rfc/xml/rfc3986.xml' />
</reference>

<reference anchor="USINGTLS">
<front>
<title>Using TLS with IMAP, POP3 and ACAP</title>
<author initials='C.' surname='Newman' fullname='Chris Newman'>
<organization>Innosoft International, Inc.</organization>
<address>
<postal>
<street>1050 Lakes Drive</street>
<city>West Covina</city>
<region>CA</region>
<code>91790</code>
<country>US</country></postal>
<email>chris.newman@innosoft.com</email></address></author>
<date month='June' year='1999' /></front>
<seriesInfo name='RFC' value='2595' />
<format type='TXT' octets='32440' target='ftp://ftp.isi.edu/in-notes/rfc2595.txt' />
</reference>

<reference anchor='XMPP'>
<front>
<title abbrev='XMPP Core'>Extensible Messaging and Presence Protocol (XMPP): Core</title>
<author initials='P.' surname='Saint-Andre' fullname='Peter Saint-Andre' role='editor'>
<organization>Jabber Software Foundation</organization>
<address>
<email>stpeter@jabber.org</email></address></author>
<date year='2004' month='October' />
<area>Applications</area>
<workgroup>XMPP Working Group</workgroup>
<keyword>RFC</keyword>
<keyword>Request for Comments</keyword>
<keyword>I-D</keyword>
<keyword>Internet-Draft</keyword>
<keyword>XMPP</keyword>
<keyword>Extensible Messaging and Presence Protocol</keyword>
<keyword>Jabber</keyword>
<keyword>IM</keyword>
<keyword>Instant Messaging</keyword>
<keyword>Presence</keyword>
<keyword>XML</keyword>
<keyword>Extensible Markup Language</keyword>
<abstract>
<t>This memo defines the core features of the Extensible Messaging and Presence Protocol (XMPP), a protocol for streaming Extensible Markup Language (XML) elements in order to exchange structured information in close to real time between any two network endpoints.  While XMPP provides a generalized, extensible framework for exchanging XML data, it is used mainly for the purpose of building instant messaging and presence applications that meet the requirements of RFC 2779.</t></abstract></front>
<seriesInfo name='RFC' value='3920' />
<format type='TXT' octets='194313' target='ftp://ftp.isi.edu/in-notes/rfc3920.txt' />
<format type='HTML' octets='237435' target='http://xml.resource.org/public/rfc/html/rfc3920.html' />
<format type='XML' octets='234474' target='http://xml.resource.org/public/rfc/xml/rfc3920.xml' />
</reference>

<reference anchor='XMPPBIS'>
<front>
<title>Extensible Messaging and Presence Protocol (XMPP): Core</title>
<author initials='P' surname='Saint-Andre' fullname='Peter Saint-Andre'>
    <organization />
</author>
<date month='November' day='17' year='2009' />
<abstract><t>This document defines the core features of the Extensible Messaging and Presence Protocol (XMPP), a technology for streaming Extensible Markup Language (XML) elements for the purpose of exchanging structured information in close to real time between any two or more network-aware entities.  XMPP provides a generalized, extensible framework for incrementally exchanging XML data, upon which a variety of applications can be built.  The framework includes methods for stream setup and teardown, channel encryption, authentication of a client to a server and of one server to another server, and primitives for push-style messages, publication of network availability information ("presence"), and request-response interactions.  This document also specifies the format for XMPP addresses, which are fully internationalizable.  This document obsoletes RFC 3920.</t></abstract>
</front>
<seriesInfo name='Internet-Draft' value='draft-ietf-xmpp-3920bis-04' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-xmpp-3920bis-04.txt' />
</reference>

    </references>

    <section title="Prior Art" anchor="prior">
      <t>This section is non-normative.</t>
      <t>The recommendations in this document are an abstraction from recommendations in specifications for a wide range of application protocols.  For the purpose of comparison and to delineate the history of thinking about server identity verification within the IETF, this informative section gathers together prior art by including the exact text from various RFCs (the only modifications are changes to the names of several references to maintain coherence with the main body of this document, and the elision of irrelevant text as marked by the characters "[...]").</t>
      <section title="IMAP, POP3, and ACAP (1999)" anchor="prior-imap">
        <t>In 1999, <xref target='USINGTLS'/> specified the following text regarding server identity verification in IMAP, POP3, and ACAP:</t>
        <t>######</t>
        <t>2.4. Server Identity Check</t>
        <t>During the TLS negotiation, the client MUST check its understanding of the server hostname against the server's identity as presented in the server Certificate message, in order to prevent man-in-the-middle attacks.  Matching is performed according to these rules:</t>
        <t>
          <list style='symbols'>
            <t>The client MUST use the server hostname it used to open the connection as the value to compare against the server name as expressed in the server certificate.  The client MUST NOT use any form of the server hostname derived from an insecure remote source (e.g., insecure DNS lookup).  CNAME canonicalization is not done.</t>
            <t>If a subjectAltName extension of type dNSName is present in the certificate, it SHOULD be used as the source of the server's identity.</t>
            <t>Matching is case-insensitive.</t>
            <t>A "*" wildcard character MAY be used as the left-most name component in the certificate.  For example, *.example.com would match a.example.com, foo.example.com, etc. but would not match example.com.</t>
            <t>If the certificate contains multiple names (e.g. more than one dNSName field), then a match with any one of the fields is considered acceptable.</t>
          </list>
        </t>
        <t>If the match fails, the client SHOULD either ask for explicit user confirmation, or terminate the connection and indicate the server's identity is suspect.</t>
        <t>######</t>
      </section>
      <section title="HTTP (2000)" anchor="prior-http">
        <t>In 2000, <xref target='HTTP-TLS'/> specified the following text regarding server identity verification in HTTP:</t>
        <t>######</t>
        <t>3.1. Server Identity</t>
        <t>In general, HTTP/TLS requests are generated by dereferencing a URI.  As a consequence, the hostname for the server is known to the client.  If the hostname is available, the client MUST check it against the server's identity as presented in the server's Certificate message, in order to prevent man-in-the-middle attacks.</t>
        <t>If the client has external information as to the expected identity of the server, the hostname check MAY be omitted. (For instance, a client may be connecting to a machine whose address and hostname are dynamic but the client knows the certificate that the server will present.) In such cases, it is important to narrow the scope of acceptable certificates as much as possible in order to prevent man in the middle attacks.  In special cases, it may be appropriate for the client to simply ignore the server's identity, but it must be understood that this leaves the connection open to active attack.</t>
        <t>If a subjectAltName extension of type dNSName is present, that MUST be used as the identity. Otherwise, the (most specific) Common Name field in the Subject field of the certificate MUST be used. Although the use of the Common Name is existing practice, it is deprecated and Certification Authorities are encouraged to use the dNSName instead.</t>
        <t>Matching is performed using the matching rules specified by <xref target='RFC2459'/>.  If more than one identity of a given type is present in the certificate (e.g., more than one dNSName name, a match in any one of the set is considered acceptable.) Names may contain the wildcard character * which is considered to match any single domain name component or component fragment. E.g., *.a.com matches foo.a.com but not bar.foo.a.com. f*.com matches foo.com but not bar.com.</t>
        <t>In some cases, the URI is specified as an IP address rather than a hostname. In this case, the iPAddress subjectAltName must be present in the certificate and must exactly match the IP in the URI.</t>
        <t>If the hostname does not match the identity in the certificate, user oriented clients MUST either notify the user (clients MAY give the user the opportunity to continue with the connection in any case) or terminate the connection with a bad certificate error. Automated clients MUST log the error to an appropriate audit log (if available) and SHOULD terminate the connection (with a bad certificate error).  Automated clients MAY provide a configuration setting that disables this check, but MUST provide a setting which enables it.</t>
        <t>Note that in many cases the URI itself comes from an untrusted source. The above-described check provides no protection against attacks where this source is compromised. For example, if the URI was obtained by clicking on an HTML page which was itself obtained without using HTTP/TLS, a man in the middle could have replaced the URI.  In order to prevent this form of attack, users should carefully examine the certificate presented by the server to determine if it meets their expectations.</t>
        <t>######</t>
      </section>
      <section title="LDAP (2000/2006)" anchor="prior-ldap">
        <t>In 2000, <xref target='LDAP-TLS'/> specified the following text regarding server identity verification in LDAP:</t>
        <t>######</t>
        <t>3.6. Server Identity Check</t>
        <t>The client MUST check its understanding of the server's hostname against the server's identity as presented in the server's Certificate message, in order to prevent man-in-the-middle attacks.</t>
        <t>Matching is performed according to these rules:</t>
        <t>
          <list style='symbols'>
            <t>The client MUST use the server hostname it used to open the LDAP connection as the value to compare against the server name as expressed in the server's certificate.  The client MUST NOT use the server's canonical DNS name or any other derived form of name.</t>
            <t>If a subjectAltName extension of type dNSName is present in the certificate, it SHOULD be used as the source of the server's identity.</t>
            <t>Matching is case-insensitive.</t>
            <t>The "*" wildcard character is allowed.  If present, it applies only to the left-most name component.</t>
          </list>
        </t>
        <t>E.g. *.bar.com would match a.bar.com, b.bar.com, etc. but not bar.com.  If more than one identity of a given type is present in the certificate (e.g. more than one dNSName name), a match in any one of the set is considered acceptable.</t>
        <t>If the hostname does not match the dNSName-based identity in the certificate per the above check, user-oriented clients SHOULD either notify the user (clients MAY give the user the opportunity to continue with the connection in any case) or terminate the connection and indicate that the server's identity is suspect. Automated clients SHOULD close the connection, returning and/or logging an error indicating that the server's identity is suspect.</t>
        <t>Beyond the server identity checks described in this section, clients SHOULD be prepared to do further checking to ensure that the server is authorized to provide the service it is observed to provide. The client MAY need to make use of local policy information.</t>
        <t>######</t>
        <t>In 2006, <xref target='LDAP-AUTH'/> specified the following text regarding server identity verification in LDAP:</t>
        <t>######</t>
        <t>3.1.3. Server Identity Check</t>
        <t>In order to prevent man-in-the-middle attacks, the client MUST verify the server's identity (as presented in the server's Certificate message).  In this section, the client's understanding of the server's identity (typically the identity used to establish the transport connection) is called the "reference identity".</t>
        <t>The client determines the type (e.g., DNS name or IP address) of the reference identity and performs a comparison between the reference identity and each subjectAltName value of the corresponding type until a match is produced.  Once a match is produced, the server's identity has been verified, and the server identity check is complete.  Different subjectAltName types are matched in different ways.  Sections 3.1.3.1 - 3.1.3.3 explain how to compare values of various subjectAltName types.</t>
        <t>The client may map the reference identity to a different type prior to performing a comparison.  Mappings may be performed for all available subjectAltName types to which the reference identity can be mapped; however, the reference identity should only be mapped to types for which the mapping is either inherently secure (e.g., extracting the DNS name from a URI to compare with a subjectAltName of type dNSName) or for which the mapping is performed in a secure manner (e.g., using <xref target='DNSSEC'/>, or using user- or admin-configured host-to-address/address-to-host lookup tables).</t>
        <t>The server's identity may also be verified by comparing the reference identity to the Common Name (CN) <xref target='LDAP-SCHEMA'/> value in the leaf Relative Distinguished Name (RDN) of the subjectName field of the server's certificate.  This comparison is performed using the rules for comparison of DNS names in Section 3.1.3.1, below, with the exception that no wildcard matching is allowed.  Although the use of the Common Name value is existing practice, it is deprecated, and Certification Authorities are encouraged to provide subjectAltName values instead.  Note that the TLS implementation may represent DNs in certificates according to X.500 or other conventions.  For example, some X.500 implementations order the RDNs in a DN using a left-to-right (most significant to least significant) convention instead of LDAP's right-to-left convention.</t>
        <t>If the server identity check fails, user-oriented clients SHOULD either notify the user (clients may give the user the opportunity to continue with the LDAP session in this case) or close the transport connection and indicate that the server's identity is suspect.  Automated clients SHOULD close the transport connection and then return or log an error indicating that the server's identity is suspect or both.</t>
        <t>Beyond the server identity check described in this section, clients should be prepared to do further checking to ensure that the server is authorized to provide the service it is requested to provide.  The client may need to make use of local policy information in making this determination.</t>
        <t>3.1.3.1. Comparison of DNS Names</t>
        <t>If the reference identity is an internationalized domain name, conforming implementations MUST convert it to the ASCII Compatible Encoding (ACE) format as specified in Section 4 of RFC 3490 <xref target='IDNA2003'/> before comparison with subjectAltName values of type dNSName.  Specifically, conforming implementations MUST perform the conversion operation specified in Section 4 of RFC 3490 as follows:</t>
        <t>
          <list style='symbols'>
            <t>in step 1, the domain name SHALL be considered a "stored string";</t>
            <t>in step 3, set the flag called "UseSTD3ASCIIRules";</t>
            <t>in step 4, process each label with the "ToASCII" operation; and</t>
            <t>in step 5, change all label separators to U+002E (full stop).</t>
          </list>
        </t>
        <t>After performing the "to-ASCII" conversion, the DNS labels and names MUST be compared for equality according to the rules specified in Section 3 of RFC3490.</t>
        <t>The '*' (ASCII 42) wildcard character is allowed in subjectAltName values of type dNSName, and then only as the left-most (least significant) DNS label in that value.  This wildcard matches any left-most DNS label in the server name.  That is, the subject *.example.com matches the server names a.example.com and b.example.com, but does not match example.com or a.b.example.com.</t>
        <t>3.1.3.2. Comparison of IP Addresses</t>
        <t>When the reference identity is an IP address, the identity MUST be converted to the "network byte order" octet string representation <xref target='IP'/> <xref target='IPv6'/>.  For IP Version 4, as specified in RFC 791, the octet string will contain exactly four octets.  For IP Version 6, as specified in RFC 2460, the octet string will contain exactly sixteen octets.  This octet string is then compared against subjectAltName values of type iPAddress.  A match occurs if the reference identity octet string and value octet strings are identical.</t>
        <t>3.1.3.3. Comparison of Other subjectName Types</t>
        <t>Client implementations MAY support matching against subjectAltName values of other types as described in other documents.</t>
        <t>######</t>
      </section>
      <section title="SMTP (2002/2007)" anchor="prior-smtp">
        <t>In 2002, <xref target='SMTP-TLS'/> specified the following text regarding server identity verification in SMTP:</t>
        <t>######</t>
        <t>4.1 Processing After the STARTTLS Command</t>
        <t>[...]</t>
        <t>The decision of whether or not to believe the authenticity of the other party in a TLS negotiation is a local matter.  However, some general rules for the decisions are:</t>
        <t>
          <list style='symbols'>
            <t>A SMTP client would probably only want to authenticate an SMTP server whose server certificate has a domain name that is the domain name that the client thought it was connecting to.</t>
          </list>
        </t>
        <t>[...]</t>
        <t>######</t>
        <t>In 2006, <xref target='SMTP-AUTH'/> specified the following text regarding server identity verification in SMTP:</t>
        <t>######</t>
        <t>14. Additional Requirements When Using SASL PLAIN over TLS</t>
        <t>[...]</t>
        <t>After a successful <xref target='TLS'/> negotiation, the client MUST check its understanding of the server hostname against the server's identity as presented in the server Certificate message, in order to prevent man-in-the-middle attacks.  If the match fails, the client MUST NOT attempt to authenticate using the SASL PLAIN mechanism.  Matching is performed according to the following rules:</t>
        <t>
          <list style='empty'>
            <t>The client MUST use the server hostname it used to open the connection as the value to compare against the server name as expressed in the server certificate.  The client MUST NOT use any form of the server hostname derived from an insecure remote source (e.g., insecure DNS lookup).  CNAME canonicalization is not done.</t>
            <t>If a subjectAltName extension of type dNSName is present in the certificate, it SHOULD be used as the source of the server's identity.</t>
            <t>Matching is case-insensitive.</t>
            <t>A "*" wildcard character MAY be used as the leftmost name component in the certificate.  For example, *.example.com would match a.example.com, foo.example.com, etc., but would not match example.com.</t>
            <t>If the certificate contains multiple names (e.g., more than one dNSName field), then a match with any one of the fields is considered acceptable.</t>
          </list>
        </t>
        <t>######</t>
      </section>
      <section title="XMPP (2004)" anchor="prior-xmpp">
        <t>In 2004, <xref target='XMPP'/> specified the following text regarding server identity verification in XMPP:</t>
        <t>######</t>
        <t>14.2. Certificate Validation</t>
        <t>When an XMPP peer communicates with another peer securely, it MUST validate the peer's certificate.  There are three possible cases:</t>
        <t>
          <list style='hanging'>
            <t hangText='Case #1:'>The peer contains an End Entity certificate which appears to be certified by a chain of certificates terminating in a trust anchor (as described in Section 6.1 of <xref target="X509"/>).</t>
            <t hangText='Case #2:'>The peer certificate is certified by a Certificate Authority not known to the validating peer.</t>
            <t hangText='Case #3:'>The peer certificate is self-signed.</t>
          </list>
        </t>
        <t>In Case #1, the validating peer MUST do one of two things:
          <list style="numbers">
            <t>Verify the peer certificate according to the rules of <xref target="X509"/>.  The certificate SHOULD then be checked against the expected identity of the peer following the rules described in <xref target="HTTP-TLS"/>, except that a subjectAltName extension of type "xmpp" MUST be used as the identity if present.  If one of these checks fails, user-oriented clients MUST either notify the user (clients MAY give the user the opportunity to continue with the connection in any case) or terminate the connection with a bad certificate error.  Automated clients SHOULD terminate the connection (with a bad certificate error) and log the error to an appropriate audit log.  Automated clients MAY provide a configuration setting that disables this check, but MUST provide a setting that enables it.</t>
            <t>The peer SHOULD show the certificate to a user for approval, including the entire certificate chain.  The peer MUST cache the certificate (or some non-forgeable representation such as a hash).  In future connections, the peer MUST verify that the same certificate was presented and MUST notify the user if it has changed.</t>
          </list>
        </t>
        <t>In Case #2 and Case #3, implementations SHOULD act as in (2) above.</t>
        <t>######</t>
        <t>At the time of this writing, <xref target='XMPPBIS'/> refers to this document for rules regarding server identity verification in XMPP.</t>
      </section>
      <section title="NNTP (2006)" anchor="prior-nntp">
        <t>In 2006, <xref target='NNTP-TLS'/> specified the following text regarding server identity verification in NNTP:</t>
        <t>######</t>
        <t>5. Security Considerations</t>
        <t>[...]</t>
        <t>During the TLS negotiation, the client MUST check its understanding of the server hostname against the server's identity as presented in the server Certificate message, in order to prevent man-in-the-middle attacks.  Matching is performed according to these rules:</t>
        <t>
          <list style='symbols'>
            <t>The client MUST use the server hostname it used to open the connection (or the hostname specified in TLS "server_name" extension <xref target='TLS'/>) as the value to compare against the server name as expressed in the server certificate.  The client MUST NOT use any form of the server hostname derived from an insecure remote source (e.g., insecure DNS lookup).  CNAME canonicalization is not done.</t>
            <t>If a subjectAltName extension of type dNSName is present in the certificate, it SHOULD be used as the source of the server's identity.</t>
            <t>Matching is case-insensitive.</t>
            <t>A "*" wildcard character MAY be used as the left-most name component in the certificate.  For example, *.example.com would match a.example.com, foo.example.com, etc., but would not match example.com.</t>
            <t>If the certificate contains multiple names (e.g., more than one dNSName field), then a match with any one of the fields is considered acceptable.</t>
          </list>
        </t>
        <t>If the match fails, the client SHOULD either ask for explicit user confirmation or terminate the connection with a QUIT command and indicate the server's identity is suspect.</t>
        <t> Additionally, clients MUST verify the binding between the identity of the servers to which they connect and the public keys presented by those servers.  Clients SHOULD implement the algorithm in Section 6 of <xref target='X509'/> for general certificate validation, but MAY supplement that algorithm with other validation methods that achieve equivalent levels of verification (such as comparing the server certificate against a local store of already-verified certificates and identity bindings).</t>
        <t>######</t>
      </section>
      <section title="NETCONF (2006/2009)" anchor="prior-netconf">
        <t>In 2006, <xref target='NETCONF-SSH'/> specified the following text regarding server identity verification in NETCONF:</t>
        <t>######</t>
        <t>6. Security Considerations</t>
        <t>The identity of the server MUST be verified and authenticated by the client according to local policy before password-based authentication data or any configuration or state data is sent to or received from the server.  The identity of the client MUST also be verified and authenticated by the server according to local policy to ensure that the incoming client request is legitimate before any configuration or state data is sent to or received from the client.  Neither side should establish a NETCONF over SSH connection with an unknown, unexpected, or incorrect identity on the opposite side.</t>
        <t>######</t>
        <t>In 2009, <xref target='NETCONF-TLS'/> specified the following text regarding server identity verification in NETCONF:</t>
        <t>######</t>
        <t>3.1. Server Identity</t>
        <t>During the TLS negotiation, the client MUST carefully examine the certificate presented by the server to determine if it meets the client's expectations.  Particularly, the client MUST check its understanding of the server hostname against the server's identity as presented in the server Certificate message, in order to prevent man- in-the-middle attacks.</t>
        <t>Matching is performed according to the rules below (following the example of <xref target='NNTP-TLS'/>):</t>
        <t>
          <list style='symbols'>
            <t>The client MUST use the server hostname it used to open the connection (or the hostname specified in the TLS "server_name" extension <xref target='TLS'/>) as the value to compare against the server name as expressed in the server certificate.  The client MUST NOT use any form of the server hostname derived from an insecure remote source (e.g., insecure DNS lookup).  CNAME canonicalization is not done.</t>
            <t>If a subjectAltName extension of type dNSName is present in the certificate, it MUST be used as the source of the server's identity.</t>
            <t>Matching is case-insensitive.</t>
            <t>A "*" wildcard character MAY be used as the leftmost name component in the certificate.  For example, *.example.com would match a.example.com, foo.example.com, etc., but would not match example.com.</t>
            <t>If the certificate contains multiple names (e.g., more than one dNSName field), then a match with any one of the fields is considered acceptable.</t>
          </list>
        </t>
        <t>If the match fails, the client MUST either ask for explicit user confirmation or terminate the connection and indicate the server's identity is suspect.</t>
        <t>Additionally, clients MUST verify the binding between the identity of the servers to which they connect and the public keys presented by those servers.  Clients SHOULD implement the algorithm in Section 6 of <xref target='X509'/> for general certificate validation, but MAY supplement that algorithm with other validation methods that achieve equivalent levels of verification (such as comparing the server certificate against a local store of already-verified certificates and identity bindings).</t>
        <t>If the client has external information as to the expected identity of the server, the hostname check MAY be omitted.</t>
        <t>######</t>
      </section>
      <section title="Syslog (2009)" anchor="prior-syslog">
        <t>In 2009, <xref target='SYSLOG-TLS'/> specified the following text regarding server identity verification in Syslog:</t>
        <t>######</t>
        <t>5.2. Subject Name Authorization</t>
        <t>Implementations MUST support certification path validation <xref target='X509'/>.  In addition, they MUST support specifying the authorized peers using locally configured host names and matching the name against the certificate as follows.</t>
        <t>
          <list style='symbols'>
            <t>Implementations MUST support matching the locally configured host name against a dNSName in the subjectAltName extension field and SHOULD support checking the name against the common name portion of the subject distinguished name.</t>
            <t>The '*' (ASCII 42) wildcard character is allowed in the dNSName of the subjectAltName extension (and in common name, if used to store the host name), but only as the left-most (least significant) DNS label in that value.  This wildcard matches any left-most DNS label in the server name.  That is, the subject *.example.com matches the server names a.example.com and b.example.com, but does not match example.com or a.b.example.com.  Implementations MUST support wildcards in certificates as specified above, but MAY provide a configuration option to disable them.</t>
            <t>Locally configured names MAY contain the wildcard character to match a range of values.  The types of wildcards supported MAY be more flexible than those allowed in subject names, making it possible to support various policies for different environments.  For example, a policy could allow for a trust-root-based authorization where all credentials issued by a particular CA trust root are authorized.</t>
            <t>If the locally configured name is an internationalized domain name, conforming implementations MUST convert it to the ASCII Compatible Encoding (ACE) format for performing comparisons, as specified in Section 7 of <xref target='X509'/>.</t>
            <t>Implementations MAY support matching a locally configured IP address against an iPAddress stored in the subjectAltName extension.  In this case, the locally configured IP address is converted to an octet string as specified in <xref target='X509'/>, Section 4.2.1.6.  A match occurs if this octet string is equal to the value of iPAddress in the subjectAltName extension.</t>
          </list>
        </t>
        <t>######</t>
      </section>
      <section title="SIP (2010)" anchor="prior-sip">
        <t>At the time of this writing, <xref target='SIP-CERTS'/> specified text regarding server identity verification in the Session Initiation Protocol (SIP).  However, that specification has not yet been approved by the IESG and text cannot be considered final.</t>
        <t>The relevant text follows.</t>
        <t>######</t>
        <t>7.2. Comparing SIP Identities</t>
<t>When an implementation (either client or server) compares two values as SIP domain identities:

<list style='empty'>

<t>Implementations MUST compare only the DNS name component of each SIP domain identifier; 
an implementation MUST NOT use any scheme or parameters in the
comparison.</t>

<t>Implementations MUST compare the values as DNS names, which means that the
comparison is case insensitive as specified by <xref target="DNS-CASE"/>.  
Implementations MUST handle Internationalized Domain Names (IDNs)
in accordance with Section 7.2 of <xref target="X509"/>.</t>

<t>Implementations MUST match the values in their entirety:
<list>
<t>Implementations MUST NOT match suffixes.  For example,
"foo.example.com" does not match "example.com".</t>

<t>Implemenations MUST NOT match any form of wildcard, such as a leading "." or "*." with any other DNS label or sequence of labels.  For example, "*.example.com" matches only "*.example.com" but not "foo.example.com".   Similarly, ".example.com" matches only ".example.com", and does not match "foo.example.com."

 <list style="empty">
  <t><xref target="HTTP-TLS"/> allows the dNSName 
  component to contain a wildcard; e.g., "DNS:*.example.com".  
  <xref target="X509"/>, while not disallowing this 
  explicitly, leaves the interpretation of wildcards to the individual 
  specification.  <xref target="SIP"/> does not provide any 
  guidelines on the presence of wildcards in certificates.  Through the rule above, this document
  prohibits such wildcards in certificates for SIP domains.</t>
 </list>
</t>
</list>
</t>
</list>
</t>
        <t>######</t>
      </section>
    </section>

  </back>
</rfc>
