<?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 RFC2818 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2818.xml">
<!ENTITY RFC5280 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5280.xml">
<!ENTITY RFC4043 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4043.xml">
<!ENTITY RFC5055 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5055.xml">
<!ENTITY RFC5246 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5246.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="exp" docName="draft-ietf-pkix-other-certs-01" ipr="full3978">
  <!-- category values: std, bcp, info, exp, and historic
     ipr values: full3667, noModification3667, noDerivatives3667
     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="Other Certs">Other Certificates Extension</title>

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

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

    <author fullname="Stephen Farrell" initials="S." surname="Farrell">
      <organization>Trinity College Dublin</organization>

      <address>
        <postal>
          <street>Department of Computer Science</street>
          <street>Trinity College</street>

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

          <city>Dublin</city>

          <region></region>

          <code>2</code>

          <country>Ireland</country>
        </postal>

        <phone>+353-1-896-1761</phone>

        <email>stephen.farrell@cs.tcd.ie</email>

        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>

    <date day="29" month="September" year="2008" />

    <!-- 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>Security</area>

    <workgroup>PKIX WG</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>template</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>
Some applications that associate state information with public key certificates
can benefit from a way to link together a set of certificates belonging to the
same end entity that can safely be considered to be equivalent for the purposes
of referencing that application state information.  This memo defines a
certificate extension that allows applications to
establish the required linkage without introducing a new application protocol data unit.
	</t> </abstract> </front>

  <middle>
    <section title="Introduction">

        <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>

<t><xref target="RFC5280">RFC 5280</xref> defines a profile for the use of
public key certificates for Internet applications. If an application associates
application state information with a public key certificate, then that
association may be disrupted if the end entity changes its public key
certificate. Such disruption can occur due to renewals or if the end entity
changes its certificate issuer. Similarly, if the end entity is actually a
distributed system, where each instance has a different private key, then the
relying party (RP) has no way to assoicate the different public key certificates
with the relevant application state information.  </t>

<t>For example, assume a web browser retains state information (perhaps
passwords) about a web site, indexed (possibly indirectly) via values contained
in the web server's public key certificate (perhaps a DNS name). When the web
server certificate expires, and a new certifiate is acquired (perhaps with a
different DNS name), then the browser cannot safely map the new certificate to
the relevant state information.</t>

<t>This memo defines a new public key certificate extension that supports such
linkage.</t>

<t>Other than the issuer asserting that the set of certificates belong to the
same end entity for use with the same application, the fine-detail of the
semantics of the linkage of certifcates is not defined here, since that is a
matter for application developers and the operators of certification
authorities (CAs). In particular we do not define how a CA can validate that
the same end entity is the holder of the various private keys, nor how the
application should make use of this information. Nor do we define what kinds of
state information may be shared.</t>

    </section>

	<section anchor="usecases" title="A Use Case">

			<t>Public key certificates expire, typically about a year after
they are created. Some applications might need to know that the same entity is
the subject of this certificate and a previously used certificate. </t>

<t>For example, if a web server certificate expires, it could be useful for a
web browser to know that the server currently presenting a certificate in a
<xref target="RFC5246">TLS</xref> handshake represents the same web server that
previously presented a certificate. This could be used for example to allow the
browser to automatically fill in form fields for the server in question, even
if the server certificate has been replaced. While the same effect can be
achieved based on the use of the same issuer and subject fields in a certificate
there could be security issues involved in such comparisons, e.g. if the
subject name includes a DNS name and the ownership of that DNS domain has
changed.</t>

<t>The use of the new extension provides a way for the CA to signal
to the application that the same end entity is involved, regardless of name
changes. The new extension could also allow the web site operator to
more easily change CA when renewing its certificate.</t>

	</section>

	<section anchor="extension" title="Other Certificates Extension">

	<t>This section defines the syntax for the other certificates extension.</t>

	<t>The new extension is simply a list of references to the
linked certificates. The references make use of the 
SCVPCertID structure from the <xref target="RFC5055">SCVP</xref>
protocol which contains a hash over the relevant certificate
and the certificate's issuer and serial number.</t>


	<t>When this extension is present the CA is asserting that the 
same end entity is the subject of the relevant certificates. </t>

	<t>This extension MUST NOT be marked critical.</t>

	<t>id-pe-otherCerts OBJECT IDENTIFIER ::== { id-pe 19 }</t>

	<t>OtherCertificates ::= SEQUENCE OF SCVPCertID</t>

<t>CAs MUST only issue certificates containing this extension where the links
created are such that the relevant consumers of the certificates can safely
make use of those links. This will typically be the case where the certificates
are only used by a single application.  CAs MUST NOT issue certificates that
link to certificates issued for a different purpose, for example, a CA SHOULD
NOT link a web server certificate to a VPN gateway certificate (unless those
can be the same, which might occur for some embedded devices).</t>

<t>Applications MUST validate certificates according to the rules specified in
<xref target="RFC5280">RFC 5280</xref>, and MUST NOT assume that because
certficates are linked, that they are therefore valid. This means of course
that both certificates must chain up to some local trust point(s).</t>

<t>If an application imposes further checks on certificate validity (e.g. as is
done in <xref target="RFC2818">RFC 2818</xref> for web server certificates),
then both certificates MUST be valid according to those application specific
rules.</t>

<t>It is NOT REQUIRED that two linked certificates are both simultaneously
valid. For example, an application can validate certificate1 and cache that
information.  When the application is subsequently presented with certificate2
(linked back to certificate1), if it considers the cached information about
certificate1 trustworthy, then it can validate certificate2, and use the
linkage to associate certificate2 with the relevant application state
information. (Just as it would have done had certificate1 been re-presented.)
As a second example, if certificate1 has expired, but would otherwise be valid,
then the linkage from certificate2 can also be used once certificate2 has been
validated.</t>

<t>If the application checks certificate status for the certificates in
question, and any of the certificates concerned has been revoked, then the
linkage MUST NOT be used.</t>

<t>Note that there are no constraints on the contents of the certificate
to which the link "points." The consequence is that the CA issuing the
new certificate can link back to legacy certificates of all kinds, once
the relevant RP supports this extension.</t>

<t>This extension MUST only be used in end-entity certificates, that is, it
MUST NOT be used in CA certificates or other similar certificates. [Editor's
note: I think this is safest, and shouldn't cause a problem, but also think it
might not be necessary. However, as an experimental track spec. its probably
best to be cautious. I'd welcome suggestions for a better way to phrase this.]</t>

	</section>

<section anchor="PI" title="Another Approach using Permanent Identifiers">

<t><xref target="RFC4043">RFC 4043</xref> defines a new name form (a "Permanent
Identifier" or PI) for public key certificates that supports
similar functionality to the new extension defined here. If two certificates
have the same PI and that PI form is globally unique, then the end-entities
involved can be considered to be the same.</t>

<t>The main difference between the PI and the other certificates extension is
that, (when more than one CA is involved), PI requires a globally unique
identifier, whereas the other certificates extension only requires that the
issuer of the new certificate be able to link back to the old
certificate(s).</t>

<t>As a consequence the other certificates extension can be deployed
"reactively" to link certificates that may not match "ideal" application naming
requirements. If the old certificate did make use of PI, then presumably
application naming issues have already been handled, and then the new
certificate can contain the same PI. In this latter case there would be no need
for the other certificates extension.</t> 

</section>


    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>The use case motivating this was contributed to the W3C web 
security context (WSC) working group by Tyler Close. 
See http://www.w3.org/2006/WSC/wiki/SafeWebFormEditor for details.</t>
    </section>

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

    <section anchor="IANA" title="IANA Considerations">
      <t>This memo includes no request to IANA.</t>
    </section>

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

	<t>As stated above, relying parties MUST validate any certificates per the
	algorithm given in <xref target="RFC5280"> RFC 5280</xref> before making
	any use of those certificates.</t>

	<t>Relying parties similarly MUST NOT assume that any other fields in the
	relevant certificates have common values. For example, linked certificates
	might have non-overlapping key usage extensions.</t>

	<t>Since the issuer of the new certificate (or some superior CA) is trusted
	by the RP, and the RP has validated the new certificate, the RP is
	basically as reliant on the proper operation of that CA as always - if the
	CA wished to "cheat" on the RP the other certificates extension simply
	provides a new way to do that, but one that is equivalent to existing
	vulnerabilities. In many cases such a bad CA could simply issue a new
	certificate that is identical in all respects (other than the key pair) and
	the RP would accept the identity contained in that new certificate.</t>

	<t>[Editor's note: The NC issue below was pointed out by Steve Kent. It probably needs
	to be better described, and needs more thought as well, e.g is it a 
	real problem? are there other constraints that might produce similar
	results? is there a general way to avoid the problem if it is one?]</t>

	<t>However, if the issuer of the new certificate is limited in some way
	(e.g. via a name constraint in a superior CA certificate), and if the old
	certificate doesn't match those limitations (e.g. the subject of the old
	certificate doesn't fit under the name constraints of the issuer of the 
	new certificate), then the new certificate could be linked back to 
	an identity that doesn't meet the constraints intended to be imposed
	on the issuer of the new certificate. Applications for which this is
	an unacceptable risk SHOULD NOT make use of the other certificates
	extension.</t>

      <t>[Editor's note: More TBD no doubt.]</t>
    </section>
  </middle>

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

  <back>
    <references title="Normative References">
		&RFC5280;
		&RFC5055;
    	&RFC2119; 
    </references>


    <references title="Informative References">
		&RFC5246;
    	&RFC2818; 
		&RFC4043;
    </references>

    <section anchor="asn1" title="ASN.1 Module">

    <t>PKIX OID registrations may be viewed at:
http://www.imc.org/ietf-pkix/pkix-oid.asn </t>

      <figure>
      	<artwork>

PKIXOtherCertsModule 
     { iso(1) identified-organization(3) dod(6) internet(1) 
       security(5) mechanisms(5) pkix(7) id-mod(0) 44 }

DEFINITIONS EXPLICIT TAGS ::=

BEGIN

-- EXPORTS ALL

IMPORTS

-- From [RFC5055]
SCVPCertID
FROM SCVP { iso(1) identified-organization(3) dod(6) internet(1)
	       security(5) mechanisms(5) pkix(7) id-mod(0) 21 } ;

-- The one and only new thing, a new certificate extension

id-pe-otherCerts OBJECT IDENTIFIER ::= 
          { iso(1) identified-organization(3) dod(6) internet(1)
	       security(5) mechanisms(5) pkix(7) id-pe(1) 19 }

-- The value is a sequence of cert ids.
OtherCertificates ::= SEQUENCE OF SCVPCertID

END

	</artwork>
      </figure>
	   

    </section>


  </back>

</rfc>
