Network Working GroupInternet Engineering Task Force (IETF) Y. PettersenIntended status:Request for Comments: 6961 June 2013 Category: Standards TrackExpires: October 14, 2013ISSN: 2070-1721 TheTLSTransport Layer Security (TLS) Multiple Certificate Status Request Extensiondraft-ietf-tls-multiple-cert-status-extension-08Abstract This document defines the Transport Layer Security (TLS) Certificate Status Version 2 Extension to allow clients to specify and support several certificate status methods. (The use of the Certificate Status extension is commonly referred to as "OCSP stapling".) Also defined is a new method based on the Online Certificate Status Protocol (OCSP) that servers can use to provide status informationnot justabout not only the server's owncertificate,certificate but also the status of intermediate certificates in the chain. Status of This Memo ThisInternet-Draftissubmitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documentsan Internet Standards Track document. This document is a product of the Internet Engineering Task Force (IETF).Note that other groups may also distribute working documents as Internet-Drafts. The listIt represents the consensus ofcurrent Internet- Drafts is at http://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents validthe IETF community. It has received public review and has been approved fora maximumpublication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741. Information about the current status ofsix monthsthis document, any errata, and how to provide feedback on it may beupdated, replaced, or obsoleted by other documentsobtained atany time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." This Internet-Draft will expire on October 14, 2013.http://www.rfc-editor.org/info/rfc6961. Copyright Notice Copyright (c) 2013 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. This document may contain material from IETF Documents or IETF Contributions published or made publicly available before November 10, 2008. The person(s) controlling the copyright in some of this material may not have granted the IETF Trust the right to allow modifications of such material outside the IETF Standards Process. Without obtaining an adequate license from the person(s) controlling the copyright in such materials, this document may not be modified outside the IETF Standards Process, and derivative works of it may not be created outside the IETF Standards Process, except to format it for publication as an RFC or to translate it into languages other than English. 1. Introduction The Transport Layer Security (TLS) Extension [RFC6066] framework defines, among other extensions, the Certificate StatusExtensionextension (also referred to as "OCSP stapling") that clients can use to request the server's copy of the current status of its certificate. The benefits of this extension include a reduced number of roundtrips and network delays for the client to verify the status of the server's certificate and a reduced load on the certificate issuer's status response servers, thus solving a problem that can become significant when the issued certificate is presented by a frequently visited server. There are two problems with the existing Certificate Status extension. First, it does not provide functionality to request the status information about intermediate Certification Authority (CA) certificates, which means the client has to request status information through other methods, such as Certificate Revocation Lists (CRLs), introducing further delays. Second, the current format of the extension and requirements in the TLS protocolpreventsprevent a client from offering the server multiple status methods. Many CAs are now issuing intermediate CA certificates that not only specify the publication point for their CRLs in a CRL Distribution Point[RFC5280],[RFC5280] but also specify a URL for their OCSP[I-D.ietf-pkix-rfc2560bis][RFC6960] server in Authority Information Access [RFC5280]. Given that client-cached CRLs are frequently out of date, clients would benefit from using OCSP to access up-to-date status information about intermediate CA certificates. The benefit to the issuing CA is less clear, as providing the bandwidth for the OCSP responder can be costly, especially for CAs with many high-traffic subscriber sites, and this cost is a concern for many CAs. There are cases where OCSP requests for a single high-traffic site caused significant network problems for the issuing CA. Clients will benefit from the TLS server providing certificate status information regardless of type, not just for the servercertificate,certificate but also for the intermediate CA certificates. Combining the status checks into one extension will reduce the roundtrips needed to complete the handshake by the client to just those needed for negotiating the TLS connection. Also, for the Certification Authorities, the load on their servers will depend on the number of certificates they have issued, not on the number of visitors to those sites. Additionally, using this extension significantly reduces privacy concerns around the clients informing theCertificate Issuercertificate issuer about which sites they are visiting. For such a new system to be introduced seamlessly, clients need to be able to indicate support for the existing OCSP Certificate Statusmethod,method and a new multiple-OCSP mode. Unfortunately, the definition of the Certificate Status extension only allows a single Certificate Status extension to be defined in a single extension record in the handshake, and the TLSProtocolprotocol [RFC5246] only allows a single record in the extension list for any given extension. This means that it is not possible for clients to indicate support for new methods while still supporting older methods, which would cause problems for interoperability between newer clients and older servers. This will not just be an issue for the multiple status request mode proposedabove,above but also for any other future status methods that might be introduced. This will be true not just for the current PKIX infrastructure[RFC5280],[RFC5280] but also for alternative PKI structures. The solution to this problem is to define a new extension,status_request_v2,"status_request_v2", with an extended format that allows the client to indicate support for multiple status request methods. This is implemented using a list of CertificateStatusRequestItemV2 records in the extension record. As the server will select the single status method based on the selected cipher suite and the certificate presented, no significant changes are needed in the server's extension format. 1.1. Requirements Language 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 [RFC2119]. 1.2. PresentationlanguageLanguage This document defines protocol structures using the same conventions and presentation language as defined in Section 4 of [RFC5246]. 2. Multiple Certificate Status Extension 2.1. NewextensionExtension The extension defined by this document is indicated bythe"status_request_v2" in the ExtensionType enum (originally defined by [RFC6066]), which uses the following value: enum {status_request_v2(XX),status_request_v2(17), (65535) } ExtensionType;[[ EDITOR: The value used for status_request_v2 has been left as "XX". This value will be assigned when this draft progresses to RFC.]]2.2. Multiple Certificate Status RequestrecordRecord Clients that support a certificate status protocol like OCSP may send thestatus_request_v2"status_request_v2" extension to the server in order to use the TLS handshake to transfer such data instead of downloading it through separate connections. When using this extension, the "extension_data" field (definedbyin Section 7.4.1.4in[RFC5246])of [RFC5246]) of the extension SHALL contain a CertificateStatusRequestListV2 where: struct { CertificateStatusType status_type; uint16 request_length; /* Length of request field in bytes */ select (status_type) { case ocsp: OCSPStatusRequest; case ocsp_multi: OCSPStatusRequest; } request; } CertificateStatusRequestItemV2; enum { ocsp(1), ocsp_multi(2), (255) } CertificateStatusType; struct { ResponderID responder_id_list<0..2^16-1>; Extensions request_extensions; } OCSPStatusRequest; opaque ResponderID<1..2^16-1>; opaque Extensions<0..2^16-1>; struct { CertificateStatusRequestItemV2 certificate_status_req_list<1..2^16-1>; } CertificateStatusRequestListV2; In the OCSPStatusRequest (originally defined by [RFC6066]), the "ResponderID" provides a list of OCSP responders that the client trusts. A zero-length "responder_id_list" sequence has the special meaning that the responders are implicitly known to the server, e.g., by prior arrangement, or areidentfiedidentified by the certificates used by the server. "Extensions" is a DER encoding[CCITT.X690.2002][X.690] of the OCSP request extensions, and if the server supports the forwarding of OCSP request extensions, this value MUST be forwarded without modification. Both "ResponderID" and "Extensions" are DER-encoded ASN.1 types as defined in[I-D.ietf-pkix-rfc2560bis].[RFC6960]. "Extensions" is imported from [RFC5280]. A zero-length "request_extensions" value means that there are no extensions (as opposed to a DER-encoded zero-length ASN.1 SEQUENCE, which is not valid for the "Extensions" type). Servers thatsupports clients'support a client's selection of responders using the ResponderID field could implement this selection by matching the responder IDvaluesfromvalues from the client's list with the ResponderIDs of known OCSP responders, either by using a binary compare of thevalues,values or a hash calculation and compare method. In the case of the "id-pkix-ocsp-nonce" OCSP extension, [RFC2560] is unclear about its encoding; for clarification, the nonce MUST be a DER-encoded OCTET STRING, which is encapsulated as another OCTET STRING (note that implementations based on an existing OCSP client will need to be checked for conformance to this requirement). This has been clarified in[I-D.ietf-pkix-rfc2560bis].[RFC6960]. The items in the list of CertificateStatusRequestItemV2 entries arein order ofordered according to the client's preference (favorite choice first). A server that receives a client hello containing the "status_request_v2" extension MAY return a suitable certificate status response message to the client along with the server's certificate message. If OCSP is requested, it SHOULD use the information contained in the extension when selecting an OCSP responder and SHOULD include request_extensions in the OCSP request. The server returns a certificate status response along with its certificate by sending a "CertificateStatus" message (originally defined by [RFC6066]) immediately after the[RFC5246] (Section 7.4.2)"Certificate" message (Section 7.4.2 of [RFC5246]) (and before any "ServerKeyExchange" or "CertificateRequest" messages). If a server returns a "CertificateStatus" message in response to astatus_request_v2"status_request_v2" request, then the server MUST have included an extension of type "status_request_v2" with empty "extension_data" in the extended server hello. The "CertificateStatus" message is conveyed using the handshake message type "certificate_status" (defined in [RFC6066]) as follows (updated from the definition in [RFC6066]): struct { CertificateStatusType status_type; select (status_type) { case ocsp: OCSPResponse; case ocsp_multi: OCSPResponseList; } response; } CertificateStatus; opaque OCSPResponse<0..2^24-1>; struct { OCSPResponse ocsp_response_list<1..2^24-1>; } OCSPResponseList; An "OCSPResponse" element (originally defined by [RFC6066]) contains a complete, DER-encoded OCSP response (using the ASN.1[CCITT.X680.2002][X.680] type OCSPResponse defined in[I-D.ietf-pkix-rfc2560bis]).[RFC6960]). Only one OCSP response, with a length of at least one byte, may be sent for status_type "ocsp". An "ocsp_response_list" contains a list of "OCSPResponse" elements, as specified above, each containing the OCSP response for the matching corresponding certificate in the server's Certificate TLS handshake message. That is, the first entry is the OCSP response for the first certificate in the Certificate list, the second entry is the response for the second certificate, and so on. The list MAY contain fewer OCSP responses than there were certificates in the Certificate handshake message, but there MUST NOT be more responses than there were certificates in the list. Individual elements of the list MAY have a length of 0 (zero)bytes,bytes if the server does not have the OCSP response for that particular certificate stored, in whichcase,case the client MUST act as if a response was not received for that particular certificate. If the client receives a "ocsp_response_list" that does not contain a response for one or more of the certificates in the completed certificate chain, the client SHOULD attempt to validate the certificate using an alternative retrieval method, such as downloading the relevant CRL; OCSP SHOULD in this situation only be used for theend entityend-entity certificate, not intermediate CA certificates, for reasons stated above. Note that a server MAY also choose not to send a "CertificateStatus" message, even if it has received a "status_request_v2" extension in the client hello message and has sent a "status_request_v2" extension in the server hello message. Additionally, note thatthata server MUST NOT send the "CertificateStatus" message unless it received either a "status_request" or "status_request_v2" extension in the client hello message and sent a corresponding "status_request" or "status_request_v2" extension in the server hello message. Clients requesting an OCSP response and receiving one or more OCSP responses in a "CertificateStatus" message MUST check the OCSP response(s) and abort the handshake if the response is arevoked"revoked" status or other unacceptable responses (as determined by clientpolicy),policy) with a bad_certificate_status_response(113) alert. This alert is always fatal. If the OCSP response received from the server does not result in a definite "good" or "revoked" status, it is inconclusive. A TLS client in such a case MAY check the validity of the server certificate through other means, e.g., by directly querying the certificate issuer. If such processing still results in an inconclusive response, then the application using the TLS connection will have to decide whether to close the connection or not. Note that this problem cannot be decided by the generic TLS client code without information from the application. If the application doesn't provide any such information, then the client MUST abort theconnectionconnection, since the server certificate has not been sufficiently validated. An example of where the application might wish to continue is withEAP-TLS,EAP-TLS (Extensible Authentication Protocol - TLS), where the application can use another mechanism to check the status of a certificate once it obtains network access. In this case, the application could have the client continue with the handshake, but it MUST NOT disclose a username and password until it has fully validated the server certificate. 3. IANA Considerations Section 2.1 defines the new TLSExtensionextension status_request_v2 (17) enum, whichshould behas been added to theExtensionType Values"ExtensionType Values" list in the IANATransport"Transport Layer Security (TLS)ExtensionsExtensions" registry. Section 2.2 describes a TLS CertificateStatusTypeRegistry to beregistry that is now maintained bytheIANA. Thenew registry is called TLS"TLS Certificate StatusTypes and should be definedTypes" registry has been created under theTransport"Transport Layer Security (TLS)ExtensionsExtensions" registry. CertificateStatusType values are to be assigned via IETF Review as defined in [RFC5226]. The initial registry corresponds to the definition of"ExtensionType""CertificateStatusType" in Section 2.2. Value Description Reference ----------------------------------------- 0 Reserved [RFC6961] 1 ocsp[This RFC][RFC6066] [RFC6961] 2 ocsp_multi[This RFC][RFC6961] 3-255 Unassigned 4. Security Considerations GeneralSecurity Considerationssecurity considerations for TLSExtensionsextensions are covered in [RFC5246]. SecurityConsiderationsconsiderations for the particular extension specified in this document are given below. In general, implementers should continue to monitor the state of the art and address any weaknesses identified. 4.1. Security Considerations for status_request_v2 If a client requests an OCSP response, it must take into account that an attacker's server using a compromised key could (and probably would) pretend not to support the extension. In this case, a client that requires OCSP validation of certificates SHOULD either contact the OCSP server directly or abort the handshake. Use of the OCSP nonce request extension (id-pkix-ocsp-nonce) may improve security against attacks that attempt to replay OCSP responses; see Section 4.4.1 of[I-D.ietf-pkix-rfc2560bis][RFC6960] for further details. This extensionallowallows the client to send arbitrary data to the server. The server implementers need to handle such data carefully to avoid introducing security vulnerabilities. The security considerations of[I-D.ietf-pkix-rfc2560bis][RFC6960] apply to OCSP requests and responses. 5. Acknowledgements This document is based on[RFC6066][RFC6066], authored by Donald Eastlake 3rd. 6. References 6.1. Normative References[CCITT.X680.2002] International International Telephone and Telegraph Consultative Committee, "Abstract Syntax Notation One (ASN.1): Specification of basic notation", CCITT Recommendation X.680, July 2002. [CCITT.X690.2002] International International Telephone and Telegraph Consultative Committee, "ASN.1 encoding rules: Specification of basic encoding Rules (BER), Canonical encoding rules (CER) and Distinguished encoding rules (DER)", CCITT Recommendation X.690, July 2002. [I-D.ietf-pkix-rfc2560bis] Santesson, S., Myers, M., Ankney, R., Malpani, A., Galperin, S., and C. Adams, "X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP", draft-ietf-pkix-rfc2560bis-17 (work in progress), April 2013.[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 5226, May 2008. [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security (TLS) Protocol Version 1.2", RFC 5246, August 2008. [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., Housley, R., and W. Polk, "Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile", RFC 5280, May 2008. [RFC6066] Eastlake, D., "Transport Layer Security (TLS) Extensions: Extension Definitions", RFC 6066, January 2011. [RFC6960] Santesson, S., Myers, M., Ankney, R., Malpani, A., Galperin, S., and C. Adams, "X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP", RFC 6960, June 2013. [X.680] ITU-T Recommendation X.680 (2008) | ISO/IEC 8824-1:2008, "Abstract Syntax Notation One (ASN.1): Specification of basic notation", November 2008. [X.690] ITU-T Recommendation X.690 (2008) | ISO/IEC 8825-1:2008, "ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)", November 2008. 6.2. Informative References [RFC2560] Myers, M., Ankney, R., Malpani, A., Galperin, S., and C. Adams, "X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP", RFC 2560, June 1999. Author's Address Yngve N. PettersenEmail:EMail: yngve@spec-work.net