Infrastructure Internet à Clé Publique
Protocole de vérification de statut de certificat en ligne


Online Certificate status Protocol - OCSP

Réza Meralli, rmeralli@free.fr

Cartel Sécurité, http://www.cartel-securite.fr


Note du Traducteur

Dernière mise à jour: 13/06/2002

Ce document est une libre traduction de la rfc2560.html issu des groupes de travaux de l'IETF
La numérotation des paragraphes respecte celle adoptée par le document d'origine. On pourra ainsi aisément se reporter à ce document, en particulier pour la traduction des termes MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, MAY, et OPTIONAL qui font l'objet d'une normalisation RFC 2119.

1. Résumé

Ce document spécifie un protocole servant à déterminer l'état de révocation actuel d'un certificat numérique sans avoir recourt aux CRL (Listes de certificats révoqués). Les mécanismes opérationnels nécessaires concernant PKIX sont spécifiés dans des documents séparés.

La section 2 fournie un aperçu du protocole. Les exigences fonctionnelles sont précisées en section 3. le protocole est détaillé en section 4. La section 5 traite des aspects sécurité du protocole. L'annexe A définie OCSP over HTTP, l'annexe B présente des éléments de syntaxe ASN1. L'annexe C précise les types mime pour les messages.

2. Aperçu du protocole

A la place ou en complément d'une vérification périodique dans une CRL, il peut s'avérer nécessaire d'obtenir ponctuellement le statut de révocation d'un certificat (cf. [RFC2459], Section 3.3), par exemple pour des transferts de fonds importants ou de volumineux échanges de marchés.

l'OCSP permet aux applications de déterminer l'état (de révocation) d'un certificat donné. OCSP peut être utilisé pour satisfaire à des exigences opérationnelles de fourniture d'information de révocation plus ponctuelles qu'il n'est possible de le faire avec les CRL. Il peut également être utilisé pour obtenir des informations complémentaires. Un client OCSP émet une requête d'état de certificat à un serveur OCSP et suspend l'acceptation du certificat en attendant une réponse du serveur.

Ce protocole décrit les données qui nécessitent d'être échangées entre une application qui vérifie l'état d'un certificat et le serveur fournissant l'information.

2.1. Requête

Une requête OCSP contient les données suivantes: Lors de la réception d'une requête OCSP, un répondeur détermine si
  1. Le message est correctement formulé;
  2. le répondeur est en mesure de fournir le service;
  3. la requête contient les informations nécessaires au répondeur.
Si au moins l'une des conditions précédentes n'est pas remplie, le serveur OCSP produit un message d'erreur sinon il fournit une réponse complète.

2.2. Réponse

Les réponses OCSP peuvent être de différents types. Une réponse OCSP se compose d'un type de réponse et des données de ladite réponse. Il y a un type de réponse basique qui doit être supporté par tous les clients et serveurs OCSP.

Toutes les réponses complètes devraient être numériquement signées. La clé utilisée pour la signature doit appartenir à l'une des entités parmi:

Une réponse complète est composée de: La réponse pour chacun des certificats de la requête consiste en: Ce document spécifie les valeurs des statuts des certificats:

La valeur "good" signifie une réponse positive quant au statut recherché. Cette réponse signifie au minimum que le certificat n'est pas révoqué, mais ne signifie pas nécessairement que le certificat a été émis ni que la date à laquelle la réponse à été produite est incluse dans la période de validité du certificat. Les extensions des réponses peuvent servir à fournir des informations complémentaires correspondant à des assertions faites par le répondeur concernant l'état du certificat telles que relatives à la publication, validité, etc.

Le statut "revoked" indique que le certificat a été révoqué (soit de façon permanente soit temporaire (suspendu)).

Le statut "unknown" indique que le répondeur ne dispose pas d'information concernant le certificat faisant l'objet de la requête.

2.3. Cas d'erreurs

Dans le cas d'erreur, le répondeur OCSP peut retourner un message d'erreur. Ces messages ne sont pas signés. Les erreurs sont parmi les types suivants:

Un message produit une réponse "malformedRequest" si la requête reçue n'est pas conforme à la syntaxe OCSP.

La réponse "malformedRequest" est produite lorsque le serveur ne peut fournir de réponse du fait d'une erreur interne. La requête devrait alors être re-émise vers un autre serveur OCSP.

Dans le cas ou le serveur OCSP est opérationnel mais dans l'incapacité à fournir une réponse pour le certificat questionné, la réponse "tryLater" peut être utilisée pour indiquer que le service existe mais qu'il n'est pas en mesure de répondre temporairement.

La réponse "sigRequired" est retournée lorsque le serveur requiert que le client signe la requête afin de produire la réponse.

La réponse "unauthorized" est émise lorsque le client n'est pas autorisé à formuler cette requête sur ce serveur.

2.4. Sémantique des champs: thisUpdate, nextUpdate, et produceAt

Les réponses peuvent indiquer trois dates: thisUpdate, nextUpdate and producedAt. La sémantique de ces champs est:

Si le champ nextUpdate n'est pas précisé, le serveur indique alors que de nouvelles informations peuvent être disponibles n'importe quand.

2.5. Réponses Pré-produites

Les répondeurs OCSP peuvent pré-produire des réponses signées spécifiant le statut des certificats à un instant donné. La date à laquelle le statut du certificat est connu comme fiable devrait correspondre au champ "thisUpdate" de la réponse. La date à ou avant laquelle sera disponible une nouvelle information correspond au champ nextUpdate, le champ correspondant à la date de production de la réponse correspond au champ "producedAt".

2.6. Délégation d'autorité de signature

La clé servant à la signature des réponses OCSP ne correspond pas nécessairement à la clé ayant signé le certificat. Un émetteur de certificat peut explicitement déléguer la signature des réponses OCSP en produisant un certificat contenant qu'une seule valeur pour le "extendedKeyUsage" du certificat signataire OCSP. Ce certificat doit être directement émis par cette CA.

2.7. Compromission de clé de CA

Si un serveur OCSP à connaissance de la compromission de la clé privée d'une CA, il peut retourner le statut "revoked" pour tous les certificats émis par cette CA.

3. Exigences fonctionnelles

3.1. Contenu du certificat

Afin de fournir aux clients OCSP un point d'information reconnu, la CA devrait être capable d'inclure l'extension AuthorityInfoAccess (définie dans [RFC2459], section 4.2.2.1) dans les certificats pouvant être vérifiés par OCSP. Accessoirement "accesLocation" désignant le serveur OCSP peut être configuré localement chez les clients OCSP.

Les CA qui supportent le service OCSP, hébergé localement ou fourni par un "Authorized Responder", doivent fournir les valeurs "uniformResourceIndicator" (URI), "accessLocation" et la valeur de l'OID "id-ad-ocsp" pour "accessMethod" dans la séquence "AccessDescription".

La valeur du champ accessLocation dans le certificat concerné définie le mode de transport utilisé pour accéder au serveur OCSP (ex: HTTP) et peut contenir des informations afférentes au transport (ex: URL)

3.2. Acceptation des réponses signées

Avant de considérer une réponse signée comme valide, les clients OCSP sont tenus de vérifier que:

  1. Le certificat identifié dans la réponse correspond à celui identifié dans la requête;
  2. la signature du message est valide;
  3. l'identité du signataire de la réponse correspond à celle du destinataire attendu de la requête;
  4. le signataire est autorisé à signer la requête;
  5. la date pour laquelle le statut du certificat est considéré comme connu est suffisamment récente;
  6. lorsque disponible, la date à ou avant laquelle une nouvelle information sera disponible pour le statut du certificat (nextUpdate) est ultérieure à la date courante.

4. Protocole détaillé

La syntaxe ASN.1 emploie des termes définis dans [RFC2459]. Pour la production de signatures, les données à signer sont encodées en ASN.1 Distinguished Encoding Rules (DER) [X.690].

ASN.1 est employé par défaut à moins d'une spécification différente

Les termes employés, provenant ou définis dans d'autres documents sont: "Extensions", "CertificateSerialNumber", "SubjectPublicKeyInfo", "Name", "AlgorithmIdentifier", "CRLReason"

4.1 Requêtes

Cette section définit les spécifications ASN.1 pour une requête de confirmation. La mise en forme du message peut varier en fonction du mécanisme de transport utilisé (HTTP, SMTP, LDAP, etc.).

4.1.1. Syntaxe des requêtes

      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 }

      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 }
    

issuerNameHash est le hash du "distinguished name" de l'émetteur du certificat. Le hash devrait être calculé à partir de l'encodage DER du champ nom de l'émetteur du certificat vérifié. issuerKeyHash est le hash de la clé publique du issuer. Ce hash devrait être calculé à partir de la valeur du champ de la clé publique (tag et longueur exclue) du certificat de l'issuer. L'algorithme de hachage utilisé est précisé dans hashAlgorithm. serialNumber et le numéro de série du certificat faisant l'objet de la requête.

4.1.2. Notes concernant la syntaxe des requêtes

La principale raison d'utiliser le hash de la clé publique d'une CA en complément à son nom pour identifier l'émetteur du certificat est qu'il est possible que deux CA choisissent d'utiliser le même nom (l'unicité du nom est une recommandation mais ne peut être exigée). Deux CA ne peuvent disposer de la même clé publique à moins que les CA aient explicitement décidé de partager la même clé privée ou que la clé de l'un d'entre elle ait été compromise.

Le support des extensions spécifiques est optionnelle. le drapeau obligatoire ne devrait être utilisé pour aucun d'entre eux. la section 4.4 suggère quelques extensions utiles. Des extensions complémentaires peuvent être définies dans d'autres RFC. Les extensions non reconnues DOIVENT être ignorées (à moins que le drapeau obligatoire soit mis et que les extensions ne soient pas comprises).

L'émetteur d'une requête peut choisir de signer la requête OCSP. Dans ce cas la signature est calculée à partir de la structure "tbsRequest". Si la requête est signée l'émetteur de la requête devrait spécifier son nom dans le champ requestorName. Dans le cas d'une requête signée, il se peut que l'émetteur de la requête inclue des certificats dans le champ certs de "Signature" afin d'aider le serveur OCSP à vérifier la signature

4.2. Syntaxe des réponses

Cette section décrit les spécifications ASN.1 pour une réponse de confirmation. La forme du message peut varier en fonction des mécanismes de transport utilisés (HTTP, SMTP, LDAP, etc.).

4.2.1. Spécifications ASN.1 des réponses OCSP

Une réponse OCSP est au moins constituée d'un champ "responseStatus" indiquant le stade de traitement de la requête. Si la valeur du champ "responseStatus" correspond à une des conditions d'erreur, les valeurs "responseBytes" ne sont pas précisées.

    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
    }
    

La valeur pour les "responseBytes" correspondent à un "OBJECT IDENTIFIER" et à une syntaxe de réponse correspondant à cet OID encodée en OCTET STRING.

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

Pour un serveur émettant des réponses basiques, le champ "responseType" sera "id-pkix-ocsp-basic".

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

Les émetteurs des réponses OCSP devraient être capables de produire des réponses du type "id-pkix-ocsp-basic". De façon analogue les clients OCSP devraient être capables de recevoir et de traiter des réponses du type "id-pkix-ocsp-basic".

La valeur "response" devrait être l'encodage DER de "BasicOCSPResponse"

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

La valeur pour "signature" devrait être calculée à partir du hash de l'encodage DER de "ResponseData"

    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 }

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

    UnknownInfo ::= NULL -- this can be replaced with an enumeration
    

4.2.2. Notes concernant les réponses OCSP

4.2.2.1. temps

Les champs "thisUpdate" et "nextUpdate" définissent un intervalle recommandé de temps. Cet intervalle correspond à l'intervalle "{thisUpdate, nextUpdate}" dans les CRL. Les réponses dont la valeur de "nextUpdate" est antérieure à la valeur locale de la date doivent être considérées comme inutilisables. Les réponses dans la valeur du champ "thisUpdate" est postérieure à la valeur de la date locale doivent être considérées comme inutilisables. Les réponses dont le champ "nextUpdate" n'est pas valorisé sont équivalentes à des CRL dont le champ "nextUdpdate" n'est pas valorisé (cf. section 2.4).

Le champ "produceAt" indique la date à laquelle cette réponse a été signée.

4.2.2.2. Authorized Responders

La clé signant les informations du statut d'un certificat ne doit pas être nécessairement la même clé que celle ayant signé le certificat à vérifier. Il reste néanmoins nécessaire de s'assurer que l'entité signant la réponse est autorisée à le faire. Ainsi, l'émetteur du certificat DOIT soit signer la réponse OCSP, soit explicitement désigner une entité ayant cette autorité. La délégation de l'autorité de signature DEVRAIT être spécifiée par l'inclusion de "id-kp-OCSPSigning" dans une extension extendedKeyUsage du certificat du serveur OCSP. Ce certificat doit être issu directement de la CA ayant émis le certificat concerné.

    id-kp-OCSPSigning OBJECT IDENTIFIER ::= {id-kp 9}
    

Les systèmes ou applications qui s'appuient sur les réponses OCSP DOIVENT être capables de comprendre et traiter la valeur "id-ad-ocspSigning". Ils peuvent fournir un moyen de préciser localement la configuration des autorités signataire OCSP et spécifier une liste de CA pour laquelle chaque autorité signataire de réponses OCSP est reconnue de confiance. Ils DOIVENT rejeter la réponse si le certificat requis pour valider la signature ne répond pas à au moins l'un des critères suivants:

  1. Correspond à la configuration locale d'une des autorités signataire OCSP locale;
  2. le certificat de CA qui a émis le certificat en question;
  3. comporte une valeur "id-ad-ocspSigning" dans une extension "ExtendedKeyUsage" et a été émis par la CA qui a émis le certificat à vérifier.
Des critères supplémentaires de validité ou de rejet peuvent s'appliquer aussi bien à la réponse qu'au certificat utilisé pour valider la réponse.

4.2.2.2.1. Vérification de la révocation d'un Authorized Responder

Puisque qu'un serveur OCSP mandaté fourni de l'information pour une ou plusieurs CA, les clients OCSP ont besoin de savoir comment vérifier que le certificat d'un répondeur mandaté n'a pas été révoqué. Les CA peuvent choisir de traiter cette problématique d'une des trois façons suivantes:

4.3. Algorithmes cryptographiques optionnels et requis.

Les clients faisant appel aux services OCSP DEVRAIENT être capables de traiter les réponses signées par des clés DSA identifiées par l'identifiant sig-alg-oid décrit dans la section 7.2.2 of [RFC2459]. Les clients DEVRAIENT également être capables de traiter les signatures RSA telles que décrites dans la section 7.2.1 of [RFC2459]. Les répondeurs OCSP DEVRAIENT supporter l'algorithme de hachage SHA1.

4.4. Extensions.

Cette section décrit quelques extensions standards basées sur le modèle employé dans les certificats X509 v3 (cf.[RFC2459]). Le support des extensions est optionnel aussi bien pour les clients que les serveurs OCSP. Pour chacune des extensions la définition précise la syntaxe, le traitement effectué par le serveur OCSP ainsi que toutes les extensions incluses dans la réponse correspondante.

4.4.1. Nonce.

Le nonce lie de façon cryptographique une requête à une réponse afin de se prémunir des attaques de type re-jeu. Le nonce est inclus en tant que des "requestExtensions" dans les requêtes, et des "responseExtensions" dans les réponses. Aussi bien dans la réponse que dans la requête, le nonce est identifié par l'identifiant d'objet "id-pkix-ocsp-nonce"; le nonce ayant pour valeur "extnValue".

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

4.4.2. CRL de référence.

Il peut être souhaitable pour un répondeur OCSP d'indiquer la CRL dans laquelle le certificat révoqué ou suspendu à été trouvé. Cela peut être utile lorsque l'OCSP "is used between repositories", et également comme un mécanisme d'audit. La CRL peut être désignée par une URL (l'URL ou la CRL est disponible), un numéro (numéro de CRL), une date (la date de création de la CRL concernée). Ces extensions seront indiquées dans "singleExtensions". L'identifiant pour cette extension est "id-pkix-ocsp-crl" et la valeur sera "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 }
    

Concernant le choix de crlUrl, IA5String désigne l'URL où la CRL est disponible. pour CrlNum, l'INTEGER désigne la valeur de l'extension CRL number de la CRL concernée. Pour crlTime, CeneralizedTime indiquera la date de production de la CRL.

4.4.3. Type de réponses acceptables.

Un client OCSP peut souhaiter spécifier le type de réponse qu'il comprend. A cette fin il DEVRAIT utiliser une extension avec l'OID "id-pkix-ocsp-response" avec la valeur "AcceptableResponse". Cette extension fait partie des "resquestExtensions" dans les requêtes. Les OID inclus dans "AcceptableResponse" sont les OID des différents types de réponse que le client accepte (ex: id-pkix-ocsp 4).

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

    AcceptableResponses ::= SEQUENCE OF OBJECT IDENTIFIER    

Conformément à ce qui a été indiqué dans la section section 4.2.1., les répondeurs OCSP doivent être capables de fournir des réponses du type "id-pkix-ocsp-basic". De façon analogue les clients OCSP DEVRAIENT pouvoir comprendre et traiter les réponses du type "id-pkix-ocsp-basic".

4.4.4. Archive Cutof: remontée d'archive.

Un répondeur OCSP peut décider de fournir des informations relatives à la révocation d'un certificat antérieurement à la date d'expiration du de ce dernier. La durée obtenue par la différence entre cette date et la valeur de "produceAt" dans une réponse, définit la durée de remontée des archives pour le certificat.

Une application disposant de l'OCSP pourrait utiliser la remontée dans les archives pour contribuer à fournir la preuve qu'une signature numérique était (ou n'était pas) de confiance à la date à laquelle elle a été produite, même si le certificat nécessaire à la validation de la signature a expiré depuis longtemps.

Les serveurs OCSP fournissant ce genre de services DEVRAIENT inclure une extension pour la remonté d'archive dans les réponses. Si incluse, cette valeur DEVRAIT être fournie comme une singleExtensions identifiée par l'OID "id-pkix-ocsp-archive-cutoff".

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

    ArchiveCutoff ::= GeneralizedTime
    

A titre d'exemple, si un serveur opère avec un intervalle de remonté des archives de 7 ans, et que le statut du certificat ait été produit à t1, alors la durée de remonté dans les archives serait de (7-t1).

4.4.5. Extensions des CRL.

Toutes les extensions spécifiées en tant qu'"Entry Extensions" de la section 5.3 de la [RFC2459] sont également supportées en tant que "singleExtensions".

4.4.6. Localisateur de service.

Un serveur OCSP peut être mis en place de façon à ce que lorsqu'il reçoit une requête, celle-ci soit alors transmise à un serveur disposant de l'autorité pour statuer sur le certificat concerné. L'extension "serviceLocator" de la requête est définie à cette fin. Cette extension est incluse dans des "singleRequestExtensions" de la requête.

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

    ServiceLocator ::= SEQUENCE {
        issuer    Name,
        locator   AuthorityInfoAccessSyntax OPTIONAL }
    
Les valeurs de ces champs sont obtenues dans les champs du certificat à vérifier.

5. Considérations de sécurité.

Afin d'être efficace, les systèmes utilisant des certificats doivent se connecter au fournisseur du service d'information du statut. Dans l'éventualité où cette connexion ne pourrait être établie, ces systèmes pourraient implémenter un traitement des CRL comme service de secours.

Une vulnérabilité au déni de service est évidente en cas d'afflux massif de requêtes. La génération d'une signature cryptographique affecte de plus le cycle de temps d'une réponse, accentuant la vulnérabilité. Les erreurs non signées exposent le protocole à une autre attaque par DoS dans laquelle l'attaquant enverrait des messages d'erreurs falsifiés.

L'utilisation de réponses pré-générées ouvre la voie aux attaques de type re-jeu dans lesquelles, une ancienne réponse ("good") est réutilisée avant son expiration mais après que le certificat ait été révoqué. Le déploiement d'un service OCSP devrait évaluer le bénéfice que peuvent apporter des réponses pré-générées au regard de l'exposition à une attaque de ce type qu'elle apporte mais aussi au coût engendré si une telle attaque devait aboutir.

Les requêtes n'indiquent pas à quel serveur elles sont destinées. Cela permet à un attaquant de rejouer une requête vers n'importe quel serveur OCSP

L'intégration de cache HTTP dans certains déploiements peut résulter en des résultats inattendus si certains serveurs intermédiaires sont mal configurés ou connus pour avoir des problèmes de gestion de cache. Il est conseillé aux personnes assurant le déploiement d'OCSP over HTTP de tenir compte des mécanismes de cache HTTP.

6. Références.

    [RFC2459] Housley, R., Ford, W., Polk, W. and D. Solo, "Internet
                X.509 Public Key Infrastructure Certificate and CRL
                Profile", RFC 2459, January 1999.

    [HTTP]    Fielding, R., Gettys, J., Mogul, J., Frystyk, H. and T.
                Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC
                2068, January 1997.

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

    [URL]     Berners-Lee, T., Masinter, L. and M. McCahill, "Uniform
                Resource Locators (URL)", RFC 1738, December 1994.

    [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. Adresses des auteurs.

    Michael Myers
    VeriSign, Inc.
    1350 Charleston Road
    Mountain View, CA 94043

    EMail: mmyers@verisign.com


    Rich Ankney
    CertCo, LLC
    13506 King Charles Dr.
    Chantilly, VA  20151

    EMail: rankney@erols.com


    Ambarish Malpani
    ValiCert, Inc.
    1215 Terra Bella Ave.
    Mountain View, CA 94043

    Phone: 650.567.5457
    EMail: ambarish@valicert.com


    Slava Galperin
    My CFO, Inc.
    1945 Charleston Road
    Mountain View, CA

    EMail: galperin@mycfo.com


    Carlisle Adams
    Entrust Technologies
    750 Heron Road, Suite E08
    Ottawa, Ontario
    K1V 1A7
    Canada

    EMail: cadams@entrust.com
    

Annexe A.

A.1. OCSP over HTTP.

Cette section décrit le formatage appliqué aux requêtes et réponses pour supporter HTTP.

A.1.1. Requête.

Les requêtes OCSP basées sur le protocole OCSP peuvent soit utiliser la méthode GET ou POST pour soumettre leurs requêtes. Afin de permettre le cache HTTP, les petites requêtes (moins de 255 octets après encodage) DEVRAIENT être soumises avec la méthode GET. Si le cache HTTP n'est pas important ou que les requêtes sont plus grandes que 255 octets, la requête devrait alors être soumise à l'aide de la méthode POST. Lorsque la confidentialité est requise, les requêtes OCSP transitant par HTTP PEUVENT être protégées en utilisant TLS/SSL ou d'autres protocoles de plus bas niveaux.

Une requête OCSP utilisant la méthode GET est construite de la façon suivante:

    GET {url}/{url-encoding of base-64 encoding of the DER encoding of
    the OCSPRequest}
    
{url} peut provenir de la valeur de "AthorityInfoAcces" ou d'une autre configuration locale

Une requête OCSP utilisant la méthode POST est construite de la façon suivante: le "Content-Type" de l'entête possède la valeur "application/ocsp-request", le corps du message est la valeur binaire de l'encodage "DER de OCSPRequest"

A.1.2. Réponse.

Une réponse OCSP basée sur HTTP est composée des entêtes adéquates, suivies de la valeur binaire de l'encodage DER "OCSPResponse". le "Content-Type" de l'entête à la valeur "application/ocsp-response". Le "Content-Length" de l'en-tête DEVRAIT indiquer la longueur de la réponse. D'autres entêtes HTTP PEUVENT être présentes et PEUVENT être ignorées si elles ne sont comprises par le requêteur.

OCSP en ASN.1


    OCSP DEFINITIONS EXPLICIT TAGS::=

    BEGIN

    IMPORTS

      -- Directory Authentication Framework (X.509)
             Certificate, AlgorithmIdentifier, CRLReason
             FROM AuthenticationFramework { joint-iso-itu-t ds(5)
                      module(1) authenticationFramework(7) 3 }


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


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

    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 }

    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 }

    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 }

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

    UnknownInfo ::= NULL -- this can be replaced with an enumeration

    ArchiveCutoff ::= GeneralizedTime

    AcceptableResponses ::= SEQUENCE OF OBJECT IDENTIFIER

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

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

Annexes C: OCSP, types mime

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 

    Intended usage: COMMON

    Author/Change controller:
    Ambarish Malpani 
    

    

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

    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 

    Intended usage: COMMON

    Author/Change controller:
    
DSA