INTERNET-DRAFT                                                 D. Pinkas
Intended Status: Proposed Standard                              Bull SAS
Obsoletes: 2560, 6277 (if approved)
Expires: March 24, 2013                               September 25, 2012

                X.509 Internet Public Key Infrastructure
               Online Certificate Status Protocol - OCSP
                     draft-pinkas-rfc2560bis-03


Abstract

   This document specifies a protocol useful in determining the current
   status of a digital certificate without requiring CRLs.  Additional
   mechanisms addressing PKIX operational requirements are specified in
   separate documents. This document obsoletes RFC 2560 and RFC 6277.

Status of this Memo

   This Internet-Draft is submitted to IETF in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF), its areas, and its working groups.  Note that
   other groups may also distribute working documents as
   Internet-Drafts.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   The list of current Internet-Drafts can be accessed at
   http://www.ietf.org/1id-abstracts.html

   The list of Internet-Draft Shadow Directories can be accessed at
   http://www.ietf.org/shadow.html


Copyright and License Notice

   Copyright (c) 2012 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.



Denis Pinkas              Expires March 24, 2013                [Page 1]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012


   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.


Table of Contents

   1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . 4
   2. Protocol Overview  . . . . . . . . . . . . . . . . . . . . . . . 7
     2.1. Request . . . . . . . . . . . . . . . . . . . . . . . . . .  7
     2.2. Response  . . . . . . . . . . . . . . . . . . . . . . . . .  7
     2.3. Exception Cases . . . . . . . . . . . . . . . . . . . . . . 10
   3.  Functional Requirements . . . . . . . . . . . . . . . . . . .  10
     3.1. Requirements for certificate content  . . . . . . . . . . . 10
       3.1.1. Target certificate content . . . . . . . . . . . . . .  10
       3.1.2. OCSP certificate content . . . . . . . . . . . . . . .  11
       3.1.3. CA certificate content . . . . . . . . . . . . . . . .  11
     3.2. Requirements for CAs supporting directly an OCSP service .  11
     3.3. Requirements for CAs using OCSP Responders . . . . . . . .  11
       3.3.1. Designation of a new OCSP Responder . . . . . . . . . . 11
       3.3.2. CA key rollover . . . . . . . . . . . . . . . . . . . . 12
       3.3.3. OCSP Responder key rollover . . . . . . . . . . . . . . 12
     3.4. Requirements for OCSP clients . . . . . . . . . . . . . . . 13
   4. Detailed Protocol  . . . . . . . . . . . . . . . . . . . . . . .13
     4.1. Request Syntax  . . . . . . . . . . . . . . . . . . . . . . 13
     4.2. Response Syntax . . . . . . . . . . . . . . . . . . . . . . 15
     4.3. Processing of requests and responses . . . . . . . . . . .  18
       4.3.1. Request processing by OCSP servers . . . . . . . . . .  18
         4.3.1.1. Processing by a CA acting as an OCSP responder . .  18
         4.3.1.2. Processing by an OCSP Responder . . . . . . . . . . 20
         4.3.1.3. Processing by a locally trusted Responder . . . . . 21
       4.3.2. Response processing by an OCSP client . . . . . . . . . 23
     4.4. Mandatory and Optional Cryptographic Algorithms . . . . . . 26
     4.5. Extensions  . . . . . . . . . . . . . . . . . . . . . . . . 26
       4.5.1. Nonce . . . . . . . . . . . . . . . . . . . . . . . . . 27
       4.5.2. CRL References  . . . . . . . . . . . . . . . . . . . . 27
       4.5.3. Acceptable Response Types . . . . . . . . . . . . . . . 27
       4.5.4. Archive Cutoff  . . . . . . . . . . . . . . . . . . . . 28
       4.5.5. CRL Entry Extensions  . . . . . . . . . . . . . . . . . 28
       4.5.6. Service Locator . . . . . . . . . . . . . . . . . . . . 28
       4.5.7. Preferred Signature Algorithms  . . . . . . . . . . . . 29
         4.5.7.1. Extension Syntax . . . . . . . . . . . . . . . . .  30
         4.5.7.2. Responder Signature Algorithm Selection . . . . . . 30
           4.5.7.2.1. Dynamic Response  . . . . . . . . . . . . . . . 31
           4.5.7.2.2. Static Response . . . . . . . . . . . . . . . . 31






Denis Pinkas              Expires March 24, 2013                [Page 2]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

   5. Security Considerations . . . . . . . . . . . . . . . . . . . . 31
     5.1. Denial of service attack using false error responses . . .  31
     5.2. Using CRLs as a fall-back mechanism . . . . . . . . . . . . 31
     5.3. Different results when using OCSP and CRLs . . . . . . . .  32
     5.4. Denial of service attack using a flood of queries . . . . . 32
     5.5. Use of precomputed responses . . . . . . . . . . . . . . .  32
     5.6. Preferred Signature Algorithms  . . . . . . . . . . . . . . 33
       5.6.1. Use of insecure algorithms  . . . . . . . . . . . . . . 33
       5.6.2. Man in the Middle Downgrade Attack . . . . . . . . . .  33
       5.6.3. Denial of Service Attack . . . . . . . . . . . . . . .  34
     5.7. Other replay attacks . . . . . . . . . . . . . . . . . . .  34
   6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . . 34
   7. References  . . . . . . . . . . . . . . . . . . . . . . . . . . 34
     7.1. Normative References  . . . . . . . . . . . . . . . . . . . 34
     7.2. Informative References  . . . . . . . . . . . . . . . . . . 35
   7. Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . . 35
   Appendix A. . . . . . . . . . . . . . . . . . . . . . . . . . . .  36
     A.1 OCSP over HTTP . . . . . . . . . . . . . . . . . . . . . . . 36
       A.1.1. Request . . . . . . . . . . . . . . . . . . . . . . . . 36
       A.1.2. Response  . . . . . . . . . . . . . . . . . . . . . . . 36
   Appendix B. ASN.1 Modules  . . . . . . . . . . . . . . . . . . . . 37
     B.1. OCSP module which conforms to the 1988 syntax of ASN.1 . .  37
     B.2. OCSP module which conforms to the 2002 syntax of ASN.1 . .  40
     B.3. Preferred Signature Algorithms ASN.1  . . . . . . . . . . . 44
       B.3.1. ASN.1 module using the 2002 syntax . . . . . . . . . .  44
       B.3.2. ASN.1 module using the 1988 syntax . . . . . . . . . .  45
   Appendix C. MIME registrations . . . . . . . . . . . . . . . . . . 45
     C.1. application/ocsp-request  . . . . . . . . . . . . . . . . . 46
     C.2. application/ocsp-response . . . . . . . . . . . . . . . . . 46
   Authors' Address . . . . . . . . . . . . . . . . . . . . . . . . . 47
























Denis Pinkas              Expires March 24, 2013                [Page 3]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012


1.  Introduction

   This document specifies an on line protocol able to provide the
   revocation status of a digital certificate.  It also specifies
   requirements for the entities concerned with this protocol:
   OCSP clients, OCSP servers and CAs making use of OCSP servers.

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

   This specification obsoletes [RFC2560] and [RFC6277].  The primary
   reason for the publication of this document is to address ambiguities
   that have been found since the publication of RFC 2560.

   This document differs from RFC 2560 in the following areas:

      All over the document the term "OCSP Responder" (with a capital R)
      indicates an OCSP server which has received a delegation from at
      least one CA and which has obtained at least one OCSP certificate,
      whereas the terms "OCSP server" and "OCSP responder" are used to
      designate either a CA providing itself an OCSP service or an OCSP
      Responder.

      The term "locally trusted Responder" is used to designate an OCSP
      responder that is trusted by an OCSP client using local rules.

      o  Section 2 has been rephrased to indicate that the response may
         provide fresher status than CRLs, but not necessarily.

      o  Section 2.1 has been rephrased to indicate that the request
         may contain one or more target certificate identifiers.

      o  Section 2.2 has been rephrased, in particular to indicate that
         the key used to sign an OCSP response MUST be either the key
         from a CA or the key from an OCSP Responder.  In the later
         case, the certificate(s) issued to the OCSP Responder MUST be
         directly issued by the CA that has issued a target certificate
         and under the same key that was used to sign the target
         certificate.  In both cases, the validity of the signature over
         the OCSP response MUST be evaluated for each target
         certificate.

      o  Section 2.3 extends the use of the "unauthorized" error
         response, as specified in [RFC5019].

      o  Section 2.4 has been removed and its material has been
         incorporated into section 4.2.

      o  Section 2.5 has been removed and its material has been
         incorporated at the end of section 4.2.


Denis Pinkas              Expires March 24, 2013                [Page 4]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012


      o  Section 2.6 has been removed and its material has been
         incorporated at the end of section 2.2.

      o  Section 2.7 has been removed since it did not solved the
         issue of a CA key compromise correctly: the verification of
         the certification path is the right way to solve the issue
         and is in the usual procedure.

      o  Section 3 was only addressing the content of a target
         certificate and signed response acceptance requirements.  It
         has been expanded to specify the content of a target
         certificate, of an OCSP certificate and of a CA certificate.
         It now addresses requirements for CAs with a locally hosted
         OCSP service as well as with OCSP Responders.  It addresses the
         ways to perform key rollovers.

      o  Section 3 adds a requirement for an OCSP client to verify that
         the current time is within the validity period of the target
         certificate.

      o  Section 4.1 gathers text that was spread around RFC 2560 and
         now details every parameter from the ASN.1 syntax.

      o  Section 4.1.2 has been incorporated into section 4.1.

      o  Section 4.2 gathers text that was spread around RFC 2560 and
         now details every parameter from the ASN.1 syntax.

      o  Sections 4.2.1 and 4.2.2 have been incorporated into
         section 4.2.

      o  Section 4.2 adds a requirement for the OCSP server to include
         OCSP certificates in the certs field of BasicOCSPResponse when
         the OCSP server is an authorized OCSP Responder.

      o  Section 4.2 specifies that the local system time is the local
         UTC time.

      o  Section 4.2 states that a response may include revocation
         status information for certificates that were not included in
         the request, as permitted in [RFC5019].

      o  Section 4.3 has been remodeled to detail the processing of an
         OCSP request and the construction of an OCSP response by an
         OCSP server acting as an OCSP responder and by an OCSP
         Responder, and the processing in three steps of an OCSP
         response by an OCSP client or by a verifier.

      o  Section 4.3 addresses the verification of an OCSP response
         both at the current time and at a time in the past.



Denis Pinkas              Expires March 24, 2013                [Page 5]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012


      o  Section 4.3 changes the set of cryptographic algorithms that
         clients MUST support and the set of cryptographic algorithms
         that clients SHOULD support as specified in [RFC6277].

      o  Section 4.3.2 now indicates that the value of the nocheck
         extension SHALL be NULL.

      o  Section 4.5.1 specifies the ASN.1 syntax for the nonce
         extension, which was missing in RFC 2560.

      o  Section 4.5.7 incorporates the text which was originally
         present in [RFC6277] and specifies an extension that may be
         included in a request message to specify signature algorithms
         the client would prefer the server use to sign the response.

      o  Section 5 adds a new warning: the root used by an OCSP
         Responder to verified published CRLs is not necessarily the
         same as the one that would be used by the OCSP client if it
         were going to verify the CRLs itself.  Hence the revocation
         status may not be identical in both cases.

      o  Section 5 is now addressing a technique to limit a flood of
         queries when a large number of certificates is supported by
         the same OCSP Responder.

      o  Section 5 provides an alternative for archival applications
         when the algorithm used to sign an OCSP request becomes weak:
         the use of time-stamping.

      o  Annex B includes a new ASN.1 module using the 1988 syntax
         since the syntax of nonce had been omitted.  It also includes
         a new ASN.1 module using the 2002 syntax since in the ASN.1
         module which may be found in Section 4 of RFC5912 the nocheck
         extension had been omitted.


   An overview of the protocol is provided in section 2.  Functional
   requirements are specified in section 3.  Details of the protocol
   are in section 4.  Security issues with the protocol are covered in
   section 5.  Appendix A defines OCSP over HTTP, appendix B
   accumulates ASN.1 syntactic elements and appendix C specifies the
   mime types for the messages.











Denis Pinkas              Expires March 24, 2013                [Page 6]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

2. Protocol Overview

   The Online Certificate Status Protocol (OCSP) is a client-server
   protocol which enables applications to obtain the revocation status
   of one or more certificates either "good", "revoked", or "unknown".

   The revocation status may be provided by the server either using a
   real time access to a database of issued certificates, or using a
   batch access to a database of issued certificates, or using a
   real time access to a database of revocation statuses of issued
   certificates, or using a batch access to a database of revocation
   statuses of issued certificates, or using CRLs, or using a
   combination of base CRLs and delta CRLs.

   In the first case, it is possible to obtain timely revocation status
   information, whereas in the other cases, the freshness of the
   revocation status is not better than the mechanisms it is based on.

   OCSP may also provide additional status information using
   extensions.

   When using OCSP, an OCSP client issues a certificate revocation
   status request to an OCSP responder for one or more certificates and
   then suspends acceptance of the certificate(s) in question until
   the responder provides a response.

   This document specifies the data that needs to be exchanged between
   an application checking the status of a certificate and the server
   providing that status.  The document also specifies requirements for
   CAs using OCSP servers, for OCSP clients and for OCSP servers.

2.1. Request

   An OCSP request contains the following data:

   -- a protocol version,
   -- a service request,
   -- one or more target certificate identifiers, and
   -- optional extensions which MAY be processed by the OCSP server.

An OCSP request MAY be signed.

2.2. Response

   Upon receipt of a request, an OCSP server determines if:

      1. the message is well formed,

      2. the OCSP responder is configured to provide the requested
         service, and

      3. the request contains the information needed by the responder.


Denis Pinkas              Expires March 24, 2013                [Page 7]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

   If any one of the prior conditions is not met, the OCSP server
   produces an error message; otherwise, it returns a definitive
   response.

   OCSP responses can be of various types.  An OCSP response consists
   of a response type and the bytes of the actual response.  There is
   one basic type of OCSP response that MUST be supported by all OCSP
   servers and clients.  The rest of this document pertains only to
   this basic response type.

   All definitive response messages SHALL be digitally signed.

   A response message MUST be signed either by a certificate's issuer,
   by an authorized OCSP Responder or according to local rules.

   In the first case, the CA MUST use the same key as the one that was
   used to issue the target certificate.

   In the second case, the CA MUST explicitly designate the OCSP
   Responder by issuing an OCSP certificate to the OCSP Responder.
   OCSP signing delegation SHALL be indicated by the inclusion of
   id-kp-OCSPSigning in an extendedKeyUsage certificate extension
   included in the OCSP response signer's certificate.  This
   certificate MUST be issued directly by the CA and under the same key
   that was used to issue the target certificate.

   For these two cases, systems or applications that rely on OCSP
   responses MUST be capable of detecting and enforcing use of the
   id-ad-ocspSigning value as described above.

   In the third case, the OCSP client uses a locally trusted Responder.
   The key used to sign OCSP responses may be directly trusted or be a
   key contained in an OCSP certificate which is verified according to
   local rules, instead of the rules detailed in this document.

   A definitive response message is composed of:

   -- the version of the response syntax,
   -- an identifier of the OCSP server,
   -- the time at which the response was produced,
   -- single responses for each of the target certificates,
   -- optional extensions,
   -- the signature algorithm OID,
   -- the signature computed across hash of the response, and
   -- optional certificates.

   The single response for each of the target certificates in a request
   consists of:

   -- a target certificate identifier,
   -- the certificate status value (good, revoked or unknown),
   -- the response validity interval, and
   -- optional extensions.

Denis Pinkas              Expires March 24, 2013                [Page 8]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

   The purpose of the identifier of the OCSP server is to allow OCSP
   clients to find whether the definitive response was signed by a CA
   or by an OCSP Responder.

   The identifier of the OCSP server SHOULD either be the name or the
   key from a CA, or the name or the key from a OCSP Responder.

   Unless there exist local rules (which are outside the scope of this
   document) for verifying that a single response is correctly signed,
   the following applies:

   When the identifier matches with the name of the CA which has issued
   the target certificate or corresponds to the key used to issue the
   target certificate, then a single response is correctly signed
   only if the digital signature of the OCSP response is valid using the
   key used to sign the target certificate.

   When the identifier does not match with the name of the CA which has
   issued the target certificate or does not correspond to the key used
   to issue the target certificate, then an single response is correctly
   signed only if :

         (a) there exists in the response an OCSP certificate issued by
             the CA which has issued the target certificate which is
             signed by the same key as the one used to issue the
             target certificate, and

         (b) the digital signature of the OCSP response is valid using
             the subjectPublicKey contained in this OCSP certificate.

   This specification defines the following definitive response
   indicators for use in the certificate status value:

   -- good,
   -- revoked, or
   -- unknown.

   The "good" status indicates a positive response to the status
   inquiry. At a minimum, this positive response indicates that the
   certificate is not revoked, but does not necessarily mean that the
   certificate was ever issued or that the time at which the response
   was produced is within the certificate's validity interval.
   Response extensions may be used to convey additional information on
   assertions made by the server regarding the status of the
   certificate such as positive statement about issuance, validity,
   etc.

   The "revoked" status indicates that the certificate has been revoked
   (either permanently or temporarily (on hold)).

   The "unknown" status indicates either that the server doesn't know
   about the revocation status of the certificate being requested or
   does not know about the certificate being requested.

Denis Pinkas              Expires March 24, 2013                [Page 9]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012


2.3. Exception Cases

   In case of errors, the OCSP Responder may return an error message.
   These messages are not signed. Errors can be of the following types:

   -- malformedRequest,
   -- internalError,
   -- tryLater,
   -- sigRequired, or
   -- unauthorized.

   A server produces the "malformedRequest" response if the request
   received does not conform to the OCSP syntax.

   The response "internalError" indicates that the OCSP responder
   reached an inconsistent internal state. The query should be retried,
   potentially with another responder.

   In the event that the OCSP server is operational, but unable to
   return a status for the requested certificate, the "tryLater"
   response can be used to indicate that the service exists, but is
   temporarily unable to respond.

   The response "sigRequired" is returned in cases where the server
   requires the client to sign the request in order to construct a
   response.

   The response "unauthorized" is returned in cases where the client is
   not authorized to make this query to this server or the server is not
   capable of responding authoritatively (cf. [RFC5019], Section 2.2.3).

3. Functional Requirements

3.1. Requirements for certificate content

3.1.1. Target certificate content

   In order to convey to OCSP clients a well-known point of information
   access, CAs SHALL provide the capability to include the
   AuthorityInfoAccess extension (defined in [RFC5280], section 4.2.2.1)
   in certificates that can be checked using OCSP.

   CAs that support an OCSP service, either hosted locally or provided
   by an Authorized Responder, MUST provide for the inclusion of a value
   for a uniformResourceIndicator (URI) accessLocation and the OID value
   id-ad-ocsp for the accessMethod in the AccessDescription SEQUENCE.

   The value of the accessLocation field in the subject certificate
   defines the transport (e.g. HTTP) used to access the OCSP server
   and MAY contain other transport dependent information (e.g. a URL).



Denis Pinkas              Expires March 24, 2013               [Page 10]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

Note: accessLocation is mentioned in several places of this document.
      It refers in all cases to the accessLocation field that is present
      in an AIA extension field to designate the location of the OCSP
      responder.  In this case, the accessMethod field contains the
      id-ad-ocsp OID.

3.1.2. OCSP certificate content

   An OCSP certificate MUST contains the id-kp-OCSPSigning extended key
   usage as defined in section 4.2.1.12 from RFC 5280.  It indicates
   that the certificate's issuer explicitly delegated OCSP signing
   authority to an authorized OCSP Responder that is using its own key.
   The digitalSignature bit in the keyUsage extension MUST also be set.

3.1.3. CA certificate content

   CAs that delegate the issuance of OCSP responses to one or more
   OCSP Responders MUST issue an OCSP certificate to each of these OCSP
   Responders.  Their CA certificate MUST allow them to sign these OCSP
   certificates.  Therefore the keyCertSign bit in the keyUsage
   extension MUST be set.

   If the CA supports CRLs, in particular to revoke the certificate of
   the OCSP Responders, then both the cRLSign bit and the keyCertSig
   bit MUST be set.

3.2. Requirements for CAs supporting directly an OCSP service

   When a CA that directly supports an OCSP service performs a key
   rollover:

   - for certificates issued under the old key, the CA SHALL continue
     to sign the revocation status of OCSP responses with that old key
     at least until all these certificates are expired, and

   - for certificates issued under the new key, the CA SHALL change the
     accessLocation in the AIA extension field of these certificates
     and sign the revocation status of OCSP responses with that new key
     at least until all these certificates are expired.

   Note: The change in accessLocation is necessary when the CA rekeys
         to meet the following constraints imposed by this standard:

            1) a BasicOCSPResponse can only be signed using a single
               private key;

            2) the response must be signed using the same CA key that
               was used to sign the certificate in question; and

            3) the OCSP response needs to cover all the certificates
               queried in the OCSP request.



Denis Pinkas              Expires March 24, 2013               [Page 11]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

3.3. Requirements for CAs using OCSP Responders

3.3.1. Designation of a new OCSP Responder

   When a CA designates a new OCSP Responder, then it SHALL change the
   accessLocation in the AIA extension field for the newly issued
   certificates and issue an OCSP certificate to the new OCSP Responder
   using its current key.

3.3.2. CA key rollover

   When a CA that uses OCSP Responders performs a key rollover, then
   it MUST either designate a new OCSP Responder or keep the current
   OCSP Responder(s).

   If the CA designates a new OCSP Responder, then it SHALL change the
   accessLocation in the AIA extension field for the newly issued
   certificates and issue an OCSP certificate to the new OCSP Responder
   using its new key.

   If the CA keeps the same OCSP Responder(s), then it SHALL continue
   to use the same accessLocation(s) in the AIA extension field for the
   newly issued certificates and issue an OCSP certificate to the
   appropriate OCSP Responder(s) using its new key.

   Note: The CA may need to continue issuing certificates to the OCSP
   Responder(s) using the old CA key until all the certificates issued
   under the CA' old key for which the OCSP Responder(s) are
   authoritative have expired.

3.3.3. OCSP Responder key rollover

   When an OCSP Responder performs a key rollover (asynchronously from
   a CA key rollover), then each CA which has designated an OCSP
   Responder SHALL issue a new certificate for that OCSP Responder and
   for each of its issuing keys which meets the following property:

      - the issuing key has been used to sign at least one certificate
        which contains an AIA extension designating that OCSP Responder
        and that certificate is not yet expired.

   An OCSP Responder key rollover does not affect the values of the
   URIs that are placed in the accessLocation field from the target
   certificates.  One or more OCSP Responder MAY respond to an OCSP
   request addressed at a given URI picked from the accessLocation
   field from a target certificate.  Each OCSP Responder MAY use a
   different signing key, as long as it got an OCSP certificate
   appropriate for that signing key and for the target certificate.






Denis Pinkas              Expires March 24, 2013               [Page 12]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

3.4. Requirements for OCSP clients

   An OCSP request allows getting in a single response the revocation
   status of one or more certificates.  In order to request the
   status of one or more certificates in a single request, OCSP
   clients SHALL follow the following rules :

   For each candidate certificate, OCSP clients SHALL verify
   whether there exists a locally defined rule for the certificate in
   question which indicates the URI where the OCSP responder is
   located.  If this rule exists, it SHALL be followed.

   Otherwise, OCSP clients SHALL determine whether the candidate
   certificate contains an AIA extension with an accessMethod which
   contains the id-ad-ocsp OID.  If it is the case, the accessLocation
   contains a uniformResourceIdentifier (URI) which indicates the
   location of the OCSP server for that certificate.

   Certificates that contain the same URI MAY be grouped in a single
   request.

Note:  For each candidate certificate, when performing the path
       validation algorithm, the OCSP client SHOULD verify that the
       current time is within the validity period of the target
       certificate.  Thus, certificates which are outside their
       validity period SHOULD NOT be included in the request or will
       be rejected later on by the OCSP responder.

4.  Detailed Protocol

   The ASN.1 syntax imports terms defined in [RFC5280].  For signature
   calculation, the data to be signed is encoded using the ASN.1
   distinguished encoding rules (DER) [X.690].

   ASN.1 EXPLICIT tagging is used as a default unless specified
   otherwise.

   The terms imported from elsewhere are: Extensions,
   CertificateSerialNumber, SubjectPublicKeyInfo, Name,
   AlgorithmIdentifier, CRLReason.

4.1. Request syntax

   This section specifies the ASN.1 specification for a request.
   The actual formatting of the message could vary depending on
   the transport mechanism used (HTTP, SMTP, LDAP, etc.).

   OCSPRequest ::=     SEQUENCE {
       tbsRequest                  TBSRequest,
       optionalSignature   [0]     EXPLICIT Signature OPTIONAL }




Denis Pinkas              Expires March 24, 2013               [Page 13]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

   TBSRequest ::=     SEQUENCE {
       version             [0]     EXPLICIT Version DEFAULT v1,
       requestorName       [1]     EXPLICIT GeneralName OPTIONAL,
       requestList                 SEQUENCE OF Request,
       requestExtensions   [2]     EXPLICIT Extensions OPTIONAL }

   Signature ::=     SEQUENCE {
       signatureAlgorithm      AlgorithmIdentifier,
       signature               BIT STRING,
       certs               [0] EXPLICIT SEQUENCE OF Certificate
   OPTIONAL}

   Version ::=             INTEGER  {  v1(0) }

   Request ::=     SEQUENCE {
       reqCert                     CertID,
       singleRequestExtensions     [0] EXPLICIT Extensions OPTIONAL }

   CertID ::=     SEQUENCE {
       hashAlgorithm       AlgorithmIdentifier,
       issuerNameHash      OCTET STRING, -- Hash of Issuer's DN
       issuerKeyHash       OCTET STRING, -- Hash of Issuers public key
       serialNumber        CertificateSerialNumber }

   requestorName is optional and MAY be used by the server for access
   control and audit purposes.

   requestList contains one or more single requests.

   requestExtensions is OPTIONAL.  Any specific extension is OPTIONAL.
   The critical flag SHOULD NOT be set for any of them.  Section 4.5
   suggests several useful extensions.  Additional extensions MAY be
   defined in additional RFCs.  Unrecognized extensions MUST be ignored
   (unless they have the critical flag set and are not understood).

   reqCert contains the identifier of a target certificate.

   issuerNameHash is the hash of the Issuer's distinguished name.  The
   hash shall be calculated over the DER encoding of the issuer's name
   field in the certificate being checked.

   issuerKeyHash is the hash of the Issuer's public key.  The hash
   shall be calculated over the value (excluding tag and length) of the
   subject public key field in the issuer's certificate.  The hash
   algorithm used for both these hashes, is identified in
   hashAlgorithm.

   serialNumber is the serial number of the certificate for which
   status is being requested.





Denis Pinkas              Expires March 24, 2013               [Page 14]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

Note: The primary reason to use the hash of the CA's public key in
      addition to the hash of the CA's name, to identify the issuer,
      is that it is possible that two CAs may choose to use the same
      Name (uniqueness in the Name is a recommendation that cannot be
      enforced).

      However, it is statistically infeasible that two CAs use the same
      public key unless the CAs either explicitly decided to share
      their private key, or the key of one of the CAs was compromised.

   singleRequestExtensions is OPTIONAL.  Any specific extension is
   OPTIONAL.  The critical flag SHOULD NOT be set for any of them.

   The requestor MAY choose to sign the OCSP request.  In that case, the
   signature is computed over the tbsRequest structure.  If the request
   is signed, the requestor SHALL specify its name in the requestorName
   field.  Also, for signed requests, the requestor MAY include
   certificates that help the OCSP responder verify the requestor's
   signature in the certs field of Signature.

4.2  Response Syntax

   This section specifies the ASN.1 specification for a confirmation
   response.  The actual formatting of the message could vary depending
   on the transport mechanism used (HTTP, SMTP, LDAP, etc.).

   An OCSP response at a minimum consists of a responseStatus field
   indicating the processing status of the prior request.  If the value
   of responseStatus is one of the error conditions, responseBytes are
   not set.

   OCSPResponse ::= SEQUENCE {
      responseStatus         OCSPResponseStatus,
      responseBytes          [0] EXPLICIT ResponseBytes OPTIONAL }

   OCSPResponseStatus ::= ENUMERATED {
       successful            (0),  --Response has valid confirmations
       malformedRequest      (1),  --Illegal confirmation request
       internalError         (2),  --Internal error in issuer
       tryLater              (3),  --Try again later
                                   --(4) is not used
       sigRequired           (5),  --Must sign the request
       unauthorized          (6)   --Request unauthorized
   }

   The value for responseBytes consists of an OBJECT IDENTIFIER and a
   response syntax identified by that OID encoded as an OCTET STRING.

   ResponseBytes ::=       SEQUENCE {
       responseType   OBJECT IDENTIFIER,
       response       OCTET STRING }



Denis Pinkas              Expires March 24, 2013               [Page 15]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

   For a basic OCSP responder, responseType will be id-pkix-ocsp-basic.

   id-pkix-ocsp           OBJECT IDENTIFIER ::= { id-ad-ocsp }
   id-pkix-ocsp-basic     OBJECT IDENTIFIER ::= { id-pkix-ocsp 1 }

   OCSP responders SHALL be capable of producing responses of the id-
   pkix-ocsp-basic response type.  Correspondingly, OCSP clients SHALL
   be capable of receiving and processing responses of the
   id-pkix-ocsp-basic response type.

   The value for response SHALL be the DER encoding of
   BasicOCSPResponse.

   BasicOCSPResponse ::= SEQUENCE {
      tbsResponseData      ResponseData,
      signatureAlgorithm   AlgorithmIdentifier,
      signature            BIT STRING,
      certs            [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL }

   The value for signature SHALL be computed on the hash of the DER
   encoding ResponseData.

   If the responder is not a CA, it SHALL include OCSP certificates in
   the certs field of BasicOCSPResponse that allow the OCSP client
   verifying the responder's signature.  If no certificates are
   included then certs SHOULD be absent.

   ResponseData ::= SEQUENCE {
      version              [0] EXPLICIT Version DEFAULT v1,
      responderID              ResponderID,
      producedAt               GeneralizedTime,
      responses                SEQUENCE OF SingleResponse,
      responseExtensions   [1] EXPLICIT Extensions OPTIONAL }

   ResponderID ::= CHOICE {
      byName               [1] Name,
      byKey                [2] KeyHash }

   KeyHash ::= OCTET STRING -- SHA-1 hash of responder's public key
   (excluding the tag and length fields)

   SingleResponse ::= SEQUENCE {
      certID                       CertID,
      certStatus                   CertStatus,
      thisUpdate                   GeneralizedTime,
      nextUpdate         [0]       EXPLICIT GeneralizedTime OPTIONAL,
      singleExtensions   [1]       EXPLICIT Extensions OPTIONAL }

   CertStatus ::= CHOICE {
       good        [0]     IMPLICIT NULL,
       revoked     [1]     IMPLICIT RevokedInfo,
       unknown     [2]     IMPLICIT UnknownInfo }


Denis Pinkas              Expires March 24, 2013               [Page 16]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

   RevokedInfo ::= SEQUENCE {
       revocationTime              GeneralizedTime,
       revocationReason    [0]     EXPLICIT CRLReason OPTIONAL }

   UnknownInfo ::= NULL

   responderID indicates either the name or the key from a CA, or the
   name or the key from a OCSP Responder.

   producedAt indicates the time at which this response was signed.

   responses contains one or more single responses.

   responseExtensions is OPTIONAL.  Any specific extension is OPTIONAL.
   The critical flag may or may not be set.

   certID is usually a copy of the same field which was placed in the
   request, but for OCSP responders which pre-produce signed responses
   certID may be the identifier of a target certificate that was not
   present in the request (see the end of section 4.2).

   certStatus indicates the status of the certificate: either good,
   revoked or unknown.

   thisUpdate indicates the time at which the status being indicated
   is known to be correct.

   nextUpdate indicates the time at or before which newer information
   will be available about the status of the certificate.  If
   nextUpdate is not set, the server is indicating that newer
   revocation information is available all the time.

   If nextUpdate is set, it often corresponds to the {thisUpdate,
   nextUpdate} interval in CRLs.  Responses whose nextUpdate value is
   earlier than the local UTC time value SHOULD be considered
   unreliable.  Responses whose thisUpdate time is later than the local
   UTC time SHOULD be considered unreliable.

   singleExtensions is OPTIONAL.  Any specific extension is OPTIONAL.
   The critical flag SHOULD NOT be set for any of them.

   revocationTime indicates the time at which the certificate was
   revoked.

   revocationReason is OPTIONAL.  It is defined in section 5.3.1 from
   RFC 5280 [RFC5280].

   The response MUST include a SingleResponse for each certificate in
   the request and SHOULD NOT include any additional SingleResponse
   elements.  There is however one exception:




Denis Pinkas              Expires March 24, 2013               [Page 12]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

      OCSP responders MAY pre-produce signed responses specifying the
      status of certificates at a specified time.  The time at which
      the status was known to be correct SHALL be reflected in the
      thisUpdate field of the response.

      OCSP responders that pre-generate status responses MAY return
      responses that include additional SingleResponse elements if
      necessary to improve response pre-generation performance or cache
      efficiency (as permitted in [RFC5019]).

4.3. Processing of requests and responses

   This section describes various processing algorithms.  Conforming
   implementations of this specification are not required to implement
   these processing algorithms, but MUST provide functionality
   equivalent to the external behavior resulting from these algorithms.
   Any algorithm may be used by a particular implementation so long as
   it produces the correct result.

4.3.1. Request processing by OCSP servers

   The behavior of an OCSP server will be different whether the OCSP
   server is a CA acting as an OCSP responder, is an OCSP Responder
   which received a delegation from one or more CAs, or is a locally
   trusted Responder.

4.3.1.1. Processing by a CA acting as an OCSP responder

   The OCSP responder SHALL maintain a list of entries. Each entry
   SHALL contain:

     - the URI associated to the OCSP responder, from which the OCSP
       requests are received,

     - the DN from that CA,

     - an issuing public key from that CA,

     - the method(s) used to know for which subset of certificates
       issued by the CA it is responsible for,

     - the method(s) used to obtain the revocation status of that
       subset of certificates issued under that CA issuing public key,
       and

     - the method used to gain access and sign with the private key
       corresponding to the issuing public key.

   For a given URI value, the OCSP responder SHALL only use one CA
   key pair value.

   When it receives an OCSP request on that URI, the OCSP responder
   SHALL handle exceptions according to section 2.3.

Denis Pinkas              Expires March 24, 2013               [Page 18]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

   If the OCSP request contains the name of a requestor, the OCSP
   responder SHALL verify whether there exists a locally defined rule
   which regulates access control.  If this rule exists, it SHALL be
   followed.

   Then, for each target certificate, the OCSP responder SHALL verify
   whether both the hash of the issuer's DN and the hash of the issuer
   public key which are present in the request are eligible to a
   locally defined rule which indicates that the OCSP responder is
   responsible to provide the revocation status of that target
   certificate.  If this rule exists, it SHALL be followed.

   Otherwise, the OCSP responder SHALL determine whether it is
   responsible to provide the revocation status of that target
   certificate according to the following rule.

   For each target certificate, the OCSP responder SHALL verify whether
   both the hash of the issuer's DN and the hash of the issuer public
   key which are present in the request match respectively with the DN
   and the hash of the public key of contained in an entry from the
   list of entries maintained by this OCSP responder.

   When there is no match, then the OCSP responder SHALL indicate the
   "unknown" status and proceed with the next target certificate from
   the OCSP request.

   When there is a match, then the OCSP responder SHALL use the serial
   number of the target certificate that is present in the request and
   determine the revocation status of that certificate according to
   the method(s) defined in the entry.

   When the revocation status is provided by the server using a real
   time access to a database of revocation statuses of issued
   certificates, then the thisUpdate field SHALL be present in the
   SingleResponse response whereas the nextUpdate field SHALL be
   missing.

   Otherwise, both the thisUpdate and the nextUpdate fields SHALL be
   present in the SingleResponse.

   The time at which this response will be signed MUST be indicated in
   the producedAt field from the SingleResponse.

   If a singleRequestExtensions is present in the request it MUST be
   processed.

   If there is another target certificate present in the request, it
   SHALL be processed in the same way.

   If a requestExtensions is present in the request it MUST be
   processed.

   The OCSP response MUST be signed using the CA issuing private key.

Denis Pinkas              Expires March 24, 2013               [Page 19]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

   The certs field SHOULD be kept empty.

4.3.1.2. Processing by an OCSP Responder

   For each CA from which the OCSP Responder has received a delegation,
   the OCSP Responder SHALL maintain a list of entries.

   Each entry SHALL contain:

     - the URI associated to this OCSP Responder, from which the OCSP
       requests are received,

     - the DN from that CA,

     - an issuing public key from that CA,

     - the method(s) used to know for which subset of certificates
       issued by the CA it is responsible for,

     - the method(s) used to obtain the revocation status of that
       subset of certificates issued under that CA issuing public key,

     - an OCSP certificate,

     - the OCSP public key contained in that OCSP certificate, and

     - the method used to gain access and sign with the OCSP private
       key corresponding to that OCSP certificate.

   For a given URI value, the OCSP Responder SHALL only use one OCSP
   key pair value.  Therefore there cannot be two entries with the
   same URI value and a different OCSP public key value.

   NOTE: a BasicOCSPResponse can only be signed using a single private
         key.

   The OCSP certificate SHALL be signed by the CA issuing private key
   which corresponds to the issuing CA public key that is in this
   entry.

   When it receives an OCSP request, the OCSP responder SHALL handle
   exceptions according to section 2.3.

   If the OCSP request contains the name of a requestor, the OCSP
   responder SHALL verify whether there exists a locally defined rule
   which regulates access control.  If this rule exists, it SHALL be
   followed.

   For each target certificate, the OCSP Responder SHALL verify
   whether both the hash of the issuer's DN and the hash of the issuer
   public key which are present in the OCSP request match with those
   from an entry.


Denis Pinkas              Expires March 24, 2013               [Page 20]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

   When there is no match, then the OCSP Responder SHALL indicate the
   "unknown" status and proceed with the next target certificate from
   the OCSP request.

   When there is a match, the OCSP Responder SHALL use the serial
   number of the target certificate this is present in the OCSP
   request to determine the revocation status of that certificate
   according to the method(s) indicated in the entry.

   When the revocation status is provided by the server using a real
   time access to a database of revocation statuses of issued
   certificates, then the thisUpdate field SHALL be present in the
   SingleResponse response whereas the nextUpdate field SHALL be
   missing.

   Otherwise, both the thisUpdate and the nextUpdate fields SHALL be
   present in the SingleResponse.

   The time at which this response will be signed MUST be indicated in
   the producedAt field from the SingleResponse.

   If a singleRequestExtensions is present in the request it MUST be
   processed.

   If there is another target certificate present in the request, it
   SHALL be processed in the same way.

   If a requestExtensions is present in the request it SHALL be
   processed.

   The OCSP response MUST be signed using the OCSP private key.

   Unless there is a local rule which states differently, for every
   target certificate which matches both with the hash of a CA DN and an
   issuing public key from an entry, the OCSP certificate of that entry
   SHALL be placed in the certs field.

   It may happen, that none of the target certificates from the OCSP
   request matches both with the hash of a CA DN and an issuing public
   key from an entry.  In that case and unless a local rule states
   differently, the certs field from the BasicOCSPResponse SHOULD be
   kept empty (to limit the disclose of the names of the CAs from which
   the OCSP Responder received a delegation from).

4.3.1.3. Processing by a locally trusted Responder

   For each CA for which the locally trusted Responder is
   authoritative, the OCSP Responder SHALL maintain a list of entries.

   Each entry SHALL contain:

     - the URI associated to this OCSP Responder, from which the OCSP
       requests are received,

Denis Pinkas              Expires March 24, 2013               [Page 21]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

     - the DN from that CA,

     - an issuing public key from that CA,

     - the method(s) used to know for which subset of certificates
       issued by the CA it is responsible for,

     - the method(s) used to obtain the revocation status of that
       subset of certificates issued under that CA issuing public key,

     - the method used to gain access to the private key in order to
       sign the OCSP response.

   For a given URI value, the OCSP Responder SHALL only use one private
   key.  Therefore there cannot be two entries with the same URI value
   and a different method to gain access to the appropriate private key.

   NOTE: a BasicOCSPResponse can only be signed using a single private
         key.

   When it receives an OCSP request, the OCSP responder SHALL handle
   exceptions according to section 2.3.

   If the OCSP request contains the name of a requestor, the OCSP
   responder SHALL verify whether there exists a locally defined rule
   which regulates access control.  If this rule exists, it SHALL be
   followed.

   For each target certificate, the OCSP Responder SHALL verify
   whether both the hash of the issuer's DN and the hash of the issuer
   public key which are present in the OCSP request match with those
   from an entry.

   When there is no match, then the OCSP Responder SHALL indicate the
   "unknown" status and proceed with the next target certificate from
   the OCSP request.

   When there is a match, the OCSP Responder SHALL use the serial
   number of the target certificate this is present in the OCSP
   request to determine the revocation status of that certificate
   according to the method(s) indicated in the entry.

   When the revocation status is provided by the server using a real
   time access to a database of revocation statuses of issued
   certificates, then the thisUpdate field SHALL be present in the
   SingleResponse response whereas the nextUpdate field SHALL be
   missing.

   Otherwise, both the thisUpdate and the nextUpdate fields SHALL be
   present in the SingleResponse.

   The time at which this response will be signed MUST be indicated in
   the producedAt field from the SingleResponse.

Denis Pinkas              Expires March 24, 2013               [Page 22]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

   If a singleRequestExtensions is present in the request it MUST be
   processed.

   If there is another target certificate present in the request, it
   SHALL be processed in the same way.

   If a requestExtensions is present in the request it SHALL be
   processed.

   The OCSP response MUST be signed using the OCSP private key.

   The certs field may contain no, one or several OCSP certificates
   according to local rules followed by the locally trusted Responder.

4.3.2. Response processing by an OCSP client

   OCSP responses can be verified at the current time by an OCSP client
   when receiving a response, whereas old responses can be verified at
   a time in the past by a verifier.  The algorithm below addresses
   both cases.

   Prior to processing a basic response, OCSP clients MUST determine
   the checking time, which may be either the current time or a time
   in the past.

   OCSP clients or verifiers SHALL check if the response contains a
   critical responseExtensions. If such an extension is found and is
   recognized, it MUST be processed.  If such an extension is found and
   is not recognized, the whole OCSP response MUST be considered as
   invalid.

   If the checking time is the current time, and if a nonce extension
   has been used in the request and is recognized (see section 4.5.1),
   OCSP clients MUST check whether the same nonce is present in the
   response.  If the nonce is not present or is different, then the
   OCSP response MUST be discarded.

   Only the single response(s) which are/is of interest SHALL be
   checked.

STEP 1

   OCSP clients or verifiers SHALL verify that the certificate
   identified in a single response is of interest.  Otherwise, proceed
   to step 3.

   If the certificate status included in a single certificate response
   is "unknown", then the revocation status of that certificate is
   "unknown", and proceed to step 3.





Denis Pinkas              Expires March 24, 2013               [Page 23]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

   If the certificate status from the single certificate response is
   either "good" or "revoked", OCSP clients or verifiers SHALL check
   that the checking time is within the validity period of the target
   certificate.  If it is not the case, then the revocation status of
   that certificate is "unknown" and proceed to step 3.

   If the checking time is the current time, and if a nonce has been
   used in the request, then proceed to step 2.

   If the checking time is the current time, and if no nonce has been
   used in the request, OCSP clients MUST check that the producedAt
   field is within a time window that is "close enough" to the current
   time.

   Note: the notion of "close enough" is a local matter.  It can be set
         to a few minutes to allow for small UTC time differences
         between the client and the server or to a few hours in case
         the server is producing pre-computed responses.

   If the checking time is a time in the past, verifiers MUST check
   that the producedAt field is in accordance with the verification
   rules (e.g. close and/or after the date of a time-stamp token).

   In addition, if the nextUpdate field is present, OCSP clients MUST
   check that the time which is indicated is greater than the checking
   time, otherwise the single response MUST be discarded.

   If checks are successful, then OCSP clients MUST process the
   singleExtensions field, if it is present.

   If the criticality flag is set and the extension is not understood,
   then the status of the certificate shall be "unknown" and proceed to
   step 3.  Otherwise, proceed to step 2.

   If the extension is understood, then the extension MUST be
   processed.  According to its content proceed either to step 2 or to
   step 3.

STEP 2

   OCSP clients or verifiers MUST build and verify a certification path
   for that certificate up to a trusted root, so that they have the
   knowledge of the CA public key value that was used to sign the
   target certificate.  The revocation status of each certificate of
   that certification path (except the target certificate) SHALL be
   checked.

   If no path can be built or if one of the certificates of the path is
   revoked, then the revocation status of that certificate is "unknown",
   and proceed to step 3.




Denis Pinkas              Expires March 24, 2013               [Page 24]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

   If the certification path (except the target certificate) is valid,
   then two cases need to be considered:

   a) If the responderID matches with the name or the key from the CA
      which has issued the target certificate, then check whether the
      OCSP response is signed by the same key that was used to sign
      the target certificate.

             If it is the case, then the revocation status of that
             certificate as indicated in the certStatus field is
             accepted and proceed to step 3.

             If it is not the case, then the revocation status of that
             certificate is "unknown" and proceed to step 3.

   b) If the responderID does not match with the name or the key from
      the CA which has issued the target certificate, then it indicates
      the name or the key from an OCSP Responder.  Check whether there
      exists a local rule which applies to this target certificate to
      verify that the signature of the BasicOCSPResponse is valid for
      that single response.  If this rule exists, it SHALL be followed.

      Otherwise check whether there is an OCSP certificate (i.e. which
      has both the ocspSigning OID in the extended key usage extension
      and the digitalSignature bit in the key usage extension) signed
      by the same key that was used to sign the target certificate.
      This certificate MUST be present in the certs field from the
      BasicOCSPResponse.

          If such certificate is not found or is invalid, then the
          revocation status of that certificate is "unknown" and
          proceed to step 3.

          If such certificate exists and if the checking time is
          within the validity period of this certificate, then it MUST
          be verified whether the OCSP response can be verified using
          the public key that is present in the OCSP Certificate.

             If it is not the case, then the revocation status of that
             certificate is "unknown" and proceed to step 3.

             If it is the case, then it MUST be verified that the OCSP
             Certificate has not been revoked.

   CAs may choose to deal with this problem in one of three ways:

   - A CA may specify that an OCSP client can trust a responder for the
     lifetime of the responder's certificate.

     The CA does so by including the extension id-pkix-ocsp-nocheck.
     This SHOULD be a non-critical extension.  The value of the
     extension SHALL be NULL.


Denis Pinkas              Expires March 24, 2013               [Page 25]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

   NoCheck ::= NULL

   CAs issuing such a certificate should realize that a compromise of
   the responder's key is as serious as the compromise of a CA key used
   to sign CRLs, at least for the validity period of this certificate.
   CA's may choose to issue this type of certificate with a very short
   lifetime and renew it frequently.

   id-pkix-ocsp-nocheck OBJECT IDENTIFIER ::= { id-pkix-ocsp 5 }

   - A CA may specify how the responder's certificate be checked for
     revocation.  This can be done using CRL Distribution Points if the
     check should be done using CRLs, or Authority Information Access
     if the check should be done in some other way.  Details for
     specifying either of these two mechanisms are available in
     [RFC5280].

   - A CA may choose not to specify any method of revocation checking
     for the responder's certificate, in which case, it would be up to
     the OCSP client's local security policy to decide whether that
     certificate should be checked for revocation or not.

     If one of these conditions is met, then the status for the target
     certificate as indicated in the certStatus field is accepted,
     otherwise the revocation status is "unknown".

STEP 3

   If there exists another single certificate status response for a
   target certificate that is of interest, then proceed to step 1.
   Otherwise the basic response is now processed.

4.4. Mandatory and Optional Cryptographic Algorithms

   Clients that request OCSP services SHALL be capable of processing
   responses signed using RSA with SHA-1 (identified by
   sha1WithRSAEncryption OID specified in [RFC3279]) and RSA with
   SHA-256 (identified by sha256WithRSAEncryption OID specified in
   [RFC4055]).

   Clients SHOULD also be capable of processing responses signed using
   DSA keys (identified by the id-dsa-with-sha1 OID specified in
   [RFC3279]).  Clients MAY support other algorithms.

4.5. Extensions

   This section defines some standard extensions, based on the
   extension model employed in X.509 version 3 certificates see
   [RFC5280].  Support for all extensions is optional for both clients
   and responders.




Denis Pinkas              Expires March 24, 2013               [Page 26]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

   For each extension, the definition indicates its syntax, processing
   performed by the OCSP Responder, and any extensions which are
   included in the corresponding response.

4.5.1. Nonce

   The nonce cryptographically binds a request and a response to prevent
   replay attacks.  The nonce is included as one of the
   requestExtensions in requests, while in responses it would be
   included as one of the responseExtensions.  In both the request and
   the response, the nonce will be identified by the object identifier
   id-pkix-ocsp-nonce, while the extnValue is the value of the nonce.

   id-pkix-ocsp           OBJECT IDENTIFIER ::= { id-ad-ocsp }
   id-pkix-ocsp-nonce     OBJECT IDENTIFIER ::= { id-pkix-ocsp 2 }

   Nonce ::= OCTET STRING

4.5.2. CRL References

   It may be desirable for the OCSP responder to indicate the CRL on
   which a revoked or onHold certificate is found.  This can be useful
   where OCSP is used between repositories, and also as an auditing
   mechanism.  The CRL may be specified by a URL (the URL at which the
   CRL is available), a number (CRL number) or a time (the time at
   which the relevant CRL was created).  These extensions will be
   specified as singleExtensions.

   The identifier for this extension will be id-pkix-ocsp-crl, while the
   value will be CrlID.

   id-pkix-ocsp-crl       OBJECT IDENTIFIER ::= { id-pkix-ocsp 3 }

   CrlID ::= SEQUENCE {
      crlUrl               [0]     EXPLICIT IA5String OPTIONAL,
      crlNum               [1]     EXPLICIT INTEGER OPTIONAL,
      crlTime              [2]     EXPLICIT GeneralizedTime OPTIONAL }

   For the choice crlUrl, the IA5String will specify the URL at which
   the CRL is available.  For crlNum, the INTEGER will specify the
   value of the CRL number extension of the relevant CRL.  For crlTime,
   the GeneralizedTime will indicate the time at which the relevant CRL
   was issued.

4.5.3  Acceptable Response Types

   An OCSP client MAY wish to specify the kinds of response types it
   understands.  To do so, it SHOULD use an extension with the OID
   id-pkix-ocsp-response, and the value AcceptableResponses.





Denis Pinkas              Expires March 24, 2013               [Page 27]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

   This extension is included as one of the requestExtensions in
   requests.  The OIDs included in AcceptableResponses are the OIDs of
   the various response types this client can accept (e.g.,
   id-pkix-ocsp-basic).

   id-pkix-ocsp-response OBJECT IDENTIFIER ::= { id-pkix-ocsp 4 }
   AcceptableResponses ::= SEQUENCE OF OBJECT IDENTIFIER

   As noted in section 4.2.1, OCSP responders SHALL be capable of
   responding with responses of the id-pkix-ocsp-basic response type.
   Correspondingly, OCSP clients SHALL be capable of receiving and
   processing responses of the id-pkix-ocsp-basic response type.

4.5.4  Archive Cutoff

   An OCSP responder MAY choose to retain revocation information beyond
   a certificate's expiration.  The date obtained by subtracting this
   retention interval value from the producedAt time in a response is
   defined as the certificate's "archive cutoff" date.

   OCSP-enabled applications would use an OCSP archive cutoff date to
   contribute to a proof that a digital signature was (or was not)
   reliable on the date it was produced even if the certificate needed
   to validate the signature has long since expired.

   OCSP servers that provide support for such historical reference
   SHOULD include an archive cutoff date extension in responses.  If
   included, this value SHALL be provided as an OCSP singleExtensions
   extension identified by id-pkix-ocsp-archive-cutoff and of syntax
   GeneralizedTime.

   id-pkix-ocsp-archive-cutoff  OBJECT IDENTIFIER ::= { id-pkix-ocsp 6 }
   ArchiveCutoff ::= GeneralizedTime

   To illustrate, if a server is operated with a 7-year retention
   interval policy and status was produced at time t1 then the value
   for ArchiveCutoff in the response would be (t1 - 7 years).

4.5.5. CRL Entry Extensions

   All the extensions specified as CRL Entry Extensions - in
   Section 5.3 of [RFC5280] - are also supported as singleExtensions.

4.5.6. Service Locator

   An OCSP server may be operated in a mode whereby the server receives
   a request and routes it to the OCSP server which is known to be
   authoritative for the identified certificate.  The serviceLocator
   request extension is defined for this purpose.  This extension is
   included as one of the singleRequestExtensions in requests.

   id-pkix-ocsp-service-locator OBJECT IDENTIFIER ::= { id-pkix-ocsp 7 }


Denis Pinkas              Expires March 24, 2013               [Page 28]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

   ServiceLocator ::= SEQUENCE {
       issuer    Name,
       locator   AuthorityInfoAccessSyntax OPTIONAL }

   Values for these fields are obtained from the corresponding fields
   in the subject certificate.

4.5.7. Preferred Signature Algorithms

   Since algorithms other than the mandatory to implement algorithms
   are allowed, and since a client currently has no mechanism to
   indicate it's algorithm preferences, there is always a risk that a
   server choosing a non-mandatory algorithm, will generate a response
   that the client may not support.

   While an OCSP responder may apply rules for algorithm selection,
   e.g., using the signature algorithm employed by the CA for signing
   CRLs and certificates, such rules may fail in common situations:

   o  The algorithm used to sign the CRLs and certificates may not be
      consistent with key pair being used by the OCSP responder to sign
      responses.

   o  A request for an unknown certificate provides no basis for a
      responder to select from among multiple algorithm options.

   The last criterion cannot be resolved through the information
   available from in-band signaling using the RFC 2560 [RFC2560]
   protocol, without modifying the protocol.

   In addition, an OCSP responder may wish to employ different
   signature algorithms than the one used by the CA to sign
   certificates and CRLs for several reasons:

   o  The responder may employ an algorithm for certificate status
      response that is less computationally demanding than for signing
      the certificate itself.

   o  An implementation may wish to guard against the possibility of a
      compromise resulting from a signature algorithm compromise by
      employing two separate signature algorithms.

   This section describes:

   o  An extension that allows a client to indicate the set of
      preferred signature algorithms.

   o  Rules for signature algorithm selection that maximizes the
      probability of successful operation in the case that no supported
      preferred algorithm(s) are specified.




Denis Pinkas              Expires March 24, 2013               [Page 29]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

4.5.7.1. Extension Syntax

   A client MAY declare a preferred set of algorithms in a request by
   including a preferred signature algorithms extension in
   requestExtensions of the OCSPRequest.

     id-pkix-ocsp-pref-sig-algs OBJECT IDENTIFIER ::= { id-pkix-ocsp 8 }

     PreferredSignatureAlgorithms ::= SEQUENCE OF
                                      PreferredSignatureAlgorithm

     PreferredSignatureAlgorithm ::= SEQUENCE {
        sigIdentifier        AlgorithmIdentifier,
        pubKeyAlgIdentifier  SMIMECapability OPTIONAL
        }

   The syntax of AlgorithmIdentifier is defined in section 4.1.1.2 of
   RFC 5280 [RFC5280].  The syntax of SMIMECapability is defined in
   RFC 5751 [RFC5751].

   sigIdentifier specifies the signature algorithm the client prefers,
   e.g. algorithm=ecdsa-with-sha256.  Parameters are absent for most
   common signature algorithms.

   pubKeyAlgIdentifier specifies the subject public key algorithm
   identifier the client prefers in the server's certificate used to
   validate the OCSP response. e.g. algorithm=id-ecPublicKey and
   parameters= secp256r1.

   pubKeyAlgIdentifier is OPTIONAL and provides means to specify
   parameters necessary to distinguish among different usages of a
   particular algorithm, e.g. it may be used by the client to specify
   what curve it supports for a given elliptic curve algorithm.

   The client MUST support each of the specified preferred signature
   algorithms and the client MUST specify the algorithms in the order
   of preference, from the most preferred to the least preferred.

   Section 4.4.7.1 of this document describes how a server selects an
   algorithm for signing OCSP responses to the requesting client.

4.5.7.2. Responder Signature Algorithm Selection

   RFC 2560 [RFC2560] did not specify a mechanism for deciding the
   signature algorithm to be used in an OCSP response.  This does not
   provide a sufficient degree of certainty as to the algorithm
   selected to facilitate interoperability.







Denis Pinkas              Expires March 24, 2013               [Page 30]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

4.5.7.2.1. Dynamic Response

   A responder MAY maximize the potential for ensuring interoperability
   by selecting a supported signature algorithm using the following
   order of precedence, as long as the selected algorithm meets all
   security requirements of the OCSP responder, where the first method
   has the highest precedence:

   1.  Select an algorithm specified as a preferred signing algorithm
       in the client request.

   2.  Select the signing algorithm used to sign a certificate
       revocation list (CRL) issued by the certificate issuer providing
       status information for the certificate specified by CertID.

   3.  Select the signing algorithm used to sign the OCSPRequest.

   4.  Select a signature algorithm that has been advertised as being
       the default signature algorithm for the signing service using an
       out of band mechanism.

   5.  Select a mandatory or recommended signing algorithm specified
       for the version of the OCSP protocol in use.

   A responder SHOULD always apply the lowest numbered selection
   mechanism that results in the selection of a known and supported
   algorithm that meets the responder's criteria for cryptographic
   algorithm strength.

4.5.7.2.2. Static Response

   For purposes of efficiency, an OCSP responder is permitted to
   generate static responses in advance of a request. The case may not
   permit the responder to make use of the client request data during
   the response generation, however the responder SHOULD still use the
   client request data during the selection of the pre-generated
   response to be returned.  Responders MAY use the historical client
   requests as part of the input to the decisions of what different
   algorithms should be used to sign the pre-generated responses.

5. Security Considerations

5.1. Denial of service attack using false error responses

   Unsigned error responses open up the protocol to another denial of
   service attack, where the attacker sends false error responses.

5.2. Using CRLs as a fall-back mechanism

   For this service to be effective, certificate-using systems must
   connect to the certificate status service provider.  In the event
   such a connection cannot be obtained, certificate-using systems
   could implement CRL processing logic as a fall-back position.

Denis Pinkas              Expires March 24, 2013               [Page 31]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

5.3. Different results when using OCSP and CRLs

   OCSP clients or verifiers must build and verify a certification path
   for each target certificate up to a trusted root.  When an OCSP
   Responder is using published CRLs, it must also build and verify a
   certification path for the CRLs it uses up to a trusted root.

   However, it should be realized that the root used by an OCSP
   Responder to verified these CRLs is not necessarily the same as the
   one that would be used by the OCSP client if it were going to verify
   the CRLs itself.  Hence the revocation status may not be identical
   in both cases.

5.4. Denial of service attack using a flood of queries

   A denial of service vulnerability is evident with respect to a flood
   of queries.  The production of a cryptographic signature
   significantly affects response generation cycle time, thereby
   exacerbating the situation.

   The flood of queries may either come from a flood attack or from the
   fact that there are too many certificates supported by the same OCSP
   responder.  In the later case, the number of queries can be
   diminished by using a technique similar to the splitting of CRLs:

      When a block of certificates have been issued with the same
      accessLocation in the AIA extension field of these certificates,
      then the accessLocation should be changed.  In this way, a given
      OCSP server will only serve one block of certificates.

5.5. Use of precomputed responses

   The use of precomputed responses allows replay attacks in which an
   old (good) response is replayed prior to its expiration date but
   after the certificate has been revoked.  Deployments of OCSP should
   carefully evaluate the benefit of precomputed responses against the
   probability of a replay attack and the costs associated with its
   successful execution.

   Requests do not contain the responder they are directed to. This
   allows an attacker to replay a request to any number of OCSP
   responders.

   The reliance of HTTP caching in some deployment scenarios may result
   in unexpected results if intermediate servers are incorrectly
   configured or are known to possess cache management faults.
   Implementors are advised to take the reliability of HTTP cache
   mechanisms into account when deploying OCSP over HTTP.






Denis Pinkas              Expires March 24, 2013               [Page 32]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

5.6. Preferred Signature Algorithms

   The mechanism used to choose the response signing algorithm MUST be
   considered to be sufficiently secure against cryptanalytic attack for
   the intended application.

   In most applications it is sufficient for the signing algorithm to be
   at least as secure as the signing algorithm used to sign the original
   certificate whose status is being queried.  This criterion may not
   hold in long term archival applications however in which the status
   of a certificate is being checked for a date in the distant past,
   long after the signing algorithm has ceased being considered
   trustworthy.

5.6.1 Use of insecure algorithms

   It is not always possible for a responder to generate a response that
   the client is expected to understand and that meets contemporary
   standards for cryptographic security.  In such cases an OCSP
   responder operator MUST balance the risk of employing a compromised
   security solution and the cost of mandating an upgrade, including the
   risk that the alternative chosen by end users will offer even less
   security or no security.

   In archival applications it is quite possible that an OCSP responder
   might be asked to report the validity of a certificate on a date in
   the distant past.  Such a certificate might employ a signing method
   that is no longer considered acceptably secure.  In such
   circumstances either the responder SHOULD NOT generate a signature
   using a signing mechanism that is not considered acceptably secure
   or SHOULD time-stamp the OCSP response.

   A client MUST accept any signing algorithm in a response that it
   specified as a preferred signing algorithm in the request.  It
   follows therefore that a client MUST NOT specify as a preferred
   signing algorithm any algorithm that is either not supported or not
   considered acceptably secure.

5.6.2. Man in the Middle Downgrade Attack

   The mechanism to support client indication of preferred signature
   algorithms is not protected against a man in the middle downgrade
   attack.  This constraint is not considered to be a significant
   security concern since the OCSP responder MUST NOT sign OCSP
   Responses using weak algorithms, even if requested by the client.
   In addition, the client can reject OCSP responses that do not meet
   its own criteria for acceptable cryptographic security no matter what
   mechanism is used to determine the signing algorithm of the response.






Denis Pinkas              Expires March 24, 2013               [Page 33]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

5.6.3. Denial of Service Attack using the algorithm agility mechanisms

   Algorithm agility mechanisms defined in this document introduces a
   slightly increased attack surface for Denial-of-Service attacks where
   the client request is altered to require algorithms that are not
   supported by the server.  Denial-of-Service considerations from RFC
   4732 [RFC4732] are relevant for this document.

5.7. Other replay attacks

   As already mentioned in section 5.5, replay attacks are possible
   using precomputed responses.  Replay attacks are also possible when
   no nonce is being used in the OCSP request and the time window
   mentioned in section 4.3.2 (STEP 1)is too large.

6. IANA Considerations

   Appendix C (MIME registrations) already contains the information
   which is necessary for this RFC.  No further action is necessary.

7. References

7.1. Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, March 1997.

   [RFC3279]  Bassham, L., Polk, W., and R. Housley, "Algorithms and
              Identifiers for the Internet X.509 Public Key
              Infrastructure Certificate and Certificate Revocation List
              (CRL) Profile", RFC 3279, April 2002.

   [RFC4055]  Schaad, J., Kaliski, B., and R. Housley, "Additional
              Algorithms and Identifiers for RSA Cryptography for use in
              the Internet X.509 Public Key Infrastructure Certificate
              and Certificate Revocation List (CRL) Profile", RFC 4055,
              June 2005.

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

   [RFC5751]  Ramsdell, B. and S. Turner, "Secure/Multipurpose Internet
              Mail Extensions (S/MIME) Version 3.2 Message
              Specification", RFC 5751, January 2010.

   [RFC6277]  Santesson, S. and P. Hallam-Baker, "Online Certificate
              Status Protocol Algorithm Agility", RFC 6277, June 2011.





Denis Pinkas              Expires March 24, 2013               [Page 34]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

   [X.690]    ITU-T Recommendation X.690 (1994) | ISO/IEC 8825-1:1995,
              Information Technology - ASN.1 encoding rules:
              Specification of Basic Encoding Rules (BER), Canonical
              Encoding Rules (CER) and Distinguished Encoding Rules
              (DER).

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

   [RFC2616]  Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
              Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
              Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.

   [RFC4732]  Handley, M., Rescorla, E., "Internet Denial-of-Service
              Considerations" RFC 4732, November 2006.

   [RFC5019]  Deacon, A. and R. Hurst, "The Lightweight Online
              Certificate Status Protocol (OCSP) Profile for High-Volume
              Environments", RFC 5019, September 2007.

   [RFC5912]  Hoffman, P. and J. Schaad, "New ASN.1 Modules for the
              Public Key Infrastructure Using X.509 (PKIX)", RFC 5912,
              June 2010.

8. Acknowledgements

   This document is based on RFC 2560 for which the authors were
   M. Myers, R. Ankney, A. Malpani and S. Galperin.

   It capitalizes on an original draft from S. Santesson.

   The initial draft of this document has been reviewed and commented
   by D. Rouger, R. Santini, B. Sevellec while the published drafts
   have been reviewed and commented in detail by S. Chokhani.

















Denis Pinkas              Expires March 24, 2013               [Page 35]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012


Appendix A.

A.1 OCSP over HTTP

   This section describes the formatting that will be done to the
   request and response to support HTTP [RFC2616].

A.1.1 Request

   HTTP based OCSP requests can use either the GET or the POST method to
   submit their requests. To enable HTTP caching, small requests (that
   after encoding are less than 255 bytes), MAY be submitted using GET.
   If HTTP caching is not important, or the request is greater than 255
   bytes, the request SHOULD be submitted using POST.  Where privacy is
   a requirement, OCSP transactions exchanged using HTTP MAY be
   protected using either TLS/SSL or some other lower layer protocol.

   An OCSP request using the GET method is constructed as follows:

   GET {url}/{url-encoding of base-64 encoding of the DER encoding of
   the OCSPRequest}

   where {url} may be derived from the value of AuthorityInfoAccess or
   other local configuration of the OCSP client.

   An OCSP request using the POST method is constructed as follows: The
   Content-Type header has the value "application/ocsp-request" while
   the body of the message is the binary value of the DER encoding of
   the OCSPRequest.

A.1.2 Response

   An HTTP-based OCSP response is composed of the appropriate HTTP
   headers, followed by the binary value of the DER encoding of the
   OCSPResponse. The Content-Type header has the value
   "application/ocsp-response". The Content-Length header SHOULD specify
   the length of the response. Other HTTP headers MAY be present and MAY
   be ignored if not understood by the requestor.















Denis Pinkas              Expires March 24, 2013               [Page 36]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012


Appendix B.  ASN.1 Modules

   This appendix includes the ASN.1 modules for OCSP.

   Appendix B.1 includes an ASN.1 module that conforms to the 1998
   version of ASN.1 for all syntax elements of OCSP other than the
   preferred signature algorithms extension.

   Appendix B.2 includes an ASN.1 module that conforms to the 2002
   version of ASN.1 for all syntax elements of OCSP other than the
   preferred signature algorithms extension.

   Note: the ASN.1 module that conforms to the 2002 version of ASN.1
         which may be found in Section 4 of [RFC5912] has an omission
         since the nocheck extension is undefined.

   Appendix B.3 includes two ASN.1 modules for the preferred signature
   algorithms extension, one that conforms to the 1998 version of ASN.1
   and one that conforms to the 2002 version of ASN.1.

B.1. OCSP module which conforms to the 1988 syntax of ASN.1

OCSP {iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0) id-mod-ocsp-xx(XX)}

DEFINITIONS EXPLICIT TAGS ::=

BEGIN

IMPORTS

   -- PKIX Certificate Extensions
      AuthorityInfoAccessSyntax, CRLReason, GeneralName
      FROM PKIX1Implicit88 { iso(1) identified-organization(3)
           dod(6) internet(1) security(5) mechanisms(5) pkix(7)
           id-mod(0) id-pkix1-implicit(19) }

      Name, CertificateSerialNumber, Extensions,
      id-kp, id-ad-ocsp, Certificate, AlgorithmIdentifier
      FROM PKIX1Explicit88 { iso(1) identified-organization(3)
           dod(6) internet(1) security(5) mechanisms(5) pkix(7)
           id-mod(0) id-pkix1-explicit(18) };

OCSPRequest ::= SEQUENCE {
   tbsRequest              TBSRequest,
   optionalSignature   [0] EXPLICIT Signature OPTIONAL }

TBSRequest ::= SEQUENCE {
   version             [0] EXPLICIT Version DEFAULT v1,
   requestorName       [1] EXPLICIT GeneralName OPTIONAL,
   requestList             SEQUENCE OF Request,
   requestExtensions   [2] EXPLICIT Extensions OPTIONAL }

Denis Pinkas              Expires March 24, 2013               [Page 37]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012


Signature ::= SEQUENCE {
   signatureAlgorithm      AlgorithmIdentifier,
   signature               BIT STRING,

   certs               [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL }

Version ::= INTEGER { v1(0) }

Request ::= SEQUENCE {
   reqCert                     CertID,
   singleRequestExtensions [0] EXPLICIT Extensions OPTIONAL }

CertID ::= SEQUENCE {
   hashAlgorithm           AlgorithmIdentifier,
   issuerNameHash          OCTET STRING, -- Hash of Issuer's DN
   issuerKeyHash           OCTET STRING, -- Hash of Issuers public key
   serialNumber            CertificateSerialNumber }

OCSPResponse ::= SEQUENCE {
   responseStatus          OCSPResponseStatus,
   responseBytes       [0] EXPLICIT ResponseBytes OPTIONAL }

OCSPResponseStatus ::= ENUMERATED {
   successful          (0),  -- Response has valid confirmations
   malformedRequest    (1),  -- Illegal confirmation request
   internalError       (2),  -- Internal error in issuer
   tryLater            (3),  -- Try again later
                             -- (4) is not used
   sigRequired         (5),  -- Must sign the request
   unauthorized        (6)   -- Request unauthorized
}

ResponseBytes ::= SEQUENCE {
   responseType            OBJECT IDENTIFIER,
   response                OCTET STRING }

BasicOCSPResponse ::= SEQUENCE {
  tbsResponseData          ResponseData,
  signatureAlgorithm       AlgorithmIdentifier,
  signature                BIT STRING,
  certs                [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL }

ResponseData ::= SEQUENCE {
   version             [0] EXPLICIT Version DEFAULT v1,
   responderID             ResponderID,
   producedAt              GeneralizedTime,
   responses               SEQUENCE OF SingleResponse,
   responseExtensions  [1] EXPLICIT Extensions OPTIONAL }

ResponderID ::= CHOICE {
   byName              [1] Name,
   byKey               [2] KeyHash }

Denis Pinkas              Expires March 24, 2013               [Page 38]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012


KeyHash ::= OCTET STRING --SHA-1 hash of responder's public key
                         -- (i.e., the SHA-1 hash of the value of the
                         -- BIT STRING subjectPublicKey [excluding
                         -- the tag, length, and number of unused
                         -- bits] in the responder's certificate)

SingleResponse ::= SEQUENCE {
   certID                  CertID,
   certStatus              CertStatus,
   thisUpdate              GeneralizedTime,
   nextUpdate          [0] EXPLICIT GeneralizedTime OPTIONAL,
   singleExtensions    [1] EXPLICIT Extensions OPTIONAL }

CertStatus ::= CHOICE {
   good                [0] IMPLICIT NULL,
   revoked             [1] IMPLICIT RevokedInfo,
   unknown             [2] IMPLICIT UnknownInfo }

RevokedInfo ::= SEQUENCE {
   revocationTime          GeneralizedTime,
   revocationReason    [0] EXPLICIT CRLReason OPTIONAL }

UnknownInfo ::= NULL

ArchiveCutoff ::= GeneralizedTime

AcceptableResponses ::= SEQUENCE OF OBJECT IDENTIFIER

ServiceLocator ::= SEQUENCE {
   issuer                  Name,
   locator                 AuthorityInfoAccessSyntax }

Nonce ::= OCTET STRING

NoCheck ::= NULL

-- Object Identifiers

id-kp-OCSPSigning            OBJECT IDENTIFIER ::= { id-kp 9 }
id-pkix-ocsp                 OBJECT IDENTIFIER ::= { id-ad-ocsp }
id-pkix-ocsp-basic           OBJECT IDENTIFIER ::= { id-pkix-ocsp 1 }
id-pkix-ocsp-nonce           OBJECT IDENTIFIER ::= { id-pkix-ocsp 2 }
id-pkix-ocsp-crl             OBJECT IDENTIFIER ::= { id-pkix-ocsp 3 }
id-pkix-ocsp-response        OBJECT IDENTIFIER ::= { id-pkix-ocsp 4 }
id-pkix-ocsp-nocheck         OBJECT IDENTIFIER ::= { id-pkix-ocsp 5 }
id-pkix-ocsp-archive-cutoff  OBJECT IDENTIFIER ::= { id-pkix-ocsp 6 }
id-pkix-ocsp-service-locator OBJECT IDENTIFIER ::= { id-pkix-ocsp 7 }

END




Denis Pinkas              Expires March 24, 2013               [Page 39]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

B.2. OCSP module which conforms to the 2002 syntax of ASN.1

  OCSP-2009
      {iso(1) identified-organization(3) dod(6) internet(1) security(5)
      mechanisms(5) pkix(7) id-mod(0) id-mod-ocsp-yy(YY)}

  DEFINITIONS EXPLICIT TAGS ::=

  BEGIN

  IMPORTS

  Extensions{}, EXTENSION, ATTRIBUTE
  FROM PKIX-CommonTypes-2009
      {iso(1) identified-organization(3) dod(6) internet(1) security(5)
      mechanisms(5) pkix(7) id-mod(0) id-mod-pkixCommon-02(57)}

  AlgorithmIdentifier{}, DIGEST-ALGORITHM, SIGNATURE-ALGORITHM
  FROM AlgorithmInformation-2009
      {iso(1) identified-organization(3) dod(6) internet(1) security(5)
      mechanisms(5) pkix(7) id-mod(0)
      id-mod-algorithmInformation-02(58)}

  AuthorityInfoAccessSyntax, GeneralName, CrlEntryExtensions
  FROM PKIX1Implicit-2009
      {iso(1) identified-organization(3) dod(6) internet(1) security(5)
      mechanisms(5) pkix(7) id-mod(0) id-mod-pkix1-implicit-02(59)}

  Name, CertificateSerialNumber, id-kp, id-ad-ocsp, Certificate
  FROM PKIX1Explicit-2009

      {iso(1) identified-organization(3) dod(6) internet(1) security(5)
      mechanisms(5) pkix(7) id-mod(0) id-mod-pkix1-explicit-02(51)}

  sa-dsaWithSHA1, sa-rsaWithMD2, sa-rsaWithMD5, sa-rsaWithSHA1
  FROM PKIXAlgs-2009
      {iso(1) identified-organization(3) dod(6) internet(1) security(5)
      mechanisms(5) pkix(7) id-mod(0)
      id-mod-pkix1-algorithms2008-02(56)};

  OCSPRequest     ::=     SEQUENCE {
      tbsRequest                  TBSRequest,
      optionalSignature   [0]     EXPLICIT Signature OPTIONAL }

  TBSRequest      ::=     SEQUENCE {
      version             [0] EXPLICIT Version DEFAULT v1,
      requestorName       [1] EXPLICIT GeneralName OPTIONAL,
      requestList             SEQUENCE OF Request,
      requestExtensions   [2] EXPLICIT Extensions {{re-ocsp-nonce |
                                  re-ocsp-response, ...}} OPTIONAL }




Denis Pinkas              Expires March 24, 2013               [Page 40]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

  Signature       ::=     SEQUENCE {
      signatureAlgorithm   AlgorithmIdentifier
                               { SIGNATURE-ALGORITHM, {...}},
      signature            BIT STRING,
      certs            [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL }

  Version  ::=  INTEGER  {  v1(0) }

  Request ::=     SEQUENCE {
      reqCert                    CertID,
      singleRequestExtensions    [0] EXPLICIT Extensions
                                         { {re-ocsp-service-locator,
                                                ...}} OPTIONAL }

  CertID ::= SEQUENCE {
      hashAlgorithm            AlgorithmIdentifier
                                   {DIGEST-ALGORITHM, {...}},
      issuerNameHash     OCTET STRING, -- Hash of Issuer's DN
      issuerKeyHash      OCTET STRING, -- Hash of Issuer's public key
      serialNumber       CertificateSerialNumber }

  OCSPResponse ::= SEQUENCE {
     responseStatus         OCSPResponseStatus,
     responseBytes          [0] EXPLICIT ResponseBytes OPTIONAL }

  OCSPResponseStatus ::= ENUMERATED {
      successful            (0), --Response has valid confirmations
      malformedRequest      (1), --Illegal confirmation request

      internalError         (2), --Internal error in issuer
      tryLater              (3), --Try again later
                                 -- (4) is not used
      sigRequired           (5), --Must sign the request
      unauthorized          (6)  --Request unauthorized
  }

  RESPONSE ::= TYPE-IDENTIFIER

  ResponseSet RESPONSE ::= {basicResponse, ...}

  ResponseBytes ::=       SEQUENCE {
      responseType        RESPONSE.
                              &id ({ResponseSet}),
      response            OCTET STRING (CONTAINING RESPONSE.
                              &Type({ResponseSet}{@responseType}))}

  basicResponse RESPONSE ::=
      { BasicOCSPResponse IDENTIFIED BY id-pkix-ocsp-basic }






Denis Pinkas              Expires March 24, 2013               [Page 41]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012


  BasicOCSPResponse       ::= SEQUENCE {
     tbsResponseData      ResponseData,
     signatureAlgorithm   AlgorithmIdentifier{SIGNATURE-ALGORITHM,
                              {sa-dsaWithSHA1 | sa-rsaWithSHA1 |
                                   sa-rsaWithMD5 | sa-rsaWithMD2, ...}},
     signature            BIT STRING,
     certs            [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL }

  ResponseData ::= SEQUENCE {
     version              [0] EXPLICIT Version DEFAULT v1,
     responderID              ResponderID,
     producedAt               GeneralizedTime,
     responses                SEQUENCE OF SingleResponse,
     responseExtensions   [1] EXPLICIT Extensions
                                  {{re-ocsp-nonce, ...}} OPTIONAL }

  ResponderID ::= CHOICE {
     byName   [1] Name,
     byKey    [2] KeyHash }

  KeyHash ::= OCTET STRING --SHA-1 hash of responder's public key
                           -- (excluding the tag and length fields)

  SingleResponse ::= SEQUENCE {
     certID                       CertID,
     certStatus                   CertStatus,
     thisUpdate                   GeneralizedTime,
     nextUpdate           [0]     EXPLICIT GeneralizedTime OPTIONAL,

     singleExtensions     [1]     EXPLICIT Extensions{{re-ocsp-crl |
                                               re-ocsp-archive-cutoff |
                                                CrlEntryExtensions, ...}
                                               } OPTIONAL }

  CertStatus ::= CHOICE {
      good                [0]     IMPLICIT NULL,
      revoked             [1]     IMPLICIT RevokedInfo,
      unknown             [2]     IMPLICIT UnknownInfo }

  RevokedInfo ::= SEQUENCE {
      revocationTime              GeneralizedTime,
      revocationReason    [0]     EXPLICIT CRLReason OPTIONAL }

  UnknownInfo ::= NULL

  CRLReason ::= INTEGER

  ArchiveCutoff ::= GeneralizedTime

  AcceptableResponses ::= SEQUENCE OF RESPONSE.&id({ResponseSet})



Denis Pinkas              Expires March 24, 2013               [Page 42]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012


  ServiceLocator ::= SEQUENCE {
      issuer    Name,
      locator   AuthorityInfoAccessSyntax }

  CrlID ::= SEQUENCE {
      crlUrl               [0]     EXPLICIT IA5String OPTIONAL,
      crlNum               [1]     EXPLICIT INTEGER OPTIONAL,
      crlTime              [2]     EXPLICIT GeneralizedTime OPTIONAL }

  --  Request Extensions

  re-ocsp-nonce EXTENSION ::= { SYNTAX OCTET STRING IDENTIFIED
                                    BY id-pkix-ocsp-nonce }
  re-ocsp-response EXTENSION ::= { SYNTAX AcceptableResponses IDENTIFIED
                                       BY id-pkix-ocsp-response }
  re-ocsp-service-locator EXTENSION ::= { SYNTAX ServiceLocator
                                          IDENTIFIED BY
                                          id-pkix-ocsp-service-locator }

  --  Response Extensions

  re-ocsp-crl EXTENSION ::= { SYNTAX CrlID IDENTIFIED BY
                                  id-pkix-ocsp-crl }
  re-ocsp-archive-cutoff EXTENSION ::= { SYNTAX ArchiveCutoff
                                         IDENTIFIED BY
                                         id-pkix-ocsp-archive-cutoff }

  --  Certificate Extension

  ocsp-nocheck EXTENSION ::= { SYNTAX NULL
                                         IDENTIFIED BY
                                         id-pkix-ocsp-nocheck }

  -- Object Identifiers

  id-kp-OCSPSigning            OBJECT IDENTIFIER ::= { id-kp 9 }
  id-pkix-ocsp                 OBJECT IDENTIFIER ::= { id-ad-ocsp }
  id-pkix-ocsp-basic           OBJECT IDENTIFIER ::= { id-pkix-ocsp 1 }
  id-pkix-ocsp-nonce           OBJECT IDENTIFIER ::= { id-pkix-ocsp 2 }
  id-pkix-ocsp-crl             OBJECT IDENTIFIER ::= { id-pkix-ocsp 3 }
  id-pkix-ocsp-response        OBJECT IDENTIFIER ::= { id-pkix-ocsp 4 }
  id-pkix-ocsp-nocheck         OBJECT IDENTIFIER ::= { id-pkix-ocsp 5 }
  id-pkix-ocsp-archive-cutoff  OBJECT IDENTIFIER ::= { id-pkix-ocsp 6 }
  id-pkix-ocsp-service-locator OBJECT IDENTIFIER ::= { id-pkix-ocsp 7 }

  END







Denis Pinkas              Expires March 24, 2013               [Page 43]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012


B.3.  Preferred Signature Algorithms ASN.1

B.3.1.  ASN.1 module using the 2002 syntax

OCSP-AGILITY-2009 { iso(1) identified-organization(3) dod(6)
     internet(1) security(5) mechanisms(5) pkix(7) id-mod(0)
     id-mod-ocsp-agility-2009-93(66) }

DEFINITIONS EXPLICIT TAGS ::=

BEGIN

EXPORTS ALL;   -- export all items from this module

IMPORTS

   id-pkix-ocsp
     FROM OCSP-2009 -- From [RFC5912]
      { iso(1) identified-organization(3) dod(6) internet(1) security(5)
        mechanisms(5) pkix(7) id-mod(0) id-mod-ocsp-02(48) }

   AlgorithmIdentifier{}, SIGNATURE-ALGORITHM, PUBLIC-KEY
     FROM AlgorithmInformation-2009 -- From [RFC5912]
       { iso(1) identified-organization(3) dod(6) internet(1)
         security(5) mechanisms(5) pkix(7) id-mod(0)
         id-mod-algorithmInformation-02(58) }

   EXTENSION
     FROM PKIX-CommonTypes-2009 -- From [RFC5912]
      { iso(1) identified-organization(3) dod(6) internet(1) security(5)
        mechanisms(5) pkix(7) id-mod(0) id-mod-pkixCommon-02(57)} ;

--  Add re-preferred-signature-algorithms to the set of extensions
--  for TBSRequest.requestExtensions

preferred-signature-algorithms EXTENSION ::= {
   SYNTAX PreferredSignatureAlgorithms
   IDENTIFIED BY id-pkix-ocsp-pref-sig-algs  }

id-pkix-ocsp-pref-sig-algs OBJECT IDENTIFIER ::= { id-pkix-ocsp 8 }

PreferredSignatureAlgorithms ::= SEQUENCE OF PreferredSignatureAlgorithm

PreferredSignatureAlgorithm ::= SEQUENCE {
   sigIdentifier  AlgorithmIdentifier{SIGNATURE-ALGORITHM, {...}},
   certIdentifier AlgorithmIdentifier{PUBLIC-KEY, {...}} OPTIONAL
}

END




Denis Pinkas              Expires March 24, 2013               [Page 44]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012


B.3.2.  ASN.1 module using the 1988 syntax

OCSP-AGILITY-88 { iso(1) identified-organization(3) dod(6) internet(1)
     security(5) mechanisms(5) pkix(7) id-mod(0)
     id-mod-ocsp-agility-2009-88(67) }

DEFINITIONS EXPLICIT TAGS ::=

BEGIN

-- EXPORTS ALL;

IMPORTS

   id-pkix-ocsp
   FROM OCSP  {iso(1) identified-organization(3) dod(6) internet(1)
     security(5) mechanisms(5) pkix(7) id-mod(0) id-mod-ocsp(14)}

   AlgorithmIdentifier
   FROM PKIX1Explicit88 { iso(1) identified-organization(3) dod(6)
     internet(1) security(5) mechanisms(5) pkix(7) id-mod(0)
     id-pkix1-explicit(18) };

id-pkix-ocsp-pref-sig-algs OBJECT IDENTIFIER ::= { id-pkix-ocsp 8 }

PreferredSignatureAlgorithms ::= SEQUENCE OF PreferredSignatureAlgorithm

PreferredSignatureAlgorithm ::= SEQUENCE {
   sigIdentifier   AlgorithmIdentifier,
   certIdentifier  AlgorithmIdentifier OPTIONAL }

END





















Denis Pinkas              Expires March 24, 2013               [Page 45]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

Appendix C. MIME registrations

   C.1 application/ocsp-request

   To: ietf-types@iana.org Subject: Registration of MIME media type
   application/ocsp-request

   MIME media type name: application

   MIME subtype name: ocsp-request

   Required parameters: None

   Optional parameters: None

   Encoding considerations: binary

   Security considerations: Carries a request for information. This
   request may optionally be cryptographically signed.

   Interoperability considerations: None

   Published specification: IETF PKIX Working Group Draft on Online
   Certificate Status Protocol - OCSP

   Applications which use this media type: OCSP clients

   Additional information:

      Magic number(s): None
      File extension(s): .ORQ
      Macintosh File Type Code(s): none

   Person & email address to contact for further information:
   Ambarish Malpani <ambarish@valicert.com>

   Intended usage: COMMON

   Author/Change controller:
   Ambarish Malpani <ambarish@valicert.com>

C.2. application/ocsp-response

   To: ietf-types@iana.org
   Subject: Registration of MIME media type application/ocsp-response

   MIME media type name: application

   MIME subtype name: ocsp-response

   Required parameters: None



Denis Pinkas              Expires March 24, 2013               [Page 46]


INTERNET DRAFT                 PKIX OCSP              September 25, 2012

   Optional parameters: None
   Encoding considerations: binary

   Security considerations: Carries a cryptographically signed response

   Interoperability considerations: None

   Published specification: IETF PKIX Working Group Draft on Online
   Certificate Status Protocol - OCSP

   Applications which use this media type: OCSP servers

   Additional information:

   Magic number(s): None
   File extension(s): .ORS
   Macintosh File Type Code(s): none

   Person & email address to contact for further information:
   Ambarish Malpani <ambarish@valicert.com>

   Intended usage: COMMON

   Author/Change controller:
   Ambarish Malpani <ambarish@valicert.com>


Authors' Address

   Denis Pinkas
   Bull SAS
   BP 78
   78340 Les Clayes sous bois
   France
   EMail: denis.pinkas@bull.net



















Denis Pinkas              Expires March 24, 2013               [Page 47]