<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
    which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
    There has to be one entity for each item to be referenced. 
    An alternate method (rfc include) is described in the references. -->

<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2629 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2629.xml">
<!ENTITY RFC3552 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3552.xml">
<!ENTITY RFC5226 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5226.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
    please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
    (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
    (using these PIs as follows is RECOMMENDED by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="info" docName="draft-jilongwang-dnsop-tlsr-01" ipr="trust200902">
 <!-- category values: std, bcp, info, exp, and historic
    ipr values: trust200902, noModificationTrust200902, noDerivativesTrust200902,
       or pre5378Trust200902
    you can add the attributes updates="NNNN" and obsoletes="NNNN" 
    they will automatically be output with "(if approved)" -->

 <!-- ***** FRONT MATTER ***** -->

 <front>
   <!-- The abbreviated title is used in the page header - it is only necessary if the 
        full title is longer than 39 characters -->

   <title abbrev="TLSR">The DNS-Based scheme to revoke certificates in Transport Layer Security (TLS) Protocol: TLSR </title>

   <!-- add 'role="editor"' below for the editors if appropriate -->

   <!-- Another author who claims to be an editor -->

   <author fullname="Jilong Wang" initials="WJL" role="editor"
           surname="Wang">
     <organization>Tsinghua University</organization>

     <address>
       <postal>
         <street></street>

         <!-- Reorder these if your country does things differently -->

         <city>Beijing</city>

         <region></region>

         <code>100084</code>

         <country>China</country>
       </postal>
       
       <phone></phone>
       
       <email>wjl@tsinghua.edu.cn</email>
       
       <!-- uri and facsimile elements may also be added -->
     </address>
   </author>

   <author fullname="Changqing An" initials="CQA" role="editor"
           surname="An">
     <organization>Tsinghua University</organization>

     <address>
       <postal>
         <street></street>

         <!-- Reorder these if your country does things differently -->

         <city>Beijing</city>

         <region></region>

         <code>100084</code>

         <country>China</country>
       </postal>
       
       <phone></phone>
       
       <email>acq@tsinghua.edu.cn</email>
       
       <!-- uri and facsimile elements may also be added -->
     </address>
   </author>
  

   <author fullname="Chengyuan Zhang" initials="ZCY" role="editor"
     surname="Zhang">
     <organization>Tsinghua University</organization>
     
     <address>
       <postal>
         <street></street>
         
         <!-- Reorder these if your country does things differently -->
         
         <city>Beijing</city>
         
         <region></region>
         
         <code>100084</code>
         
         <country>China</country>
       </postal>
       
       <phone></phone>
       
       <email>chengyua21@mails.tsinghua.edu.cn</email>
       
       <!-- uri and facsimile elements may also be added -->
     </address>
   </author>
   
   <date year="2023" />

   <!-- If the month and year are both specified and are the current ones, xml2rfc will fill 
        in the current day for you. If only the current year is specified, xml2rfc will fill 
	 in the current day and month for you. If the year is not the current one, it is 
	 necessary to specify at least a month (xml2rfc assumes day="1" if not specified for the 
	 purpose of calculating the expiry date).  With drafts it is normally sufficient to 
	 specify just the year. -->

   <!-- Meta-data Declarations -->

   <area>Management</area>

   <workgroup>dnsop</workgroup>

   <!-- WG name at the upperleft corner of the doc,
        IETF is fine for individual submissions.  
	 If this element is not present, the default is "Network Working Group",
        which is used by the RFC Editor as a nod to the history of the IETF. -->

   <keyword>Internet-Draft</keyword>

   <!-- Keywords will be incorporated into HTML output
        files in a meta tag but they have no effect on text or nroff
        output. If you submit your draft to the RFC Editor, the
        keywords will be used for the search engine. -->

   <abstract>
     <t>This memo presents the definition of a new DNS resouce record type named TLSR, and then discusses a new framework for certificate revocation and certificate status verification. This document can solve the existing problems in the current certificate revocation schemes. This requires matching improvements in TLS client software, but no change in TLS server software. 
       </t>
   </abstract>
 </front>

 <middle>
   <section title="Introduction">
    <section title="Background and Motivation">
   	<t>
   	Digital certificates are the carrier of trust in the Web Public Key Infrastructure (PKI) system. A certificate is supposed to be treated as valid before their expiry date. However, if a certificate has security issues, such as using a compromised private key or an insecure encryption algorithm, it needs to be revoked as soon as possible because the websites using it are vulnerable to phishing and man-in-the-middle attacks. </t>

	  <t>
	 	Certificate Revocation List (CRL) <xref target="RFC5280"/> and Online Certificate Service Protocol (OCSP) <xref target="RFC6960"/>  are two methods to check the revocation status of a certificate. However, such methods can be slow and may have privacy issues. CRL and OCSP requires browsers to establish an additional HTTP connection with CAs, which is costly. Sending OCSP queries can leak the user's browsing history to CAs, which may cause privacy issues. Considering these reasons, the two methods are not commonly supported by modern browsers. Therefore, browsers need a fast and privacy-preserved method for checking the revocation status of a certificate.</t>

    <t>
    Another motivation is that the structure of web PKI has become more centralized over time with a small number of CAs issuing a large percentage of total certificates, but CAs are not always reliable and can get attacked and misbehave. If a CA is under attack, websites that use certificates issued by the CA have no choice but to wait for the CA to recover and revoke the fraudulent certificates. This may take as long as a few days, which is sufficient for attackers to launch a successful man-in-the-middle attack. Therefore, we want to provide a way for domain holders to take control of the revocation status of their own ceritificates and reduce the harm brought by compromised CAs.</t>
    </section>

    <section title="New Certificate Revocation Method">
    <t>
    This document defines a new DNS resource record type which provides a way for DNS domain name holders to quickly and independently revoke their certificates without the involvement of Certificate Authorities (CA). This document also defines a fast method for TLS clients to verify the status of a certficiate using DNS. Note that the DNS information needs to be protected by DNSSEC, which uses cryptographic keys and digital signatures to authenticate the retrieved DNS data. </t>
    <t>
    This document does not specify how the client validates the DNSSEC data. This document only relates to getting the DNS information for the certificate association securely using DNSSEC; other secure DNS mechanisms are out of scope.
    </t>
    </section>

    <section title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in <xref
      target="RFC2119">RFC 2119</xref>.</t>
    </section>
   </section>
  
  <!-- =========================================================SECTION 1=======================================================================-->
   <!-- This PI places the pagebreak correctly (before the section title) in the text output. -->
   <?rfc needLines="8" ?>

   <!-- =========================================================SECTION 2=======================================================================-->
   
   <section title="TLSR RR Type">

   <t>First we define a new type of DNS resource record named TLSR to store the information of revoked certificates. Note that although RFC6698 <xref target="RFC6698"/> has proposed TLSA record to store certificates in DNS resource record, we want to simplify it to reduce the overhead by storing revoked certificates in DNS servers.</t>
   <t>A TLSR RR consists of a one-octet selector field and and the certificate association data field.</t>
   <artwork name="" type="" align="left" alt="" pn="section-2-1">

                        1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Selector    |                                               /
   +-+-+-+-+-+-+-+-+         Certificate Association Data          /
   /                                                               /
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   </artwork>

   <section title="The Selector Field">
   <t>
    The first one-octet value, called "Selector", specifies which part of the TLS certificate presented by the server will be matched against the association data.
    This value is defined in a new IANA registry (see Section 8.1). The selectors defined in this document are: </t>

    <t>
    Full certificate: the Certificate binary structure as defined in RFC5280 <xref target="RFC5280"/></t>
    <t>
    SubjectPublicKeyInfo: DER-encoded binary structure as defined in RFC5280 <xref target="RFC5280"/></t>
    <t>
    Fingerprint: a secure one-way hash of the DER (distinguished encoding rules) form of the certificate as defined in RFC8122 <xref target="RFC8122"/></t>
    <t>
    Serial number: DER-encoded binary structure as defined in RFC5280 <xref target="RFC5280"/></t>
   </section>

   <section title="The Certificate Association Data Field">
   <t>This field specifies the "certificate association data" to be matched. These bytes are raw data of either the full certificate, its SubjectPublicKeyInfo, its fingerprint or its serial number, depending on the selector.</t>
   </section>

   <section title="TLSR RR Examples">
   <t>
   An example of a revoked certificate using the serial number as selector:</t>
   <artwork>
   www.example.com IN TLSR (
    3 1 034CA550FC5542C320057C7BEA24F5AA56D5)
   </artwork>
   </section>

   </section>

   <!--============================================================ SECTION III ==================================================================-->

   <section title="Use of TLSR Records">
    <section title="Revoke Certificates">
    <t>
    Domain owners can use TLSR Records to quickly revoke their certificates without the participation of CAs. When a certificate needs to be revoked, the domain owner can submit the certificate to the DNS provider, and the DNS provider must publish the corresponding TLSR record. A domain can have multiple TLSR records since the domain can have multiple revoked certificates. Note that domain holders SHOULD only use TLSR records to store certificates that need to be revoked, and expired certificates SHOULD NOT be stored with TLSR records. </t>

    </section>
    <section title="Verify the Status of a Certificate">
    <t>When a TLS client wants to build a HTTPS connection with a website, it SHOULD first query the DNS server to get the TLSR records of this website. The TLS client needs to send a TLSR type DNS query to the DNS server for this domain's TLSR records, and the DNS server is supposed to respond with all the TLSR records of this domain. After receiving the TLSR records, the TLS client SHOULD parse these records and get the identifiers of the domain's revoked certificates. Then when the TLS client receives the website's certificate during the handshake, the browser should compare the identifiers specified by the TLSR records with the corresponding data in the certificate. If the data matches, which indicates that the certificate has been revoked by the domain owner and the connection is no longer secure, then the browser MUST terminate the connection immediately.</t>
    </section>
   </section>

   <section title="The Certificate Revocation Scheme">
   <t>
   This document describes a new certificate revocation scheme that is an alternative to CRL and OCSP. This scheme can provide more flexibility to the domain name holders and reduce the impact of attacks on CAs. Besides, our scheme also solves the privacy problem brought by querying the OCSP server. 
   </t>
    <section title="Participants">
    <t>
    The participants and their roles in the certificate revocation process are as follows:
    </t>
    <ul>
    <li>CA: CA can issue certificates to domain owners. </li>
    <li>DNS Server: DNS servers use TLSR records to store the association between domains and their revoked certificates. </li>
    <li>TLS Client: TLS Clients can send TLSR requests to the DNS server to get the domain's list of revoked certificates. The browser SHOULD verify that the certificate received during the TLS handshake is not in the list, otherwise the connection SHOULD be terminated immediately. Note that TLS clients can use this list to check the status of leaf certificates, and TLS clients can use mechanisms like OneCRL for checking the revocation status of intermediate certificates and root certificates. </li>  
    <li>Domain Holder: Domain holders can send request with the certificate to be revoked to the DNS server. DNS server SHOULD build a new TLSR resource record according to the request and add it to the domain's DNS resource records. </li>
    </ul>
    <t>
    The picture below can describe the interactions between these participants. Suppose a CA issues the domain a certificate C0 and the domain holder wants to revoke the certificate since C0's private key is compromised. The domain holder submits C0 to the DNS server which adds a TLSR record for the domain. When a TLS client wants to connect with a domain using the revoked certificate, the client will find that the certificate is revoked immediately and abort the TLS connection.
    </t>
    <artwork>
  +---------+
  |    CA   |
  +---------+
       | C0
       V
  +---------+        +------------+        +------------+
  | Website |        | DNS Server |        | TLS Client |
  +---------+        +------------+        +------------+
       |                   |&lt;----- A, TLSR-------|
       |                   |----IP, Rev List----&gt;|
       |                   |             DNSSEC Validation
       |                   |                     |
       |&lt;========TLS Handshake Starts===========&gt;|
       |============ServerHello, C0=============&gt;|
       |                   |                     |
       |                   |            Validate(C0, RevList)
       |---------X Connection Abort X------------| 
  </artwork>
    </section>
   </section>

   <section title="Mandatory-to-Implement Features">
   <t></t>
    <section title="TLS Clients">
    <t>TLS clients conforming to this specification MUST be able to correctly interpret TLSR records with certificate selectors 0, 1, 2, and 3. TLS clients conforming to this specification MUST be able to compare a certificate association with a certificate from the TLS handshake using selector types 2 (fingerprint) and 3 (serial number), and SHOULD be able to make such comparisons with selector 0 (full certificate) and 1 (SubjectPublicKeyInfo).</t>
    </section>

    <section title="DNS Service Providers">
    <t>The DNS service providers MUST implement the support for TLSR records, including adding new TLSR records to a domain and responding TLSR queries correctly. </t>
    </section>
   </section>

   <section title="Security Considerations">
   <t>
   The security considerations are similar to that of TLSA records [RFC 6698]. The security of the DNS RRtype described in this document relies on the security of DNSSEC to verify that the TLSR record has not been altered. A rogue DNS administrator who changes the A, AAAA, and/or TLSR records for a domain name can cause the client to go to an unauthorized server that will appear authorized, unless the client performs PKIX certification path validation and rejects the certificate. However, that administrator could probably get a certificate issued by some CA anyway, so this is not an additional threat.
   </t>
    <section title="External DNSSEC Validators">
    <t>
    As indicated in RFC6698 <xref target="RFC6698"/>, Nothing prevents a compromised external DNSSEC validator from claiming that all the records it provides are secure, even if the data is falsified, unless the client checks the DNSSEC data itself (rendering the external validator unnecessary). For this reason, DNSSEC validation is best performed on-host, even when a secure path to an external validator is available. </t>
    </section>
    <section title="DNS Cache">
    <t>
    Similar to the situation in RFC6698 <xref target="RFC6698"/>, implementations should rely on their DNS resolver for confirmation of an association between a TLSR record and a DNS name, rather than caching the result of previous domain name lookups. If implementations cache the results of domain name lookups in order to achieve a performance improvement, they MUST observe the TTL information reported by DNS.  Implementations that fail to follow this rule could make an urgent certificate revocation become temporarily invisible and extend the attack window.
    </t>
    </section>
    <section title="Excessive TLSR Records">
    <t>Since a domain can have multiple TLSR Records and a TLSR record can store a full certificate, an attacker can register a legal domain then submit excessive TLSR Records to a DNS server to crush it. An attacker can also register a domain and submit many TLSR Records to the DNS server, then the attacker can spoof the victim's IP and send too many TLSR queries to the DNS server so that the target receives an amplification of the attacker's initial traffic, causing a denial-of-service. </t>
    <t>It is RECOMMENDED that the maximum number of TLSR records that a domain can have is limited, because normally a domain is supposed to not have so many revoked certificates since a certificate SHOULD only be revoked under urgent situations like compromised private key. It is also RECOMMENDED to limit the maximum size of one TLSR record. These limitations can increase the difficulty of launching such an amplification attack.</t>
    </section>
   </section> 

   <section anchor="IANA" title="IANA Considerations">
     <t>This document uses a new DNS RR type, TLSR, whose value is still to be determined by IANA.</t>
     <t>This document also creates a new registry, "TLSR Selectors", and the initial entries in the registry are:</t>
     <artwork>
    Value       Short description              Reference
    ------------------------------------------------------------
    TBD1        Full certificate          this RFC, section 2.1
    TBD2        SubjectPublicKeyInfo      this RFC, section 2.1
    TBD3        Fingerprint               this RFC, section 2.1
    TBD4        Serial number             this RFC, section 2.1
     </artwork>
   </section>

   <section anchor="Acknowledgements" title="Acknowledgements">
     <t>The authors would like to thank the support of Tsinghua. University. We also thank the following persons for their suggestions on earlier versions of this work, etc, for their. discussion, comments and suggestions. 
     </t>

   </section>
    
   <!-- Possibly a 'Contributors' section ... -->

   

   
 </middle>
  

 <!--  *****BACK MATTER ***** -->

 <back>
   <!-- References split into informative and normative -->

   <!-- There are 2 ways to insert reference entries from the citation libraries:
    1. define an ENTITY at the top, and use "ampersand character"RFC2629; here (as shown)
    2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xml"?> here
       (for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")

    Both are cited textually in the same manner: by using xref elements.
    If you use the PI option, xml2rfc will, by default, try to find included files in the same
    directory as the including file. You can also define the XML_LIBRARY environment variable
    with a value containing a set of directories to search.  These can be either in the local
    filing system or remote ones accessed by http (http://domain/dir/... ).-->

   <references title="Normative References">
     <!--?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml"?-->
    

     <reference anchor="RFC2119">
       <!-- the following is the minimum to make xml2rfc happy -->
       <front>
         <title>Key words for use in RFCs to Indicate
           Requirement Levels</title>

         <author initials="S." surname="Bradner">
           <organization>Harvard University</organization>
         </author>

         <date month="March" year="1997" />
       </front>
       <seriesInfo name="RFC" value="2119" />
     </reference>

     <reference anchor="RFC6698">
       <!-- the following is the minimum to make xml2rfc happy -->
       <front>
         <title>The DNS-Based Authentication of Named Entities (DANE) Transport Layer Security (TLS) Protocol: TLSA</title>

         <author initials="P." surname="Hoffman">
           <organization>VPN Consortium</organization>
         </author>

         <date month="August" year="2012" />
       </front>
       <seriesInfo name="RFC" value="6698" />
     </reference>

     <reference anchor="RFC5280">
       <!-- the following is the minimum to make xml2rfc happy -->
       <front>
         <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>

         <author initials="D." surname="Cooper">
           <organization>NIST</organization>
         </author>

         <date month="May" year="2008" />
       </front>
       <seriesInfo name="RFC" value="5280" />
     </reference>

     <reference anchor="RFC8122">
       <!-- the following is the minimum to make xml2rfc happy -->
       <front>
         <title>Connection-Oriented Media Transport over the Transport Layer Security (TLS) Protocol in the Session Description Protocol (SDP)</title>

         <author initials="J." surname="Lennox">
           <organization>Vidyo</organization>
         </author>

         <date month="March" year="2017" />
       </front>
       <seriesInfo name="RFC" value="8122" />
     </reference>

     <reference anchor="RFC6960">
       <!-- the following is the minimum to make xml2rfc happy -->
       <front>
         <title>X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP</title>

         <author initials="S." surname="Santesson">
           <organization>3xA Security</organization>
         </author>

         <date month="June" year="2013" />
       </front>
       <seriesInfo name="RFC" value="6960" />
     </reference>
     
   </references>

  
  

<section title="Practical Considerations">
  <section title="The choice of selector">
  <t>
   There are 4 types of data that can be used as unique identifiers for certificates: full certificate, SHA-256 fingerprint, public key and serial number. Although TLSA record supports storing a full certificate or a public key, the size of a full certificate or a public key (typically 2048bits) is still too large. The size of a SHA-256 fingerprint is 32 bytes and each certificate should have a unique one.  As for serial numbers, we examine about 2.5 million serial numbers in our downloaded CRLs, and we find that the size of the largest serial number is 20 bytes, and the average size is 17 bytes, which can represent 2^136 different serial numbers. Although the serial number is only guaranteed to be unique under the same CA, we consider the probability of such a collision to be very low, and using the serial number can reduce the amount of bytes transferred. Therefore, we believe that the serial number is the best choice for the certificate's identifier.
  </t>
  </section>

  <section title="Parallelize the DNS queries">
  <t>
    The TLS client can query the domain's IP and certificate revocation list in parallel. This means that the client does not have to do the DNS query AFTER it receives the certificate. Instead, the client can get the revocation list BEFORE receiving the certificate. Therefore, the time overhead brought by our scheme can be minimized. 
  </t>
  <t>
    We implemented a DNS server that supports TLSR record by modifying BIND9. We also used JavaScript to implement a client that can simulate a TLS client to execute our revocation checking scheme. First we let the client query the DNS server for both the IP address and the list of revoked certificates in parallel, then the client validate the DNS responses using DNSSEC and resolve them. In our experimental environment, the client takes 15-25ms to get the IP of a domain name and 30-40ms to establish a TCP connection with the IP address and send ClientHello. We see that querying a list of revoked certificates adds only 5-10 milliseconds of overhead, and the parsing and validating process can always be completed before the TLS handshake starts. 
  </t>
  </section>

</section>
  

<section title="Pseudocode">
  <t>
  This appendix describes, in pseudocode format, the procedure of a TLS client using a domain's TLSR record to check the revocation status of the certificate received during TLS handshake. If the code below contradict the text earlier in this document, the text earlier in this document should be considered correct and the code incorrect. 
  </t>
  <sourcecode type="pseudocode">
  function Finish(F) = {
    if (F == ABORT){
      abort the TLS handshake
      exit
    }
    if (F == NO_TLSR){
      fall back to other certificate revocation checking schemes
      exit
    }
    if (F == PASS){
      certificate revocation checking passes
      exit
    }
    // unreachable
  }

  function Select (S, C) = {
    if (S == Full Certificate) {
      return C in DER encoding
    }
    if (S == SubjectPublicKeyInfo) {
      return C.SubjectPublicKeyInfo in DER encoding
    }
    if (S == Fingerprint) {
      return C.Fingerprint in DER encoding
    }
    if (S == Serial Number) {
      return C.Serial Number in DER encoding
    }
    // unreachable
  }

  (TLSRrecords, ValState) = DNSSECValidatedLookup(
    domainname=domainname, RRtype=TLSR)
  LeafCertificate = ParseFrom(ServerHello)
  if (ValState == BOGUS){
    Finish(ABORT)
  }
  if ((ValState == INDETERMINATE) or (ValState == INSECURE)) {
    Finish(NO_TLSR)
  }
  for each record in TLSRrecords {
    if record is unusable {
      remove this record from TLSRrecords
    }
  }
  if length(TLSRrecords) == 0 {
    Finish(NO_TLSR)
  }

  for each R in TLSRrecords {
    if Select(R.Selector, LeafCertificate) == 
      R.CertificateAssociationData {
      Finish(Abort)
    }
  }
  Finish(PASS)

  </sourcecode>
</section>
   

   <!-- Change Log

v00 2006-03-15  EBD   Initial version

v01 2006-04-03  EBD   Moved PI location back to position 1 -
                     v3.1 of XMLmind is better with them at this location.
v02 2007-03-07  AH    removed extraneous nested_list attribute,
                     other minor corrections
v03 2007-03-09  EBD   Added comments on null IANA sections and fixed heading capitalization.
                     Modified comments around figure to reflect non-implementation of
                     figure indent control.  Put in reference using anchor="DOMINATION".
                     Fixed up the date specification comments to reflect current truth.
v04 2007-03-09 AH     Major changes: shortened discussion of PIs,
                     added discussion of rfc include.
v05 2007-03-10 EBD    Added preamble to C program example to tell about ABNF and alternative 
                     images. Removed meta-characters from comments (causes problems).

v06 2010-04-01 TT     Changed ipr attribute values to latest ones. Changed date to
                     year only, to be consistent with the comments. Updated the 
                     IANA guidelines reference from the I-D to the finished RFC.  -->
 </back>
</rfc>