One document matched: draft-ietf-pkix-scvp-16.txt

Differences from draft-ietf-pkix-scvp-15.txt


Internet Draft                                              T. Freeman 
draft-ietf-pkix-scvp-16.txt                             Microsoft Corp 
October 2004                                                R. Housley 
Expires in six months                                   Vigil Security 
                                                            A. Malpani 
                                           Malpani Consulting Services 
 
           Simple Certificate Validation Protocol (SCVP) 
   
   
Status of this Memo 
 
  By submitting this Internet-Draft, I certify that any applicable 
  patent or other IPR claims of which I am aware have been disclosed, 
  or will be disclosed, and any of which I become aware will be 
  disclosed, in accordance with RFC 3668. 
   
  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 a "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  
   
  IPR Statement  
   
  By submitting this Internet-Draft, I certify that any applicable 
  patent or other IPR claims of which I am aware have been disclosed, 
  or will be disclosed, and any of which I become aware will be 
  disclosed, in accordance with RFC 3668. 
   
Copyright Notice 
   
  Copyright (C) The Internet Society (2003). All Rights Reserved. 
   
Abstract 
   
  SCVP allows a client to offload certificate handling to a server.  
  The server can provide the client with a variety of valuable 
  information about the certificate, such as whether the certificate 
  is valid, a certification path to a trust anchor, and revocation 
  status.  SCVP has many purposes, including simplifying client 
  implementations and allowing companies to centralize trust and 
  policy management. 
   
INTERNET DRAFT                   SCVP                      October 2004 
 
Table of Contents 
 
1 Introduction....................................................5 
 1.1 SCVP overview and requirements...............................5 
 1.2 Terminology..................................................6 
 1.3 Validation Policies..........................................6 
 1.4 Validation Algorithm.........................................7 
2 Protocol Overview...............................................8 
3 Validation Request..............................................9 
 3.1 cvRequestVersion............................................11 
   3.1.1 queriedCerts............................................12 
   3.1.2 checks..................................................13 
   3.1.3 wantBack................................................14 
   3.1.4 validationPolicy........................................15 
     3.1.4.1 validationPolRef....................................16 
   3.1.5 validationAlg...........................................17 
     3.1.5.1 Default Validation Algorithm........................17 
     3.1.5.2 validationAlg.......................................18 
     3.1.5.2.1 Basic Validation Algorithm........................18 
      3.1.5.2.2 Basic Validation Algorithm Errors................19 
      3.1.5.2.3 Name Validation Algorithm........................20 
      3.1.5.2.4 Name Validation Algorithm Errors.................21 
     3.1.5.3 userPolicySet.......................................22 
     3.1.5.4 inhibitPolicyMapping................................22 
     3.1.5.5 requireExplicitPolicy...............................22 
     3.1.5.6 inhibitAnyPolicy....................................23 
     3.1.5.7 isCA................................................23 
     3.1.5.8 trustAnchors........................................23 
     3.1.5.9 keyUsages...........................................24 
     3.1.5.10 extendedKeyUsages..................................25 
   3.1.6 responseFlags...........................................25 
     3.1.6.1 responseRefHash.....................................25 
     3.1.6.2 responseValidationPolByRef..........................26 
     3.1.6.3 signResponse........................................26 
   3.1.7 serverContextInfo.......................................26 
   3.1.8 valididationTime........................................27 
   3.1.9 intermediateCerts.......................................28 
   3.1.10 revInfos...............................................28 
   3.1.11 producedAt.............................................29 
   3.1.12 queryExtensions........................................29 
     3.1.12.1 extnID.............................................29 
     3.1.12.2 critical...........................................29 
     3.1.12.3 extnValue..........................................30 
 3.2 requestorRef................................................30 
 3.3 requestNonce................................................30 
 3.4 requestExtensions...........................................31 
   3.4.1 extnID..................................................31 
   3.4.2 critical................................................31 
   3.4.3 extnValue...............................................31 
 3.5 dhPublicKey.................................................32 
 3.6 SCVP Request Authentication.................................32 
4 Validation Response............................................32 
 
Freeman, Housley, & Malpani                                    [Page 2] 
INTERNET DRAFT                   SCVP                      October 2004 
 
 4.1 cvResponseVersion...........................................36 
 4.2 policyID....................................................36 
 4.3 producedAt..................................................36 
 4.4 responseStatus..............................................36 
 4.5 respValidationPolicy........................................38 
   4.5.1 validationPolRef........................................39 
   4.5.2 validationPolValues.....................................39 
     4.5.2.1 validationAlg.......................................40 
     4.5.2.2 inhibitPolMap.......................................40 
     4.5.2.3 requireExplicitPol..................................40 
     4.5.2.4 inhibitAnyPol.......................................40 
     4.5.2.5 isCA................................................40 
     4.5.2.6 trustAnchors........................................40 
     4.5.2.7 keyUsage............................................40 
     4.5.2.8 extendedKeyUsage....................................40 
     4.5.2.9 validationPolicyAttr................................40 
   4.5.3 userFinalPolicySet......................................40 
   4.5.4 permittedSubtrees.......................................40 
   4.5.5 excludedSubtrees........................................41 
   4.5.6 validationPolicyAtt.....................................41 
 4.6 requestRef..................................................41 
   4.6.1 requestHash.............................................42 
   4.6.2 fullRequest.............................................42 
 4.7 requestorRef................................................42 
 4.8 requestorName...............................................42 
 4.9 responder...................................................43 
 4.10 replyObjects...............................................43 
   4.10.1 cert...................................................44 
   4.10.2 replyStatus............................................44 
   4.10.3 replyValTime...........................................45 
   4.10.4 replyChecks............................................45 
   4.10.5 replyWantBack..........................................47 
   4.10.6 validationAlg..........................................48 
   4.10.7 validationErrors.......................................48 
   4.10.8 nextUpdate.............................................48 
   4.10.9 certReplyExtensions....................................48 
 4.11 responseNonce..............................................49 
 4.12 serverContextInfo..........................................49 
 4.13 respExtensions.............................................50 
 4.14 SCVP Response Validation...................................50 
   4.14.1 Simple Key Validation..................................50 
   4.14.2 SCVP Server Certificate Validation.....................51 
5 Server Policy Request..........................................51 
 5.1 vpRequestVersion............................................51 
 5.2 requestNonce................................................51 
6 Validation Policy Response.....................................52 
 6.1 vpResponseVersion...........................................53 
 6.2 maxCVRequestVersion.........................................53 
 6.3 maxVPRequestVersion.........................................53 
 6.4 defaultPolicyID.............................................53 
 6.5 thisUpdate..................................................53 
Freeman, Housley, & Malpani                                    [Page 3] 
INTERNET DRAFT                   SCVP                      October 2004 
 
 6.6 nextUpdate..................................................53 
 6.7 trustAnchors................................................54 
 6.8 validationPolicies..........................................54 
 6.9 validationAlgs..............................................54 
 6.10 authPolicies...............................................54 
 6.11 responseTypes..............................................55 
 6.12 dhPublicKeyInfo............................................55 
 6.13 clockSkew..................................................55 
 6.14 defaultValPolicy...........................................55 
7 SCVP Server Relay..............................................56 
8 SCVP ASN.1 Module..............................................56 
9 Security Considerations........................................64 
10 References....................................................65 
 10.1 Normative References.......................................65 
 10.2 Informative References.....................................67 
11 Acknowledgments...............................................67 
Appendix A -- MIME Registrations.................................67 
 A.1 application/cv-request......................................67 
 A.2 application/cv-response.....................................68 
 A.3 application/vp-request......................................69 
 A.4 application/vp-response.....................................70 
Appendix B -- SCVP over HTTP.....................................70 
 B.1 SCVP Request................................................70 
 B.2 SCVP Response...............................................71 
 B.3 SCVP Policy Request.........................................71 
 B.4 SCVP Policy Response........................................72 
Appendix C -- Author Contact Information.........................72 
Full Copyright Statement.........................................73 
   
Freeman, Housley, & Malpani                                    [Page 4] 
INTERNET DRAFT                   SCVP                      October 2004 
 
   
1 Introduction 
   
  Certificate validation is complex.  If certificate handling is to 
  be widely deployed in a variety of applications and environments, 
  the amount of processing an application needs to perform before it 
  can accept a certificate needs to be reduced.  There are a variety 
  of applications that can make use of public key certificates, but 
  these applications are burdened with the overhead of constructing 
  and validating the certification paths.  SCVP reduces this overhead 
  for two classes of certificate-using applications. 
   
  The first class of application wants just two things.  First, they 
  want confirmation that the public key belongs to the identity named 
  in the certificate.  Second, they want to know if the public key 
  can be used for the intended purpose.  The client completely 
  delegates certification path construction and validation to the 
  SCVP server.  This class of application is often referred to as 
  delegated path validation (DPV). 
   
  The second class of application can perform certification path 
  validation, but these applications have no reliable method of 
  constructing a certification path to a trust anchor.  The client 
  only delegates certification path construction to the SCVP server.  
  This class of application is often referred to as delegated path 
  discovery (DPD). 
   
1.1 SCVP overview and requirements 
   
  The SCVP meets the mandatory requirements documented in [RQMTS]. 
   
  The primary goals of SCVP are to make it easier to deploy PKI-
  enabled applications and to allow central administration of PKI 
  policies within an organization.  SCVP can be used by clients that 
  do much of the certificate processing themselves but simply want an 
  untrusted server to collect information for them.  However, when 
  the client has complete trust in the SCVP server, SCVP can be used 
  to delegate the work of certification path construction and 
  validation, and SCVP can be used to ensure that policies are 
  consistently enforced throughout an organization. 
   
  Untrusted SCVP servers can provide clients the certification paths.  
  They can also provide clients revocation information, such as CRLs 
  and OCSP responses, and the client needs to validate the 
  certification path constructed by the SCVP server.  These services 
  can be valuable to clients that do not include the protocols needed 
  to find and download intermediate certificates, CRLs, and OCSP 
  responses. 
   
  Trusted SCVP servers can perform certification path construction 
  and validation for the client.  For a client that uses these 
Freeman, Housley, & Malpani                                    [Page 5] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  services, the client inherently trusts the SCVP server as much as 
  it would its own certification path validation software (if it 
  contained such software).  There are two main reasons that a client 
  may want to trust such an SCVP server: 
   
     1.  The client does not want to incur the overhead of including 
     certification path validation software and running it for each 
     certificate it receives. 
   
     2.  The client is in an organization or community that wants to 
     centralize its PKI policies.  These policies might dictate that 
     particular trust anchors are to be used and the types of policy 
     checking that is to be performed during certification path 
     validation. 
   
1.2 Terminology 
   
  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 [STDWORDS]. 
   
1.3 Validation Policies 
   
  A validation policy (as defined in RFC 3379 [RQMTS]) specifies the 
  rules and parameters to be used by the SCVP server when validating 
  a certificate.  In SCVP, a validation policy can be either mutually 
  agreed between client and server, and subsequently referenced in 
  request, or explicitly expressed in the request by passing all of 
  the necessary parameters. 
   
  Policy definitions can be quite long and complex, and some policies 
  may allow for the setting of a few parameters such as a set of 
  trust anchors.  The request can therefore be simplified if these 
  previously agreed policy dependent parameters are referenced in the 
  request by a mutually agreed OBJECT IDENTIFIER (OID) or URL value. 
  The referenced value indicates either a partial or full set of 
  parameters. The client can therefore omit these agreed parameters 
  from the request, only passing any parameters which are not 
  specified by the previously agreed policy.  Therefore in the 
  simplest form, with validation polices which define every parameter 
  necessary, a SCVP request need only contain the certificate to be 
  validated, the validation policy and any run-time parameters for 
  the request. 
   
  SCVP server also publishes its default validation policy settings.  
  The default policy can be requested for validation and the client 
  can override any default value in the request if required.  The 
  default values are also used when processing requests which 
  reference a validation policy other than the default one that does 
  not contain the full set of parameters necessary for validation and 
  the client has also omitted the missing values in the request.  
Freeman, Housley, & Malpani                                    [Page 6] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  Therefore a client can also simplify the request by omitting a 
  parameter from a request if the default value published by the 
  server is acceptable. 
   
  The inputs to the basic certification path processing algorithm 
  used by SCVP are defined by [PKIX-1] in section 6.1.1 and comprise: 
     
    Certificate to be validated (by value or by reference) 
     
    Validation time 
     
    Set of Trust Anchors (by value or by reference) 
     
    The initial policy set 
     
    Initial policy mapping setting 
     
    Initial any-Policy setting 
     
    Initial explicit policy setting 
     
  The basic certificate path processing algorithm also supports the 
  following parameters which are defined in [PKIX-1] section 4 
   
  The basic certification path processing algorithm also supports the 
  following parameters which are defined in [PKIX-1] section 4: 
   
     The usage of the key contained in the certificate (e.g., key 
     encipherment, key agreement, signature)  
      
     Other application-specific purposes for which the certified 
     public key may be used. 
      
1.4 Validation Algorithm 
   
  The validation algorithm is determined by agreement between the 
  client and the server and is represented as an OID.  The algorithm 
  defines the checking that will be performed by the server to 
  determine whether the certificate is valid, and it specifies any 
  parameters defined in the policy.  A validation algorithm is 
  therefore one of the parameters to a validation policy.  SCVP 
  defines a basic validation algorithm which implements the 
  certification path validation algorithm as defined in [PKIX-1].  
  New validation algorithms can be specified that define additional 
  parameters if needed. 
   
  Application-specific validation algorithms in addition to those 
  defined in this document can be defined to meet specific 
  requirements not covered by the basic validation algorithm.  The 
  validation algorithms documented here should serve as guide for the 
  development of further application-specific validation algorithms.  
Freeman, Housley, & Malpani                                    [Page 7] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  For example, a new application-specific validation algorithm might 
  require the presence of a particular name form in the subject 
  alternative name extension of the certificate. 
   
  For a certification path to be considered valid under a particular 
  validation policy, it MUST be a valid certification path as defined 
  in [PKIX-1] and all validation policy constraints that apply to the 
  certification path MUST be verified. 
   
  Revocation checking is one aspect of certification path validation 
  defined in [PKIX-1].  Therefore, the validation policy MUST specify 
  the source of revocation information.  Five alternatives are 
  envisioned: 
   
     1.  full CRLs (or full Authority Revocation Lists) have to be 
     collected; 
   
     2.  OCSP responses, using [OCSP], have to be collected; 
   
     3.  delta CRLs and the relevant associated full CRLs (or full 
     Authority Revocation Lists) are to be collected; 
   
     4.  any available revocation information has to be collected; 
     and 
   
     5.  no revocation information need be collected. 
   
2 Protocol Overview 
   
  The SCVP uses a simple request-response model.  That is, the SCVP 
  client creates a request and sends it to the SCVP server, and then 
  the SCVP server creates a single response and sends it to the 
  client.  The typical use of SCVP is expected to be over HTTP [HTTP], 
  but it can also be used with email or any other protocol that can 
  transport digitally signed objects.  Appendix A and Appendix B 
  provide the details necessary to use SCVP with HTTP. 
   
  SCVP includes two request-response pairs.  The primary request-
  response pair handles certificate validation.  The secondary 
  request-response pair is used to determine the list of validation 
  policies and default parameters supported by a specific SCVP server. 
   
  Section 3 defines the certificate validation request. 
   
  Section 4 defines the corresponding certificate validation response. 
   
  Section 5 defines the validation policies request. 
   
  Section 6 defines the corresponding validation policies response. 
   
Freeman, Housley, & Malpani                                    [Page 8] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  Appendix A registers MIME types for SCVP requests and responses, 
  and Appendix B describes the use of these MIME types with HTTP. 
   
3 Validation Request 
   
  A SCVP client request to the server MUST be a single CVRequest item.  
  When a CVRequest is encapsulated in a MIME body part, 
  application/cv-request MUST be used. 
   
  There are two forms of SCVP request: unsigned and signed.  A signed 
  request is used to authenticate the client to the server or to 
  provide an anonymous client integrity over the request-response 
  pair.  A server MAY require all requests to be signed, and a server 
  MAY discard all unsigned requests.  Alternatively, a server MAY 
  choose to process unsigned requests. 
   
  The unsigned request consists of a CVRequest encapsulated in a CMS 
  ContentInfo [CMS].  An overview of these structures are provided 
  below and are only intended as illustrative.  The definitive ASN.1 
  is found in [CMS].  Many details are not shown, but the way that 
  SCVP makes use of CMS is clearly illustrated. 
   
    ContentInfo { 
      contentType        id-ct-scvp-certValRequest, 
                                   -- (1.2.840.113549.1.9.16.1.10) 
      content            CVRequest } 
   
  The signed request consists of a CVRequest encapsulated in either a 
  SignedData or AuthenticatedData which is in turn encapsulated in a 
  ContentInfo.   An overview of these structures are provided below.  
  Again, many details are not shown, but the way that SCVP makes use 
  of CMS is clearly illustrated. 
   
  SignedData example: 
   
    ContentInfo { 
      contentType        id-signedData, -- (1.2.840.113549.1.7.2) 
      content            SignedData } 
   
    SignedData { 
      version            CMSVersion, 
      digestAlgorithms   DigestAlgorithmIdentifiers, 
      encapContentInfo   EncapsulatedContentInfo, 
      certificates       [0] IMPLICIT CertificateSet Optional, 
      crls               [1] IMPLICIT CertificateRevocationLists 
                                   Optional, 
      signerInfos        SET OF SignerInfo } -- only one in SCVP 
   
    SignerInfo { 
      version            CMSVersion, 
      sid                SignerIdentifier, 
Freeman, Housley, & Malpani                                    [Page 9] 
INTERNET DRAFT                   SCVP                      October 2004 
 
      digestAlgorithm    DigestAlgorithmIdentifier, 
      signedAttrs        SignedAttributes, -- Required 
      signatureAlgorithm SignatureAlgorithmIdentifier, 
      signature          SignatureValue, 
      unsignedAttrs      UnsignedAttributes } -- not used in SCVP 
   
    EncapsulatedContentInfo { 
      eContentType       id-ct-scvp-certValRequest, 
                                    -- (1.2.840.113549.1.9.16.1.10) 
      eContent           OCTET STRING } -- Contains CVRequest 
   
  AuthenticatedData example: 
   
    ContentInfo { 
      contentType       id-ct-authData, 
                                   -- (1.2.840.113549.1.9.16.1.2) 
      content           AuthenticatedData } 
   
    AuthenticatedData { 
      version           CMSVersion, 
      originatorInfo    OriginatorInfo, -- Optional 
      recipientInfos    RecipientInfos, -- Only SCVP server 
      macAlgorithm      MessageAuthenticationCodeAlgorithm, 
      digestAlgorithm   DigestAlgorithmIdentifier, -- Optional 
      encapContentInfo  EncapsulatedContentInfo, 
      authAttrs         AuthAttributes, -- Required 
      mac               MessageAuthenticationCode, 
      unauthAttrs       UnauthAttributes } -- not used in SCVP 
   
    EncapsulatedContentInfo { 
      eContentType       id-ct-scvp-certValRequest, 
                                    -- (1.2.840.113549.1.9.16.1.10) 
      eContent           OCTET STRING } -- Contains CVRequest 
   
  All SCVP clients MUST support SignedData for signed requests and 
  responses.  An SCVP client SHOULD support authenticatedData for 
  signed requests and responses. 
   
  If the client uses signedData it MUST have a public key that has 
  been bound to a subject identity by a certificate that conforms to 
  the PKIX profile [PKIX-1] and that certificate MUST be suitable for 
  signing the SCVP request.  That is: 
   
     If the key usage extension is present, either the digital 
     signature or the non-repudiation bit MUST be asserted. 
      
     If the extended key usage extension is present, it MUST contain 
     either the client authentication OID, the SCVP client OID, or 
     some other OID by agreement with the SCVP server. 
   
Freeman, Housley, & Malpani                                    [Page 10] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  The client MUST put an unambiguous reference to its certificate in 
  the SignedData or AuthenticatedData request. The client SHOULD 
  include the signers certificate in the request, but MAY omit the 
  certificate to reduce the size of the request.  The client MAY 
  include other certificates in the request to aid the validation of 
  the signers certificates by the SCVP server. 
   
  The syntax and semantics for SignedData, AuthenticatedData, and 
  ContentInfo are defined in [CMS].  The syntax and semantics for 
  CVRequest are defined below.  The CVRequest item contains the 
  client request.  The CVRequest contains the cvRequestVersion and 
  query items; and the CVRequest MAY also contain the requestorRef, 
  requestNonce, and requestExtensions items. 
   
  The CVRequest MUST have the following syntax: 
   
    CVRequest ::= SEQUENCE { 
      cvRequestVersion        INTEGER, 
      query                   Query, 
      requestorRef        [0] SEQUENCE SIZE (1..MAX) OF OCTET STRING 
                                OPTIONAL, 
      requestNonce        [1] OCTET STRING OPTIONAL, 
      requestExtensions   [2] Extensions OPTIONAL  
      dhPublicKey         [3] DHPublicKey OPTIONAL} 
   
  Each of the items within the CVRequest is described in the 
  following sections. 
   
3.1 cvRequestVersion 
   
  The cvRequestVersion item defines the version of the SCVP CVRequest 
  used in a request.  The subsequent response MUST use the same 
  version number.  The value of the cvRequestVersion item MUST be one 
  (1) for a client implementing this specification.  Future updates 
  to this specification must specify other values if there are any 
  changes to syntax or semantics. 
   
  query item specifies one or more certificates that are the object 
  of the request; the certificates can be either public key 
  certificates [PKIX-1] or attribute certificates [PKIX-AC].  A query 
  MUST contain a sequence of one or more queriedCerts items as well 
  as one checks, one wantBack and one validationPolicy item; and a 
  query MAY also contain responseRefHash, responseValidationPolByRef, 
  signResponse, serverContextInfo, validationTime, intermediateCerts, 
  revInfos, producedAt, and queryExtensions items. 
   
  Query MUST have the following syntax: 
   
  Query ::= SEQUENCE { 
   queriedCerts               SEQUENCE SIZE (1..MAX) OF CertReference, 
   checks                     CertChecks, 
Freeman, Housley, & Malpani                                    [Page 11] 
INTERNET DRAFT                   SCVP                      October 2004 
 
   wantBack                   WantBack, 
   validationPolicy           ValidationPolicy, 
   responseFlags              ResponseFlags OPTIONAL, 
   serverContextInfo      [0] OCTET STRING OPTIONAL, 
   validationTime         [1] GeneralizedTime OPTIONAL, 
   intermediateCerts      [2] CertBundle OPTIONAL, 
   revInfos               [3] RevocationInfos OPTIONAL, 
   producedAt             [4] GeneralizedTime OPTIONAL, 
   queryExtensions        [5] Extensions OPTIONAL } 
   
  The list of certificate references in the query item tells the 
  server the certificate(s) for which the client wants information.  
  The checks item specifies the checking that the client wants 
  performed.  The wantBack item specifies the objects that the client 
  wants the server to return in the response.  The validationPolicy 
  item specifies the validation policy that the client wants the 
  server to employ.  The requestRefHash, responseValidationPolByRef 
  and signResponse items allow the client to request optional 
  features for the response.  The serverContextInfo item tells the 
  server that additional information from a previous request-response 
  is desired.  The validationTime item tells the date and time 
  relative to which the client wants the server to perform the checks.  
  The intermediateCerts and revInfos items provide context for the 
  client request.  The queryExtensions item provides for future 
  expansion of the query syntax.  The syntax and semantics of each of 
  these items is discussed in the following sections. 
   
3.1.1 queriedCerts 
   
  The queriedCerts item, using the CertReference type, identifies the 
  certificate that is the object of the request.  The certificate is 
  either a public key certificate or an attribute certificate.  The 
  certificate is either directly included or it is referenced.  When 
  referenced, a SHA-1 hash value [SHA-1] of the referenced item is 
  included to ensure that the SCVP client and the SCVP server both 
  obtain the same certificate when the referenced certificate is 
  fetched.  Certificate references use the ESSCertID type defined in 
  [ESS].  CertReference has the following syntax: 
   
    CertReference ::= CHOICE { 
      pkc                   PKCReference, 
      ac                    ACReference } 
   
    PKCReference ::= CHOICE { 
      cert              [0] Certificate, 
      pkcRef            [1] ESSCertID } 
   
    ACReference ::= CHOICE { 
      attrCert          [2] AttributeCertificate, 
      acRef             [3] ESSCertID } 
   
Freeman, Housley, & Malpani                                    [Page 12] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  The ASN.1 definition of Certificate is imported from [PKIX-1]; the 
  definition of AttributeCertificate is imported from [PKIX-AC]; and 
  the definition of ESSCertID is imported from [ESS]. 
   
3.1.2 checks 
   
  The checks item describes the checking that the SCVP client wants 
  the SCVP server to perform on the certificate(s) in the 
  queriedCerts item.  The checks item MUST contain a sequence of 
  object identifiers (OIDs).  Each OID tells the SCVP server what 
  checking the client expects the server to perform.  For each check 
  specified in the request, the SCVP server MUST perform all of the 
  requested checks, or return an error. 
   
  Revocation status checking inherently includes certification path 
  construction.  Also, building a validated certification path does 
  not imply revocation status checks.  A server may still choose to 
  perform revocation status checks when performing path construction, 
  although this information cannot be returned to the client. 
   
  The checks item uses the CertChecks type, which has the following 
  syntax: 
   
    CertChecks ::= SEQUENCE SIZE (1..MAX) OF OBJECT IDENTIFIER 
   
  A list of OIDs indicates the checking that the client wants the 
  SCVP server to perform on the certificate(s) in the queriedCerts 
  item. 
   
  For public key certificates, OIDs are defined for the following 
  checks: 
   
    - Build a certification path to a trust anchor; 
     
    - Build a validated certification path to a trust anchor; and 
     
    - Do revocation status checks on the certification path. 
   
  For attribute certificates, OIDs are defined for the following 
  checks: 
   
    - Build a certification path to a trust anchor for the AC 
       issuer; 
     
    - Build a validated certification path to a trust anchor for the 
       AC issuer; 
     
    - Do revocation status checks on the certification path for the 
       AC issuer; and 
     
Freeman, Housley, & Malpani                                    [Page 13] 
INTERNET DRAFT                   SCVP                      October 2004 
 
    - Do revocation status checks on the AC as well as the 
       certification path for the AC issuer. 
   
  For these purposes, the following OIDs are defined: 
   
  id-stc OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) 
            dod(6) internet(1) security(5) mechanisms(5) pkix(7) 17 } 
   
  id-stc-build-valid-pkc-path   OBJECT IDENTIFIER ::= { id-stc 1 } 
  id-stc-build-status-checked-pkc-path 
                                OBJECT IDENTIFIER ::= { id-stc 2 } 
  id-stc-build-valid-aa-path    OBJECT IDENTIFIER ::= { id-stc 4 } 
  id-stc-build-status-checked-aa-path 
                                OBJECT IDENTIFIER ::= { id-stc 5 } 
   
3.1.3 wantBack 
   
  The wantBack item describes the kind of information the SCVP client 
  wants from the SCVP server for the certificate(s) in the 
  queriedCerts item.  The wantBack item MUST contain a sequence of 
  object identifiers (OIDs).  Each OID tells the SCVP server what the 
  client wants to know about the queriedCerts item.  For each type of 
  information specified in the request, the server MUST return 
  information regarding its finding (in a successful response). 
   
  For example, a request might include a checks item that only 
  specifies certification path building and include a wantBack item 
  that requests the return of the certification path built by the 
  server.  In this case, the response would not include a status for 
  the validation of the certification path, but it would include a 
  certification path that the server considers to be valid.  A client 
  that wants to perform its own certification path validation might 
  use a request of this form. 
   
  Alternatively, a request might include a checks item that requests 
  the server to build a certification path and validate it, including 
  revocation checking, and include a wantBack item that requests the 
  return of the status.  In this case, the response would include 
  only a status for the validation of the certification path.  A 
  client that completely delegates certification path validation 
  might use a request of this form. 
   
  The wantBack item uses the WantBack type, which has the following 
  syntax: 
   
    WantBack ::= SEQUENCE SIZE (1..MAX) OF OBJECT IDENTIFIER 
   
  For public key certificates, the types of information that can be 
  requested are: 
   
    - The certificate that was validated; 
Freeman, Housley, & Malpani                                    [Page 14] 
INTERNET DRAFT                   SCVP                      October 2004 
 
     
    - The certification path built for the certificate including the 
       certificate that was validated; 
     
    - Proof of revocation status for each certificate in the 
       certification path; 
     
    - Status indication; and 
     
    - The public key from the certificate. 
   
  For attribute certificates, the types of information that can be 
  requested are: 
   
    - The attribute certificate that was validated; 
     
    - The certification path built for the AC issuer certificate; 
     
    - Proof of revocation status for each certificate in the AC 
       issuer certification path; 
     
    - Proof of revocation status for the attribute certificate; and 
     
    - Status indication. 
     
  The client can also request a non-cached response to the request by 
  including wantback id-swb-non-cached-resp in the request. 
   
  For these purposes, the following OIDs are defined: 
   
    id-swb OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) 
            dod(6) internet(1) security(5) mechanisms(5) pkix(7) 18 } 
   
   id-swb-pkc-best-cert-path       OBJECT IDENTIFIER ::= { id-swb 1 } 
   id-swb-pkc-revocation-info      OBJECT IDENTIFIER ::= { id-swb 2 } 
   id-swb-pkc-cert-status          OBJECT IDENTIFIER ::= { id-swb 3 } 
   id-swb-pkc-public-key-info      OBJECT IDENTIFIER ::= { id-swb 4 } 
   id-swb-aa-cert-path             OBJECT IDENTIFIER ::= { id-swb 5 } 
   id-swb-aa-revocation-info       OBJECT IDENTIFIER ::= { id-swb 6 } 
   id-swb-ac-revocation-info       OBJECT IDENTIFIER ::= { id-swb 7 } 
   id-swb-ac-cert-status           OBJECT IDENTIFIER ::= { id-swb 8 } 
   id-swb-non-cached-resp          OBJECT IDENTIFIER ::= { id-swb 9 } 
   id-swb-pkc-cert                 OBJECT IDENTIFIER ::= { id-swb 10} 
   id-swb-ac-cert                  OBJECT IDENTIFIER ::= { id-swb 11} 
   id-swb-pkc-all-valid-cert-paths OBJECT IDENTIFIER ::= { id-swb 13} 
   
3.1.4 validationPolicy 
   
  The validationPolicy item, defines the validation policy The 
  validationPolicy item defines the validation policy that the client 
  wants the SCVP server to use during certificate validation.  If 
Freeman, Housley, & Malpani                                    [Page 15] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  this policy cannot be used for any reason, then the server MUST 
  return an error response. 
   
  The client and server can optionally agree on a set of parameters 
  which may fully or partially define a validation policy.  If the 
  policy defines all parameters necessary for processing an SCVP 
  request, then the client need only supply a reference to the policy 
  in this item.  If a partial set of parameters has been agreed upon, 
  then the client supplies a reference to the policy plus whatever 
  parameters are necessary to complete the request in this item. 
   
  The syntax of the validationPolicy item is: 
   
  ValidationPolicy ::= SEQUENCE { 
    validationPolRef          ValidationPolRef, 
    validationAlg         [0] ValidationAlg OPTIONAL, 
    userPolicySet         [1] SEQUENCE SIZE (1..MAX) OF OBJECT 
                                IDENTIFIER OPTIONAL, 
    inhibitPolicyMapping  [2] BOOLEAN OPTIONAL, 
    requireExplicitPolicy [3] BOOLEAN OPTIONAL, 
    inhibitAnyPolicy      [4] BOOLEAN OPTIONAL, 
    isCA                  [5] BOOLEAN OPTIONAL, 
    trustAnchors          [6] TrustAnchors OPTIONAL, 
    keyUsages             [7] SEQUENCE SIZE (1..MAX) OF KeyUsage 
                                 OPTIONAL, 
    extendedKeyUsages     [8] ExtKeyUsageSyntax OPTIONAL} 
   
  The validationPolRef item is required, but the remainder of the 
  items are optional.  The optional items are used to provide 
  validation policy parameters.  When the validation policy has no 
  parameters, all of the optional items are absent.  The 
  validationAlg item specifies the validation algorithm. The 
  userPolicySet item provides an acceptable set of certificate 
  policies.  The inhibitPolicyMapping item inhibits certificate 
  policy mapping during certification path validation.  The 
  requireExplicitPolicy item requires at least one valid certificate 
  policy in the certificate policies extension.  The inhibitAnyPolicy 
  item indicates whether the any-policy certificate policy OID is 
  processed or ignored when evaluating certificate policy.  The isCA 
  item indicates whether the client expects the certificate subject 
  to be a CA.  The trustAnchors item indicates the trust anchors that 
  are acceptable to the client.  The keyUsages item indicates the 
  technical usage of the public key that is to be confirmed by the 
  server as acceptable.  The extendedKeyUsages item indicates the 
  application-specific usage of the public key that is to be 
  confirmed by the server as acceptable.  The syntax and semantics of 
  each of these items is discussed in the following sections. 
   
3.1.4.1 validationPolRef 
   
Freeman, Housley, & Malpani                                    [Page 16] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  The reference to the validation policy can be either an OID or a 
  URI.  In either case, the client and server have agreed that the 
  value represents a particular validation policy.  The URI can point 
  to a human readable definition of the policy to facilitate correct 
  configuration. 
   
    - serverContextInfo; and 
     
    - the client's signature on the request. 
     
  The syntax of the ValidationPolRef item is: 
     
  ValidationPolRef::= CHOICE { 
    valPolRefByOID         [0] OBJECT IDENTIFIER, 
    valPolRefByURI         [1] IA5String} 
     
   
  SCVP servers SHOULD support serverContextInfo.  SCVP clients MAY 
  support serverContextInfo 
   
3.1.5 validationAlg 
   
  The validationAlg item, defines the validation algorithm to be used 
  by the SCVP server during certificate validation.  The value of 
  this item can be determined by agreement between the client and the 
  server, and is represented as an object identifier.  The server 
  might want to assign additional object identifiers that indicate 
  that some settings are used in addition to others given in the 
  request.  In this way, the validation algorithm object identifier 
  can be a shorthand for some SCVP options, but not others. 
   
  The validationAlg item uses the ValidationAlg type, which has the 
  following syntax: 
   
    ValidationAlg ::= SEQUENCE { 
      valAlgId              OBJECT IDENTIFIER, 
      parameters            ANY DEFINED BY valAlgId OPTIONAL } 
   
3.1.5.1 Default Validation Algorithm 
   
  The client can request the SCVP server's default validation policy 
  or another validation policy.  The object identifier to identify 
  the default validation policy is: 
   
    id-svp OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) 
           dod(6) internet(1) security(5) mechanisms(5) pkix(7) 19 } 
   
    id-svp-defaultValPolicy OBJECT IDENTIFIER ::= { id-svp 1 } 
   
  The default validation policy MUST use the basic validation 
  algorithm (see section 3.1.5.2.1). 
Freeman, Housley, & Malpani                                    [Page 17] 
INTERNET DRAFT                   SCVP                      October 2004 
 
   
  When using the default validation policy, the client can override 
  any of the default parameter values by supplying a specific value 
  in the request.  The SCVP server MUST make use of the provided 
  parameter values or return an error response. 
   
  All SCVP servers MUST support the default policy, but local policy 
  MAY require the server to send an error response to all requests 
  using the default policy. 
   
  Neither the clients nor server MUST dereference the URI during SCVP 
  request processing.  The URI is simply used as a reference for the 
  validation policy.  Clients and server MAY dereference the URI as 
  part of configuration. 
   
  The syntax of the validationPolRef is: 
   
    ValidationPolRef ::= CHOICE { 
      valPolRefByOID     [0] OBJECT IDENTIFIER, 
      valPolRefByURI     [1] IA5String } 
   
  If there are any conflicts between the non-default policy 
  referenced in the request and any supplied parameter values in the 
  request, then the server MUST return an error response. 
   
3.1.5.2 validationAlg 
   
  The optional validationAlg item defines the validation algorithm to 
  be used by the SCVP server during certificate validation.  The 
  value of this item can be determined by agreement between the 
  client and the server, and the validation algorithm is represented 
  by an object identifier. 
   
   The syntax of the validationAlg is: 
   
    ValidationAlg ::= SEQUENCE { 
      valAlgId              OBJECT IDENTIFIER, 
      parameters            ANY DEFINED BY valAlgId OPTIONAL } 
   
  The following section specifies the basic validation algorithm and 
  the name validation algorithm.  SCVP clients and servers MUST 
  support both validation algorithms defined in this section.  Other 
  validation algorithms can be specified in other documents for use 
  with specific applications.  SCVP clients and servers MAY support 
  any such validation algorithms.  
   
3.1.5.2.1 Basic Validation Algorithm 
   
  The client can request use of the SCVP basic validation algorithm 
  or another algorithm.  The basic validation algorithm implements 
  the full certification path validation algorithm as defined in 
Freeman, Housley, & Malpani                                    [Page 18] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  section 6 of [PKIX-1].  Other validation algorithms MAY implement 
  functions over and above those in the basic algorithm, but 
  validation algorithms MUST generate results compliant with the 
  basic validation algorithm.  That is, none of the validation 
  requirements in the basic algorithm can be omitted from any newly 
  defined validation algorithms.  However, other validation 
  algorithms MAY reject paths which are valid using the basic 
  validation algorithm.  The object identifier to identify the basic 
  validation algorithm is: 
   
    id-svp-basicValAlg OBJECT IDENTIFIER ::= { id-svp 3 } 
   
  When id-svp-basicValAlg appears as in valAlgId, the parameters item 
  MUST be absent. 
   
  The meaning of the default validation algorithm is: 
   
    -  Trust anchors will come from the trustAnchors item.  If no 
       certificates are specified in the trustAnchors item, then 
       the SCVP server will use trust anchors of its own choosing. 
   
    -  The acceptable policy set will come from the userPolicySet 
       item.  If no certificate policies are specified in the 
       userPolicySet item, then the SCVP server will use any-policy. 
   
    -  The SCVP server will check for certificate revocation using 
       CRLs, delta CRLs, OCSP responses, or any other source of 
       revocation information that is available. 
3.1.5.2.2 Basic Validation Algorithm Errors 
   
  The following errors are defined for the basic validation 
  algorithm: 
   
  id-bvae OBJECT IDENTIFIER ::= id-svp-basicValAlg 
   
  id-bvae-expired              OBJECT IDENTIFIER ::= { id-bvae 1 } 
  id-bvae-notYetValid          OBJECT IDENTIFIER ::= { id-bvae 2 } 
  id-bvae-wrong-Anchor         OBJECT IDENTIFIER ::= { id-bvae 3 } 
  id-bvae-partial-chain        OBJECT IDENTIFIER ::= { id-bvae 4 } 
  id-bvae-invalid-Key-Usage    OBJECT IDENTIFIER ::= { id-bvae 10 } 
  id-bvae-invalid-Purpose      OBJECT IDENTIFIER ::= { id-bvae 11 } 
  id-bvae-invalid-Policy       OBJECT IDENTIFIER ::= { id-bvae 12 } 
  id-bvae-invalid-Name         OBJECT IDENTIFIER ::= { id-bvae 13 } 
  id-bvae-invalid-Entity       OBJECT IDENTIFIER ::= { id-bvae 14 } 
  id-bvae-invalid-Depth        OBJECT IDENTIFIER ::= { id-bvae 15 } 
   
  The id-bvae-expired value means that the validation time used for 
  the request was later than the notAfter time in the certificate. 
   
Freeman, Housley, & Malpani                                    [Page 19] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  The id-bvae-notYetValid value means that the validation time used 
  for the request was before the notBefore time in the certificate. 
   
  The id-bvae-wrong-Anchor value means that a certification path was 
  able to be constructed but that the trust anchor for the path was 
  not one of the trust anchors required. 
   
  The id-bvae-partial-chain value means that a certification path was 
  unable to be constructed to any trust anchor. 
   
  The id-bvae-invalid-Key-Usage value means that one of the 
  certificates in the certification path has the wrong key 
  usage(PKIX-1 section 4.2.1.3).  The key in a CA certificate can 
  verify a certificate, but the key usage in the certificate does not 
  contain the cert sign bit. 
   
  The id-bvae-invalidPurpose value means that one of the certificates 
  in the certification path has the wrong purpose (PKIX-1 section 
  4.2.1.13).   
   
  The id-bvae-invalidCertPolicy value means that some part of 
  certificate policy evaluation has failed.  For example, the 
  requested policy was not valid in the certificate or the request 
  explicit policy is true and there are no valid certificate polices. 
   
  The id-bvae-invalidName value means that one of the names in one of 
  the certificates in the certification path violates a name 
  constraints extension in a parent certificate. 
   
  The id-bvae-invalidEntity value means that one of the entity types 
  in the certification pathas defined in the basic constraints 
  extension is invalid.  That is, an end entity has signed a 
  certificate. 
   
  The id-bvae-invalidPathDepth value means that the certification 
  path length violates the path length constraints in the basic 
  constraints extension. 
   
3.1.5.2.3 Name Validation Algorithm 
   
  The name validation algorithm allows the client to supply an 
  application identifier and a name to the server.  The application 
  identifier defines the name matching rules to use in comparing the 
  name supplied in the request with the names in the certificate. 
   
    id-svp-NameValAlg OBJECT IDENTIFIER ::= { id-svp 2 } 
    id-svp-dnValAlg   OBJECT IDENTIFIER ::= { id-svp 4 } 
   
   
  When the id-svp-NameValAlg appears as a valAlgId, the parameters 
  MUST use the NameValidationAlgParms syntax: 
Freeman, Housley, & Malpani                                    [Page 20] 
INTERNET DRAFT                   SCVP                      October 2004 
 
   
    NameValidationAlgParms ::= SEQUENCE { 
      keyPurposeId      KeyPurposeId, 
      validationNames   GeneralNames } 
   
  KeyPurposeId and GeneralNames are defined in [PKIX-1]. 
   
  If more than one name is supplied in the validationNames value, all 
  names MUST be of the same type and be valid according to the name 
  matching rules associated with the KeyPurposeId. 
   
  If the keyPurposeID supplied in the request is id-svp-dnValAlg, 
  then GeneralNames supplied in the request MUST be a DN name, and 
  the matching rules to be used are defined in [PKIX-1]. 
   
  If the keyPurposeID supplied in the request is id-kp-serverAuth 
  [PKIX-1], then GeneralNames supplied in the request MUST be a DNS 
  name, and the matching rules to be used are defined in [HTTP-TLS]. 
   
  If the keyPurposeID supplied in the request is id-kp-mailProtection 
  [PKIX-1], then GeneralNames supplied in the request MUST be a 
  rfc822Name, and the matching rules are defined in [SMIME-CERT]. 
   
  SCVP server MUST support the name validation algorithms for id-svp-
  dnValAlg, id-kp-serverAuth, id-kp-mailProtection. SCVP server may 
  suport other name validation algorithms. 
   
3.1.5.2.4 Name Validation Algorithm Errors 
   
  The following errors are defined for the Name Validation Algorithm 
   
  id-nvae OBJECT IDENTIFIER ::= id-svp-NameValAlg 
   
  id-nvae-name-mismatch    OBJECT IDENTIFIER ::= { id-nvae 1 } 
  id-nvae-no-name          OBJECT IDENTIFIER ::= { id-nvae 2 } 
  id-nvae-unknown-pupose   OBJECT IDENTIFIER ::= { id-nvae 3 } 
  id-nvae-bad-name         OBJECT IDENTIFIER ::= { id-nvae 4 } 
  id-nvae-bad-name-type    OBJECT IDENTIFIER ::= { id-nvae 5 } 
  id-nvae-mixed-names      OBJECT IDENTIFIER ::= { id-nvae 6 } 
   
  The id-nvae-nameMismatch value means the client supplied a name 
  with the validation policy, which the server recognized and the 
  server found corresponding name type in the certificate, but was 
  unable to find a match to the name supplied.  For example, the 
  client supplied a DNS name of example1.com, the certificate 
  contained a DNS name of example.com. 
   
  The id-nvae-noCertName value means the client supplied a name with 
  the validation policy, which the server recognized, but the server 
  could not find the corresponding name type in the certificate.  For 
Freeman, Housley, & Malpani                                    [Page 21] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  example, the client supplied a DNS name of example1.com, the 
  certificate only contained a rfc822Name of user@example.com. 
   
  The id-nvae-unknownPupose value means the client supplied 
  KeyPurposeID which the server does not recognize. 
   
  The id-nvae-badName value means the client supplied either and 
  empty or malformed name in the request. 
   
  The id-nvae-badNameType value means the client supplied an 
  inappropriate name type for the key purpose.  For example, the 
  client specified a key purpose ID of id-kp-serverAuth, and a rfc822 
  name of user@example.com. 
   
  The id-nvae-mixedNames value means the client supplied multiple 
  names in the request of different types. 
   
  The userPolicySet item specifies a list of policy identifiers that 
  the SCVP server MUST use when forming and validating a certificate 
  If certPolicies is not specified, then any-policy MUST be used. 
   
3.1.5.3 userPolicySet 
   
  The userPolicySet item specifies a list of certificate policy 
  identifiers that the SCVP server MUST use when constructing and 
  validating a certification path.  If userPolicySet is not specified, 
  then any-policy MUST be used. 
   
  SCVP clients SHOULD support userPolicySet item in requests, and 
  SCVP servers MUST support userPolicySet item in requests. 
   
3.1.5.4 inhibitPolicyMapping 
   
  The inihibitPolicyMapping specifies an input to the certification 
  path validation algorithm, and it controls whether policy mapping 
  is allowed in the certification path validation (see [PKIX-1], 
  section 6.1.1).  By default the server allows policy mapping as 
  part of certification path validation.  If the client wants the 
  server to inhibit policy mapping, inhibitPolicyMapping is set to 
  TRUE in the request. 
   
  SCVP clients and servers MUST support the default behavior.  SCVP 
  clients MAY support inhibiting policy mapping.  SCVP servers SHOULD 
  support inhibiting policy mapping. 
   
3.1.5.5 requireExplicitPolicy 
   
  The requireExplicitPolicy specifies an input to the certification 
  path validation algorithm, and it controls whether there must be at 
  least one valid policy in the certificate policies extension (see 
  [PKIX], section 6.1.1).  By default the server accepts no policies 
Freeman, Housley, & Malpani                                    [Page 22] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  in the certificate policies extension of valid certificates.  If 
  the client wants the server to require at least one policy, 
  requireExplicitPolicy is set to TRUE in the request. 
   
  SCVP clients and servers MUST support the default behavior.  SCVP 
  clients MAY support requiring explicit policies.  SCVP server 
  SHOULD support requiring explicit policies. 
   
3.1.5.6 inhibitAnyPolicy 
   
  The inhibitAnyPolicy specifies an input to the certification path 
  validation algorithm (see [PKIX], section 6.1.1), and it controls 
  whether the any-policy OID is processed or ignored when evaluating 
  certificate policy.  By default the server processes the any-policy 
  OID.  If the client wants the server to ignore the any-policy OID, 
  inhibitAnyPolicy MUST be set to TRUE in the request.  If the value 
  is absent in the request or the value is set to FALSE, the server 
  MUST process the any-policy OID. 
   
  SCVP clients and servers MUST support the default behavior.  SCVP 
  clients MAY support ignoring the any-policy OID.  SCVP servers 
  SHOULD support ignoring the any-policy OID. 
   
3.1.5.7 isCA 
   
  The isCA specifies whether the client expects the certificate 
  subject to be a CA.  This corresponds to CA BOOLEAN value in the 
  basic constraints extension [PKIX-1, 4.2.1.10]. 
   
  If the client requires the entity type of certificate being 
  validated to be a CA, then it MUST set the value of isCA to be TRUE 
  in the request. 
   
  If the client requires the subject to be an end entity, then it 
  MUST set the value to FALSE. 
   
  If the client does not care about the entity type, then it MUST 
  omit the BOOLEAN value.  If the BOOLEAN value is omitted from the 
  request and the client submits a CA certificate as the subject of 
  the validation request, then a server MUST NOT treat this as an 
  error. 
   
  SCVP client and server MUST support the default behavior.  SCVP 
  client SHOULD support setting the BOOLEAN value to TRUE, and the 
  SVCP client MAY support setting the BOOLEAN value to FALSE.  SCVP 
  server MUST support the isCA BOOLEAN being set to either TRUE or 
  FALSE. 
   
3.1.5.8 trustAnchors 
   
Freeman, Housley, & Malpani                                    [Page 23] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  The trustAnchors item specifies the trust anchors at which the 
  certification path must terminate in if the path is to be 
  considered valid by the SCVP server for the request.  If a 
  trustAnchors item is present, the server MUST NOT consider any 
  certification paths ending in other trust anchors as valid. 
   
  The TrustAnchors type contains one or more trust anchor 
  specification.  A certificate reference can be used to identify the 
  trust anchor by certificate hash and optionally a distinguished 
  name with serial number.  Alternatively, trust anchors can be 
  provided directly.  The order of trust anchor specifications within 
  the sequence is not important.  Any CA certificate which meets the 
  requirements of [PKIX-1] for signing certificates can be provided 
  as a trust anchor.  If a trust anchor is supplied which does not 
  meet these requirements, the server MUST return an error response. 
   
  The trust anchor itself, regardless of its form, MUST NOT be 
  included in any certification path returned by the SCVP server. 
   
  TrustAnchors has the following syntax: 
   
    TrustAnchors ::= SEQUENCE SIZE (1..MAX) OF PKCReference 
   
  SCVP server MUST support TrustAnchors.  SCVP clients SHOULD support 
  trust anchors. 
   
3.1.5.9 keyUsages 
   
  The key usage extension [PKIX-1, section 4.2.1.3] in the 
  certificate defines the technical purpose (such as encipherment, 
  signature, and certificate signing) of the key contained in the 
  certificate.  If the client wishes to confirm the technical usage, 
  then they can communicate the usage they want to validate by the 
  same structure using the same semantics as defined in [PKIX-1].  
  Therefore, if the client obtained the certificate in the context of 
  a digital signature, they can confirm this use by including a 
  keyUsage structure with the digital signature bit set. 
   
  The keyUsages item can contain one or more keyUsage definitions to 
  allow the client to search for a set of patterns any one of which 
  is acceptable to the client.  If the client whishes to match 
  against multiple possibilities that the client pass in a sequence 
  of possible patterns.  Each keyUasge can contain a set of one or 
  more bits set in the request, all bits MUST be present in the 
  certificate to match against an instance of the keyUsage in the 
  SCVP request. If the certificate key usage extension contains more 
  usages than requested, then the certificate MUST be considered a 
  match. Therefore if a client whishes to check for either digital 
  signature or non-repudiation, then the client provides two keyUsage 
  values, one with digital signature set, and the other with non-
  repudiation set. If the key usage extension is absent from the 
Freeman, Housley, & Malpani                                    [Page 24] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  certificate, the certificate MUST be considered good for all usages 
  therefore any pattern in the SCVP request will match. 
   
  SCVP clients SHOULD support keyUsages, and SCVP servers MUST 
  support keyUsages. 
 
3.1.5.10 extendedKeyUsages 
   
  The extended key usage extension [PKIX-1, section 4.2.1.13] defines 
  more abstract technical purposes in addition to or in place of the 
  purposes indicated in the key usage extension for which the 
  certified public key may be used.  If the client wishes to confirm 
  the extended key usage, then they can communicate the usage they 
  want to validate by the same extension using the same semantics as 
  defined in [PKIX-1]. Therefore if the client obtained the 
  certificate in the context of a TLS server, they can confirm this 
  usage by including the extended key usage structure with the id-kp-
  serverAuth object identifier.  If more than one usage is set in the 
  request, all usages MUST be present in the certificate. If the 
  certificate extension contains more usages than requested, then the 
  certificate MUST be considered a match. 
   
  SCVP clients SHOULD support extendedKeyUsages, and SCVP servers 
  MUST support extendedKeyUsages. 
   
3.1.6 responseFlags 
   
  The optional response flags item allows the client to indicate 
  which optional features in the CVResponse it wants the server to 
  include.  If the default values for all of the flags are used, then 
  the response flags item MUST NOT be included in the request. 
   
  The syntax of the responseFlags is: 
   
  ResponseFlags ::= SEQUENCE { 
    responseRefHash            BOOLEAN DEFAULT TRUE, 
    responseValidationPolByRef BOOLEAN DEFAULT TRUE, 
    signResponse               BOOLEAN DEFAULT TRUE } 
   
  Each of the response flags is described in the following sections. 
   
3.1.6.1 responseRefHash 
   
  The responseRefHash controls how the server identifies the request 
  to which it is responding.  By default, the server includes a hash 
  of the request in the response.  If the client wants the server to 
  include the full request in the response, responseRefHash is set to 
  FALSE.  The main reason a client would request the server to 
  include the full request in the response is to archive the request-
  response exchange in a single object.  That is, the client wants to 
  archive a single object which includes both request and response. 
Freeman, Housley, & Malpani                                    [Page 25] 
INTERNET DRAFT                   SCVP                      October 2004 
 
   
  SCVP clients and servers MUST support the default behavior.  SCVP 
  clients MAY support requesting and processing the full request.  
  SCVP servers SHOULD support returning the full request. 
   
3.1.6.2 responseValidationPolByRef 
   
  The responseValidationPolByRef controls whether the response 
  includes by reference or by value the validation policy used to 
  process the request.  By default the response will contain 
  references to the validation policy.  If the client wants the 
  validation policy to be included by value, then the 
  responseValidationPolByRef is set to FALSE.  The main reason a 
  client would request the server to include validation policy to be 
  included by value is to archive the request-response exchange in a 
  single object.  That is, the client wants to archive the CVResponse 
  and have it include every aspect of the validation policy. 
   
  SCVP clients and servers MUST support the default behavior.  SCVP 
  clients MAY support requesting and processing the 
  responseValidationPolByRef.  SVCP server SHOULD support returning 
  the responseValidationPolByRef. 
   
3.1.6.3 signResponse 
   
  The signResponse indicates whether the client requires the server 
  to sign the response.  If the client is performing full 
  certification path validation on the response and it is not 
  concerned about the source of the response, then the client does 
  not benefit from a signature on the response.  In this case, the 
  client can indicate to the server that a signature is unnecessary.  
  However, the server is always permitted to return a signed response. 
   
  SCVP clients that support delegated path discovery (DPD) as defined 
  in [RQMTS] MUST support setting this value to FALSE. 
   
  SCVP clients that support delegated path validation (DPV) as 
  defined in [RQMTS] require a signed response.  Such clients MUST 
  always set this value to TRUE or accept the default behavior, which 
  requires the server to return a signed response. 
   
  SCVP servers MUST support returning signed responses, and SCVP 
  servers SHOULD support returning unsigned responses.  Based on 
  local policy, the server can be configured return signed or 
  unsigned responses if this value is set to FALSE. 
 
3.1.7 serverContextInfo 
   
  The optional serverContextInfo item, if present, contains context 
  from a previous request-response exchange with the same SCVP server.  
  It allows the server to return more than one certification path for 
Freeman, Housley, & Malpani                                    [Page 26] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  the same certificate to the client.  For example, if a server 
  constructs a particular certification path for a certificate, but 
  the client finds it unacceptable, the client can then send the same 
  query back to the server with the serverContextInfo from the first 
  response, and the server will be able to provide a different 
  certification path (if another one can be found). 
   
  Contents of the serverContextInfo are opaque to the SCVP client.  
  That is, the client only knows that it needs to return the value 
  provided by the server with the subsequent request to get a 
  different certification path.  Note that the subsequent query needs 
  be essentially identical to the previous query.  The client MUST 
  NOT change any items other than: 
   
    - requestNonce; 
     
    - serverContextInfo; and 
     
    - the client's signature on the request. 
   
  SCVP clients MAY support serverContextInfo, and SCVP servers SHOULD 
  support serverContextInfo. 
   
3.1.8 valididationTime 
   
  The optional validationTime item, if present, tells the date and 
  time relative to which the SCVP client wants the server to perform 
  the checks.  If the validationTime is not present, the server MUST 
  perform the validation using the date and time at which the server 
  processes the request.  If the validationTime is present, it MUST 
  be encoded as GeneralizedTime.  The validationTime provided MUST be 
  a retrospective time since the server can only perform a validity 
  check using the current time (default) or previous time.  A Server 
  can ignore the validationTime provided in the request if the time 
  is within the clock skew of the servers current time. 
   
  GeneralizedTime values MUST be expressed Universal Coordinated Time 
  (UTC) (which is also known as Greenwich Mean Time and Zulu time) 
  and MUST include seconds (i.e., times are YYYYMMDDHHMMSSZ), even 
  when the number of seconds is zero.  GeneralizedTime values MUST 
  NOT include fractional seconds. 
   
  The information in the corresponding CertReply item in the response 
  MUST be formatted as if the server created the response at the time 
  indicated in the validationTime.  However, if the server does not 
  have appropriate historical information, the server MUST return an 
  error response. 
   
  SCVP servers MUST apply a clock skew to the validity time to allow 
  for minor time synchronization errors.  The default value is 10 
Freeman, Housley, & Malpani                                    [Page 27] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  minutes.  If the server uses a value other than the default it MUST 
  include the clock skew value in the validation policy response. 
   
  SCVP clients MAY support validationTime other than the current time.  
  SCVP servers MUST support using its current time, and SHOULD 
  support the client setting the validationTime in the request. 
   
3.1.9 intermediateCerts 
   
  The optional intermediateCerts item helps the SCVP server create 
  valid certification paths.  The intermediateCerts item, when 
  present, provides certificates that the server MAY use when forming 
  a certification path.  The certificates in the intermediateCerts 
  item MAY be used by the server in addition to any other 
  certificates that the server can access when building certification 
  paths.  When present, the intermediateCerts item MUST contain at 
  least one certificate, and the intermediateCerts item MUST be 
  structured as a CertBundle.  The certificates in the 
  intermediateCerts MUST NOT be considered as valid by the server 
  just because they are present in this item. 
   
  The CertBundle type contains one or more certificate references.  
  The order of the entries in the bundle is not important.  
  CertBundle has the following syntax: 
   
    CertBundle ::= SEQUENCE SIZE (1..MAX) OF Certificate 
   
  SCVP clients SHOULD support intermediateCerts, and SCVP servers 
  MUST support intermediateCerts. 
   
3.1.10 revInfos 
   
  The optional revInfo item specifies revocation information such as 
  CRLs, delta CRLs [PKIX-1], and OCSP responses [OCSP] that the SCVP 
  server MAY use this information when validating certification paths.  
  The purpose of the revInfos item is to provide revocation 
  information to which the server might not otherwise have access, 
  such as an OCSP response that the client received along with the 
  certificate.  Note that the information in the revInfos item might 
  not be used by the server.  For example, the revocation information 
  might be associated with certificates that the server does not use 
  in the certification path that it constructs. 
   
  Clients SHOULD be courteous to the SCVP server by separating CRLs 
  and delta CRLs.  However, since the two share a common syntax, SCVP 
  servers SHOULD accept delta CRLs even if they are identified as 
  regular CRLs by the SCVP client. 
   
  CRLs, delta CRLs, and OCSP responses can be provided as revocation 
  information.  If needed, additional object identifiers can be 
  assigned for additional revocation information types in the future. 
Freeman, Housley, & Malpani                                    [Page 28] 
INTERNET DRAFT                   SCVP                      October 2004 
 
   
  The revInfos item uses the RevocationInfos type, which has the 
  following syntax: 
   
    RevocationInfos ::= SEQUENCE SIZE (1..MAX) OF RevocationInfo 
   
  RevocationInfo ::= CHOICE { 
    crl                    [0] CertificateList, 
    delta-crl              [1] CertificateList, 
    ocsp                   [2] OCSPResponse, 
    other                  [3] OtherRevInfo } 
   
  OtherRevInfo ::= SEQUENCE { 
    riType                     OBJECT IDENTIFIER, 
    riValue                    ANY DEFINED BY riType } 
   
3.1.11 producedAt 
   
  The client MAY allow the server to use a cached SCVP response.  
  When doing so, the client uses the producedAt item to express 
  requirements on the freshness of the cached response.  The 
  producedAt item tells the earliest date and time at which an 
  acceptable cached response could have been produced.  The 
  producedAt item represents the date and time in UTC, using the 
  GeneralizedTime type.  The value in the producedAt item is 
  independent of the validation time. 
   
  GeneralizedTime value MUST be expressed in UTC, as defined in 
  section 3.1.8. 
   
  SCVP client MAY support using producedAt values in the request.  
  SCVP server SHOULD support the producedAt values in the request. 
   
3.1.12 queryExtensions 
   
  The optional queryExtensions item contains Extensions.  If present, 
  each extension in the sequence extends the query.  This 
  specification does not define any extensions, the facility is 
  provided to allow future specifications to extend SCVP.  The syntax 
  for extensions is imported from [PKIX-1].  The queryExtensions item, 
  when present, MUST contain a sequence of extension items, and each 
  of extension MUST contain extnID, critical, and extnValue items.  
  Each of these is described in the following sections. 
   
3.1.12.1 extnID 
   
  The extnID item is an identifier for the extension.  It contains 
  the object identifier that names the extension. 
   
3.1.12.2 critical 
   
Freeman, Housley, & Malpani                                    [Page 29] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  The critical item is a BOOLEAN.  Each extension is designated as 
  either critical (with a value of TRUE) or non-critical (with a 
  value of FALSE).  By default, the extension is non-critical.  An 
  SCVP server MUST reject the query if it encounters a critical 
  extension that it does not recognize; however, a non-critical 
  extension MAY be ignored if it is not recognized. 
   
3.1.12.3 extnValue 
   
  The extnValue item is an octet string, which contains the extension 
  value.  An ASN.1 type is specified for each extension, identified 
  by the associated extnID object identifier. 
   
3.2 requestorRef  
   
  The optional requestorRef item is a local reference to the client, 
  and it is intended for use in environments where SCVP relay is 
  employed.  As described in [REQMTS],   some network environments a 
  SCVP server might not be able to obtain all of the information that 
  it needs to process a request.  However, the SCVP server might be 
  configured to use the services of one or more other SCVP servers to 
  fulfill all requests.  In such cases, the client is unaware that 
  the queried SCVP server is using the services of other SCVP servers, 
  and the client-queried SCVP server acts as a SCVP client to another 
  SCVP server.  Unlike the original client, the SCVP server is 
  expected to have moderate computing and memory resources, enabling 
  the use of relay, re-direct or multicasting mechanisms.  The 
  requestorRef item is needed by SCVP servers that act as client to 
  other SCVP servers in order to match a response to the original 
  request which triggered it.  The requestorRef item is also needed 
  to prevent looping in some configurations.  The value is of local 
  significance to the client, and the server MUST threat this as an 
  opaque value.  To detect loops, the server MUST inspect the 
  sequence of octet strings, looking for values that it inserted as a 
  client. 
   
  If the SCVP client includes a requestorRef value in the request, 
  then the SCVP server MUST return the same value in a non-cached 
  response.  The SCVP server MAY omit the requestorRef value from 
  cached SCVP responses. 
   
  The requestorRef item MUST be an octet string.  No provisions are 
  made to ensure uniqueness of the requestorRef octet string; however, 
  all of the octets MUST have values other than zero. 
   
3.3 requestNonce 
   
  The optional requestNonce item contains a request identifier 
  generated by the SCVP client.  If the client includes a 
  requestNonce value in the request, it is expressing a preference 
  the SCVP server SHOULD return a non-cached response. If the server 
Freeman, Housley, & Malpani                                    [Page 30] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  returns a non-cached response it MUST include the requestNonce from 
  the request in the response; however, the server MAY return a 
  cached success response which MUST NOT have a requestNonce.  If the 
  client includes a requestNonce and also sets a wantBack of id-swb-
  nonCachedRespRequired, the client is indicating that the SCVP 
  server MUST return either a non-cached response including the 
  requestNonce or an error response.  The client SHOULD include a 
  requestNonce item in every request to prevent an attacker from 
  acting as a man-in-the-middle by replaying old responses from the 
  server.  The requestNonce value SHOULD change with every request 
  sent by the client.  The client MUST NOT include the wantBack of 
  id-swb-nonCachedRespRequired without a requestNonce, and a server 
  receiving such a request SHOULD return an invalidRequest error 
  response. 
   
  The requestNonce item, if present, MUST be an octet string that was 
  generated exclusively for this request. 
   
3.4 requestExtensions 
   
  The OPTIONAL requestExtensions item contains Extensions.  If 
  present, each Extension in the sequence extends the request.  This 
  specification does not define any extensions, the facility is 
  provided to allow future specifications to extend the SCVP.  The 
  syntax for Extensions is imported from [PKIX-1].  The 
  requestExtensionscvRequestExtensions item, when present, MUST 
  contain a sequence of extension items, and each of extension MUST 
  contain extnID, critical, and extnValue items.  Each of these is 
  described in the following sections. 
   
3.4.1 extnID 
   
  The extnID item is an identifier for the extension.  It contains 
  the object identifier that names the extension. 
   
3.4.2 critical 
   
  The critical item is a BOOLEAN.  Each extension is designated as 
  either critical (with a value of TRUE) or non-critical (with a 
  value of FALSE).  By default, the extension is non-critical.  An 
  SCVP server MUST reject the query if it encounters a critical 
  extension it does not recognize. A non-critical extension MAY be 
  ignored if it is not recognized, but MUST be processed if it is 
  recognized. 
   
3.4.3 extnValue 
   
  The extnValue item contains an octet string.  Within the octet 
  string is the extension value.  An ASN.1 type is specified for each 
  extension, identified by the associated extnID object identifier. 
   
Freeman, Housley, & Malpani                                    [Page 31] 
INTERNET DRAFT                   SCVP                      October 2004 
 
3.5 dhPublicKey 
  The dhPublicKey item is an optional Diffie-Hellamn public value. It 
  is defined in PKIX-ALGS. When used in conjunction with the servers 
  Diffie-Hellamn value it allows the client and server to compute a 
  shared secret which can be used to integrity protect the SCVP 
  request-response pair. If the client is not using a protected 
  transport such as TLS, an does not have another mechanism to 
  integrity protect the request-response pair such as a Kerberos 
  session key or a signing public key, then the client SHOULD 
  generate a DH key with the same parameters as the servers (see 
  section Error! Reference source not found.) and use this to 
  generate the shared secret with the servers public values and 
  submit an authenticatedData request using the calculated shared 
  secret for the HMAC secret. For the server to compute the shared 
  secret, it must lean the public values the client generates, 
  therefore the client MUST include this in the request if it uses 
  this mechanism to integrity protect the request-response pair. The 
  reuse by the client of the generated DH key across multiple 
  requests is a matter of local policy. 
   
3.6 SCVP Request Authentication 
   
  It is a matter of local policy what validation policy is used by 
  the server when validating requests.  When validating signed SCVP 
  requests, the SCVP servers SHOULD use the validation algorithm 
  defined in section 6 of PKIX-1. 
   
   
  If the certificate used to validate a SignedData validation request 
  includes the key usage extension [PKIX-1, section 4.2.1.3], it MUST 
  have either the digital signature bit set, the non-repudiation bit 
  set, or both bits set. 
   
  If the certificate used to validate an AuthenticatedData validation 
  request includes the key usage extension, it MUST have the key 
  agreement bit set. 
 
  If the certificates used on a validation request contains the 
  extended Key Usage extension [PKIX-1, section 4.2.1.13], it is a 
  matter of local policy which OID, if any, the server will check in 
  the extension. The SCVP server MAY require the following OID 
   
  id-kp OBJECT IDENTIFIER ::= { id-pkix 3 } 
   
  id-kp-scvpClient             OBJECT IDENTIFIER ::= { id-kp 16 } 
   
  If a signed request fails to meet the validation policy of the 
  server, it MUST be treated as an unauthenticated request. 
   
4 Validation Response 
   
Freeman, Housley, & Malpani                                    [Page 32] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  A SCVP server response to the client MUST be a single CVResponse 
  item.  When a CVResponse is encapsulated in a MIME body part, 
  application/cv-response MUST be used. 
   
  There are a number of forms of an SCVP response: 
   
     1. A success response to a request made over a protected 
        transport such as TLS. These responses SHOULD be unsigned by 
        the server 
      
     2. A success response to a request that has SignResponse set to 
        FALSE. These responses SHOULD be unsigned by the server. 
      
     3. All other success responses MUST be signed by the server. If 
        the server is unable to return a signed success response due 
        to local policy, then it MUST return an error response. 
      
     4. A error response to a request made over a protected 
        transport such as TLS. These responses SHOULD be unsigned by 
        the server 
     
     5. A error response to a request that has SignResponse set to 
        FALSE. These responses SHOULD be unsigned by the server. 
 
     6. An error response to an authenticated request. These 
        responses MUST be signed by the server. 
 
     7. An error response to an authenticatedData HMAC request where 
        HMAC is valid. These responses MUST be signed by the server. 
 
     8. All other error responses MUST NOT be signed by the server. 
   
  Successful responses are be made when the server has fully complied 
  with the request.  That is, the server was able to build a 
  certification path using the referenced or supplied validation 
  policy, and it was able to comply with all the requested parameters.  
  If the server is unable to build a certification path using the 
  required validation policy or the request contains an unsupported 
  option, then the server MUST return an error response. 
   
  For signed requests and responses, SCVP servers MUST support 
  SignedData, and AuthenticatedData.  It is a matter of local policy 
  which types are used. 
 
  If the server is making a signed response to a signed request, then 
  the server MUST use the same signature type (SignedData or 
  AuthenticatedData) as in the request. 
 
  An overview of the structure used for an unsigned response is 
  provided below.  Many details are not shown, but the way that SCVP 
  makes use of CMS is clearly illustrated. 
Freeman, Housley, & Malpani                                    [Page 33] 
INTERNET DRAFT                   SCVP                      October 2004 
 
   
    ContentInfo { 
      contentType        id-ct-scvp-certValResponse, 
                                  -- (1.2.840.113549.1.9.16.1.11) 
      content            CVResponse } 
   
  The signed response consists of a CVResponse encapsulated in either 
  a SignedData or an AuthenticatedData which is in turn encapsulated 
  in a ContentInfo.  An overview of the structure used for a signed 
  response is provided below.  As above, many details are not shown, 
  but the way that SCVP makes use of CMS is clearly illustrated. 
   
  SignedData Example: 
   
    ContentInfo { 
      contentType        id-signedData, -- (1.2.840.113549.1.7.2) 
      content            SignedData } 
   
  SignedData { 
    version                    CMSVersion, 
    digestAlgorithms           DigestAlgorithmIdentifiers, 
    encapContentInfo           EncapsulatedContentInfo, 
    certificates           [0] IMPLICIT CertificateSet OPTIONAL, 
                                 -- MUST include server cert 
    crls                   [1] IMPLICIT CertificateRevocationLists 
                                 OPTIONAL, 
    signerInfos                SET OF SignerInfos } 
                                 -- Only one in SCVP 
   
    SignerInfo { 
      version                  CMSVersion, 
      sid                      SignerIdentifier, 
      digestAlgorithm          DigestAlgorithmIdentifier, 
      signedAttrs              SignedAttributes, 
                                 -- Required by CMS 
      signatureAlgorithm       SignatureAlgorithmIdentifier, 
      signature                SignatureValue, 
      unsignedAttrs            UnsignedAttributes } 
                                 -- Not used in SCVP 
   
  EncapsulatedContentInfo { 
      eContentType       id-ct-scvp-psResponse, 
                                    -- (1.2.840.113549.1.9.16.1.11) 
      eContent           OCTET STRING } -- Contains CVResponse 
   
  AuthenticatedData Example: 
   
    ContentInfo { 
      contentType       id-ct-authData, 
                                   -- (1.2.840.113549.1.9.16.1.2) 
      content           AuthenticatedData } 
Freeman, Housley, & Malpani                                    [Page 34] 
INTERNET DRAFT                   SCVP                      October 2004 
 
   
  AuthenticatedData ::= SEQUENCE { 
    version                    CMSVersion, 
    originatorInfo             OriginatorInfo, 
    recipientInfos             RecipientInfos, 
                                 -- Only for SCVP client 
    macAlgorithm               MessageAuthenticationCodeAlgorithm, 
    digestAlgorithm            DigestAlgorithmIdentifier, 
    encapContentInfo           EncapsulatedContentInfo, 
    authAttrs                  AuthAttributes, 
                                  -- Required by CMS 
    mac                        MessageAuthenticationCode, 
    unauthAttrs                UnauthAttributes } 
                                  -- Not used in SCVP 
   
  EncapsulatedContentInfo { 
      eContentType       id-ct-scvp-psResponse, 
                                    -- (1.2.840.113549.1.9.16.1.11) 
      eContent           OCTET STRING } -- Contains CVResponse 
   
  The SCVP server MUST include its own certificate in the 
  certificates field within SignedData.  Other certificates can also 
  be included.  The SCVP server MAY also provide one or more CRLs in 
  the crls field within SignedData. 
   
  The signedAttrs within SignerInfo MUST include the content-type and 
  message-digest attributes defined in [CMS], and it SHOULD include 
  the signing-certificate attribute as defined in [ESS].  Within the 
  signing-certificate attribute, the first certificate identified in 
  the sequence of certificate identifiers MUST be the certificate of 
  the SCVP server.  The inclusion of other certificate identifiers in 
  the signing-certificate attribute is OPTIONAL.  The inclusion of 
  policies in the signing-certificate is OPTIONAL. 
   
  The CVResponse item contains the server response.  The CVResponse 
  MUST contain the cvRespVersion, policyID, producedAt, and 
  respStatus items.  The CVResponse MAY also contain the 
  respValidationPolicy, requestorRef, requestorName, responder, 
  replyObjects, respNonce, serverContextInfo, and respExtensions 
  optional items.  The replyObjects item MUST contain exactly one 
  CertReply item for each certificate requested.  The requestorRef 
  and the responder items MUST be included if the request included a 
  requestor item.  The respNonce item MUST be included if the request 
  included a requestNonce item and a non-cached response is provided. 
   
  The CVResponse MUST have the following syntax: 
   
    CVResponse ::= SEQUENCE { 
      cvResponseVersion         cvResponseVersion        INTEGER, 
      policyID                  INTEGER, 
      producedAt                GeneralizedTime, 
Freeman, Housley, & Malpani                                    [Page 35] 
INTERNET DRAFT                   SCVP                      October 2004 
 
      responseStatus            ResponseStatus, 
      respValidationPolicy  [0] RespValPolicy OPTIONAL, 
      requestRef            [1] RequestReference OPTIONAL, 
      requestorRef          [2] OCTET STRING OPTIONAL, 
      requestorName         [3] GeneralNames OPTIONAL, 
      responder             [4] OCTET STRING OPTIONAL, 
      replyObjects          [5] ReplyObjects OPTIONAL, 
      respNonce             [6] OCTET STRING OPTIONAL, 
      serverContextInfo     [7] OCTET STRING OPTIONAL, 
      cvResponseExtensions  [8] Extensions OPTIONAL } 
   
4.1 cvResponseVersion 
   
  The syntax and semantics of cvResponseVersion are the same as 
  cvRequestVersion item is described in section 3.1.  The 
  cvResponseVersion MUST match the cvRequestVersion in the request.  
  If the server cannot generate a response with a matching version 
  number, then the server MUST return an error response that 
  indicates the highest version number that the server supports as 
  the version number. 
   
4.2 policyID 
   
  The policy ID used by the SCVP server when it processed the request.  
  See section 6.4 for details. 
   
4.3 producedAt 
   
  The producedAt item tells the date and time at which the SCVP 
  server generated the response.  The producedAt item represents the 
  date and time in UTC, using the GeneralizedTime type, and this 
  value is independent of the validation time. 
   
  GeneralizedTime value MUST be expressed in UTC, and it MUST be 
  interpreted as defined in section 3.1.8. 
   
4.4 responseStatus 
   
  The responseStatus item gives status information to the SCVP client 
  about its request.  The responseStatus item has a numeric status 
  code and an optional string that is a sequence of characters from 
  the ISO/IEC 10646-1 character set encoded with the UTF-8 
  transformation format defined in [UTF8]. 
   
  The string MAY be used to transmit status information.  The client 
  MAY choose to display the string to a human user.  However, because 
  there is often no way to know the languages understood by a human 
  user, the string may be of little or no assistance. 
   
  The responseStatus item uses the responseStatus type, which has the 
  following syntax: 
Freeman, Housley, & Malpani                                    [Page 36] 
INTERNET DRAFT                   SCVP                      October 2004 
 
   
    ResponseStatus ::= SEQUENCE { 
      statusCode            CVStatusCode, 
      errorMessage      [0] UTF8String OPTIONAL } 
   
    CVStatusCode ::= ENUMERATED { 
      okay                        (0), 
      skipUnrecognizedItems       (1), 
      tooBusy                    (10), 
      invalidRequest             (11), 
      internalError              (12), 
      badStructure               (20), 
      unsupportedVersion         (21), 
      abortUnrecognizedItems     (22), 
      unrecognizedSigKey         (23), 
      badSignature               (24), 
      unableToDecode             (25), 
      notAuthorized              (26), 
      unsupportedChecks          (27), 
      unsupportedWantBacks       (28), 
      unsupportedSignature       (29), 
      invalidSignature           (30), 
      relayingLoop               (40), 
      unrecognizedValPol         (50), 
      unrecognizedValAlg         (51), 
      fullRequestRefUnsuported   (52), 
      fullPolResponseUnsuported  (53), 
      inhibitPolMapUnsuported    (54), 
      requireExpPolUnsuported    (55), 
      ignoreAnyPolUnsuported     (56), 
      validityTimeUnsuported     (57), 
      unrecognizedUserPolOID     (60), 
      unrecognizedValPolOID      (61), 
      unrecognizedValAlgOID      (62), 
      unrecognizedCritQueryExt   (63), 
      unrecognizedCritRequestExt (64)} 
   
  The CVStatusCode values have the following meaning: 
   
    0  The request was fully processed. 
    1  The request included some unrecognized items; however, 
       processing was able to continue ignoring them. 
    10 Too busy; try again later. 
    11 The server was able to decode the request, but there was 
       some other problem with the request. 
    12 An internal server error occurred. 
    20 The structure of the request was wrong. 
    21 The version of request is not supported by this server. 
    22 The request included unrecognized items, and the server was 
       not able to continue processing. 
    23 The key given in the RequestSignature is not recognized. 
Freeman, Housley, & Malpani                                    [Page 37] 
INTERNET DRAFT                   SCVP                      October 2004 
 
    24 The signature or message authentication code did not match 
       the body of the request. 
    25 The encoding was not understood. 
    26 The request was not authorized. 
    27 The request included unsupported checks items, and the 
       server was not able to continue processing. 
    28 The request included unsupported want back items, and the 
       server was not able to continue processing. 
    29 The server does not support the signature or message 
       authentication code algorithm used by the client to sign the 
       request. 
    30 The server could not validate the client's signature or 
       message authentication code on the request. 
    40 The request was previously relayed by the same server. 
    50 The request contained an unrecognized validation policy 
       reference. 
    51 The request contained an unrecognized validation algorithm 
       OID. 
    52 The server does not support returning the full request in 
       the response. 
    53 The server does not support returning the full validation 
       policy by value in the response. 
    54 The server does not support inhibiting policy mapping. 
    55 The server does not support requiring explicit policy. 
    56 The server does not support ignoring the any-policy 
       certificate policy OID. 
    57 The server only validates requests using current time. 
    60 The certificate policy OID is not recognized. 
    61 The validation policy OID or URI is not recognized. 
    62 The validation algorithm OID is not recognized. 
    63 The query item in the request contains a critical extension 
       whose OID is not recognized. 
    64 The request contains a critical request extension whose OID 
       is not recognized. 
     
  Status codes 0-9 are reserved for codes where the request was 
  processed by the server and therefore MUST be sent in a success 
  response.  Status codes 10 and above indicate an error and MUST 
  therefore be sent in an unsigned error response. 
   
4.5 respValidationPolicy 
   
  The respValidationPolicy item contains either a reference to the 
  full validation policy or the full policy by value used by the 
  server to validate the request.  It MUST be present in success 
  responses and MUST NOT be present in error responses.  The choice 
  between retuning either the policy by reference or by value is 
  controlled by the fullPolicyResponse.  The resultant validation 
  policy is the union of the following: 
   
Freeman, Housley, & Malpani                                    [Page 38] 
INTERNET DRAFT                   SCVP                      October 2004 
 
     1.  Values from the validation policy specified by reference in 
     the request. 
      
     2.. Values from the request. 
      
     3.  Default values used by the server for any parameter not 
     specified by 1 or 2. 
     
   
  The respValidationPolicy syntax is: 
   
  RespValidationPolicy ::= SEQUENCE { 
    validationPolRef           ValidationPolRef, 
    validationPolValues    [0] ValidationPolValues OPTIONAL, 
    userFinalPolicySet     [1] SEQUENCE SIZE (1..MAX) OF  
                                 OBJECT IDENTIFIER OPTIONAL, 
    permittedSubtrees      [2] SEQUENCE SIZE (1..MAX) OF  
                                 GeneralNames OPTIONAL, 
    excludedSubtrees       [3] SEQUENCE SIZE (1..MAX) OF  
                                GeneralNames OPTIONAL } 
     
4.5.1 validationPolRef 
   
  The validationPolRef item is defined in section 3.1.4.1. 
   
4.5.2 validationPolValues 
   
  If a client request the validation policy by values instead of by 
  reference then the server uses the validationPolicyValues structure 
  to communicate the policy values it used to validate the request. 
   
  The validationPolValues syntax is: 
   
  ValidationPolValues ::=SEQUENCE  { 
    validationAlg            ValidationAlg, 
    inhibitPolMap            BOOLEAN, 
    requireExplicitPol       BOOLEAN, 
    inhibitAnyPol            BOOLEAN, 
    isCA                     BOOLEAN, 
    trustAnchors             TrustAnchors, 
    keyUsage             [0] KeyUsage OPTIONAL, 
    extendedKeyUsage     [1] ExtKeyUsageSyntax OPTIONAL, 
    validationPolicyAttr [2] SEQUENCE SIZE (1..MAX) OF Attribute 
                             OPTIONAL } 
   
  The optional keyUsage and ExtendedKeyUsage values are only 
  necessary if there defined in the referenced policy or the client 
  stated some requirements in the request. 
   
  Each of these items is discussed in the following sections. 
   
Freeman, Housley, & Malpani                                    [Page 39] 
INTERNET DRAFT                   SCVP                      October 2004 
 
4.5.2.1 validationAlg 
   
  The validationAlg item is defined in section 3.1.5.2. 
   
4.5.2.2 inhibitPolMap 
   
  The inhibitPolMap item is defined in section 3.1.5.4. 
   
4.5.2.3 requireExplicitPol 
   
  The requireExplicitPol item is defined in section 3.1.5.5. 
   
4.5.2.4 inhibitAnyPol 
   
  The inhibitAnyPol item is defined in section 3.1.5.6. 
   
4.5.2.5 isCA 
   
  The isCA item is defined in section 3.1.5.7. 
   
4.5.2.6 trustAnchors 
   
  The trustAnchors item is defined in section 3.1.5.8. 
   
4.5.2.7 keyUsage 
   
  The optional keyUsage item is defined in [PKIX-1]. 
   
4.5.2.8 extendedKeyUsage 
   
  The optional extendedKeyUsage item is defined in [PKIX-1].]3.1.5.4 
   
4.5.2.9 validationPolicyAttr 
   
  The validationPolicyAtt item MAY contain Attributes.  If present, 
  each attribute in the sequence extends the policy values for the 
  validation policy.  This specification does not define any 
  attributes.  The facility is provided to allow future 
  specifications to extend the SCVP.  The syntax for Attribute is 
  imported from [CMS]. 
   
4.5.3 userFinalPolicySet 
   
  The userFinalPolicySet contains the set of valid policy OIDs from 
  the valid-policy-tree as defined in [PKIX-1] section 6.  The 
  userFinalPolicySet MUST be populated if the valid-policy-tree from 
  the validation is not NULL.  userFinalPolicySet MUST be absent if 
  the valid-policy-tree from the validation is NULL. 
   
4.5.4 permittedSubtrees 
   
Freeman, Housley, & Malpani                                    [Page 40] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  permittedSubtrees is defined in [PKIX-1] section 6.1.2, This field 
  MUST be populated when isCA is TRUE in the request and the 
  validated path contains a non empty permitted-subtrees value. This 
  field MAY be populated for other requests when the validated path 
  contains a non empty permitted-subtrees value. 
   
4.5.5 excludedSubtrees 
   
  excludedSubtrees is defined in [PKIX-1] section 6.1.2, This field 
  MUST be populated when isCA is TRUE in the request and the 
  validated path contains a non empty excluded-subtrees value. This 
  field MAY be populated for other requests when the validated path 
  contains a non empty excluded-subtrees value. 
   
4.5.6 validationPolicyAtt 
   
  The validationPolicyAtt item MAY contain Attributes.  If present, 
  each attribute in the sequence extends the policy values for the 
  validation policy.  This specification does not define any 
  attributes. The facility is provided to allow future specifications 
  to extend the SCVP.  The syntax for Attributes is imported from 
  [CMS]. 
   
4.6 requestRef 
   
  The requestRef allows the SCVP client to identify the request that 
  corresponds to this response from the server.  It associates the 
  response to a particular request using either a hash of the request 
  or a copy of CVRequest from the request.  The hash is calculated as 
  described in [CMS] for SignedData and AuthenticatedData.  That is, 
  it covers the encapsulated content and authenticated attributes but 
  not the unauthenticated attributes. 
   
  The requestRef item does not provide authentication, but the 
  requestRef does allow the client to determine that the request was 
  not maliciously modified. 
   
  The requestRef item allows the client to associate a response with 
  a request.  The requestNonce provides an alternative mechanism for 
  matching requests and responses if the client has selected to 
  include a full response.  When the fullRequest alternative is used, 
  the response provides a single data structure that is suitable for 
  archive of the transaction. 
   
  The requestRef item uses the RequestReference type, which has the 
  following syntax: 
   
    RequestReference ::= CHOICE { 
      requestHash       [0] HashValue, -- hash of CVRequest 
      fullRequest       [1] CVRequest } 
   
Freeman, Housley, & Malpani                                    [Page 41] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  SCVP clients MUST support requestHash, and they MAY support 
  fullRequest.  SCVP servers MUST support using requestHash, and they 
  SHOULD support using fullRequest. 
   
4.6.1 requestHash 
   
  The requestHash item is the hash of the CVRequest.  By default, 
  SHA-1 is used as the one-way hash function, but others can be used.   
  The requestHash item serves two purposes.  First, it allows a 
  client to determine that the request was not maliciously modified.  
  Second, it allows the client to associate a response with a request 
  when using connectionless protocols.  The requestNonce provides an 
  alternative mechanism for matching requests and responses. 
   
  The requestHash item uses the HashValue type, which has the 
  following syntax: 
   
    HashValue ::= SEQUENCE { 
      algorithm             AlgorithmIdentifier DEFAULT { sha-1 }, 
      value                 OCTET STRING } 
   
    sha-1 OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) 
        oiw(14) secsig(3) algorithm(2) 26 } 
   
  The algorithm identifier for SHA-1 is imported from [PKIX-ALG].  It 
  is repeated here for convenience. 
   
4.6.2 fullRequest 
   
  Like requestHash, the fullRequest alternative allows a client to 
  determine that the request was not maliciously modified.  It also 
  provides a single data structure that is suitable for archive of 
  the transaction. 
   
  The fullRequest item uses the CVRequest type.  The syntax and 
  semantics of the CVRequest type are described in section 3. 
   
4.7 requestorRef 
   
  The optional requestorRef item is used by the client to identify 
  the original requestor in cases where SCVP relay is used.  The 
  value is only of local significance to the client.  If the SCVP 
  client includes a requestorRef value in the request, then the SCVP 
  server MUST return the same value if the server is generating a, 
  non-cached response. 
   
4.8 requestorName 
   
  The optional requestorName item is used by the server with signed 
  requests to return the identity of the client in the response.  
Freeman, Housley, & Malpani                                    [Page 42] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  Mechanisms for matching this identifier with the authenticated 
  identity are a matter of local server policy. 
   
  In the case of non-cached responses to signed requests, the SCVP 
  server MUST return a requestor name.  A server SHOULD copy the 
  selected identifier from a certificate or other credential used to 
  authenticate the request.  A SCVP server MAY use a client 
  identifier from an out-of-band mechanism or omit the identifier 
  from the response. 
   
  In the case of cached responses to signed requests, the 
  RequestorName MAY be present in the response. 
   
  SCVP server that supports signed requests MUST support this item. 
   
4.9 responder 
   
  The optional responder item is used to identify the server.  The 
  value chosen is only of local significance to the SCVP server.  The 
  responder item MUST be included if the request included a 
  requestorRef item. 
   
  The responder item MUST be an octet string.  No provisions are made 
  to ensure uniqueness of the requestor octet string; however, all of 
  the octets MUST have values other than zero. 
   
4.10 replyObjects 
   
  The replyObjects item returns requested objects to the SCVP client, 
  each of which tells the client about a single certificate from the 
  request.  The replyObjects item MUST be present in the response, 
  unless the response is reporting an error.  The CertReply item MUST 
  contain cert, replyStatus, replyValTime, replyChecks, 
  replyWantBacks, and valdationPolicy items; and the CertReply item 
  MAY contain the nextUpdate and certReplyExtensions items. 
   
  A success response MUST contain one CertReply for each Query item 
  in the request.  The order is important.  The first CertReply in 
  the sequence MUST correspond to the first Query item in the 
  request; the second CertReply in the sequence MUST correspond to 
  the second Query item in the request; and so on. 
   
  The checks item in the request determines the content of the 
  replyChecks item in the response.  The wantBack item in the request 
  determines the content of the replyWantBacks item in the response.  
  The queryExtensions items in the request controls the absence or 
  the presence and content of the certReplyExtensions item in the 
  response. 
   
  The replyObjects item uses the ReplyObjects type, which has the 
  following syntax: 
Freeman, Housley, & Malpani                                    [Page 43] 
INTERNET DRAFT                   SCVP                      October 2004 
 
   
    ReplyObjects ::= SEQUENCE SIZE (1..MAX) OF CertReply 
   
    CertReply ::= SEQUENCE { 
      cert                       CertReference, 
      replyStatus                ReplyStatus, 
      replyValTime               GeneralizedTime, 
      replyChecks                ReplyChecks, 
      replyWantBacks             ReplyWantBacks, 
      validationErrors       [0] SEQUENCE SIZE (1..MAX) OF  
                                   OBJECT IDENTIFIER OPTIONAL, 
      nextUpdate             [1] GeneralizedTime OPTIONAL, 
      certReplyExtensions    [2] Extensions OPTIONAL } 
   
4.10.1 cert 
   
  The cert item contains either the public key certificate or the 
  attribute certificate or a reference to the certificate about which 
  the client is requesting information. 
   
  The ASN.1 definition of Certificate is imported from [PKIX-1]; and 
  the definition of AttributeCertificate is imported from [PKIX-AC]. 
   
4.10.2 replyStatus 
   
  The replyStatus item gives status information to the client about 
  the request for the specific certificate.  Note that the respStatus 
  item is different than the replyStatus item.  The respStatus item 
  is the status of the whole request, while the replyStatus item is 
  the status for the individual query item. 
   
  The replyStatus item uses the ReplyStatus type, which has the 
  following syntax: 
   
    ReplyStatus ::= ENUMERATED { 
        success                  (0), 
        malformedPKC             (1), 
        malformedAC              (2), 
        unavailableValidityTime  (3), 
        referenceCertHashFail    (4), 
        certPathConstructFail    (5), 
        certPathNotValid         (6), 
        certPathNotValidNow      (7) } 
   
  The meaning of the various ReplyStatus values are: 
   
    0  Success: a definitive answer follows. 
    1  Failure: the public key certificate was malformed. 
    2  Failure: the attribute certificate was malformed. 
    3  Failure: historical data for the requested validity time is 
       not available. 
Freeman, Housley, & Malpani                                    [Page 44] 
INTERNET DRAFT                   SCVP                      October 2004 
 
    4  Failure: the referenced certificate policy OID is not 
       recognized. 
    5  Failure: no certification path could be constructed. 
    6  Failure: the constructed certification path is invalid. 
    7  Failure: the constructed certification path is invalid, but 
       a query at a later time may be successful. 
   
  Codes 1 and 2 are used to tell the client that the request was 
  properly formed, but the certificate in question was not.  This is 
  especially useful to clients that do not parse certificates. 
   
4.10.3 replyValTime 
   
  The replyValTime item tells the time at which the information in 
  the CertReply was correct.  The replyValTime item represents the 
  date and time in UTC, using GeneralizedTime type.  The encoding 
  rules for GeneralizedTime in section 3.1.8 MUST be used. 
   
  Within the request, the optional validityTime item tells the date 
  and time relative to which the SCVP client wants the server to 
  perform the checks.  If the validityTime is not present, the server 
  MUST respond as if the client provided the date and time at which 
  the server processes the request. 
   
  The information in the CertReply item MUST be formatted as if the 
  server created this portion of the response at the time indicated 
  in the validityTime item of the query.  However, if the server does 
  not have appropriate historical information, the server MAY either 
  return an error or return information for a later time. 
   
4.10.4 replyChecks 
   
  The replyChecks contains the responses to the checks item in the 
  query.  The replyChecks item repeats the object identifier (OID) 
  from the query and an integer.  The value of the integer indicates 
  whether the requested check was successful.  The OIDs in the checks 
  item of the query are used to identify the corresponding 
  replyChecks values.  The OIDs in the replyChecks item MUST match 
  the OIDs in the checks item in the request. 
   
  The replyChecks item uses the ReplyChecks type, which has the 
  following syntax: 
   
    ReplyChecks ::= SEQUENCE OF ReplyCheck 
   
    ReplyCheck ::= SEQUENCE { 
      check                      OBJECT IDENTIFIER, 
      status                     INTEGER } 
   
  The status value for public key certification path building to a 
  trusted root, { id-stc 1 }, can be one of the following: 
Freeman, Housley, & Malpani                                    [Page 45] 
INTERNET DRAFT                   SCVP                      October 2004 
 
   
      0: Built a path 
      1: Could not build a path 
   
  The status value for public key certification path building to a 
  trusted root along with simple validation processing, { id-stc 2 }, 
  can be one of the following: 
   
      0: Valid 
      1: Not valid 
   
  The status value for public key certification path building to a 
  trusted root along with complete status checking, { id-stc 3 }, can 
  be one of the following: 
   
      0: Good 
      1: Revoked 
      2: Revocation Offline 
      3: Revocation Unavailable 
   
  Revocation offline means that the server or distribution point for 
  the revocation information was connected to successfully without a 
  network error but either no data returned or if data was returned 
  it was stale. Revocation unavailable means that a network error was 
  returned when an attempt was made to reach the server or 
  distribution point. 
   
  The status value for AC issuer certification path building to a 
  trusted root, { id-stc 4 }, can be one of the following: 
   
      0: Built a path 
      1: Could not build a path 
   
  The status value for AC issuer certification path building to a 
  trusted root along with simple validation processing, { id-stc 5 }, 
  can be one of the following: 
   
      0: Valid 
      1: Not valid 
   
  The status value for AC issuer certification path building to a 
  trusted root along with complete status checking, { id-stc 6 }, can 
  be one of the following: 
   
      0: Good 
      1: Revoked 
      2: Revocation Offline 
      3: Revocation Unavailable 
   
  The status value for revocation status checking of an AC as well as 
  AC issuer certification path building to a trusted root along with 
Freeman, Housley, & Malpani                                    [Page 46] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  complete status checking, { id-stc 7 }, can be one of the 
  following: 
   
      0: Good 
      1: Revoked 
      2: Offline 
      3: Unavailable 
   
4.10.5 replyWantBack 
   
  The replyWantBack contains the responses to the wantBack item in 
  the request.  The replyWantBack item includes the object identifier 
  (OID) from the wantBack item in the request and an octet string.  
  Within the octet string is the requested value.  The OIDs in the 
  wantBack item in the request are used to identify the corresponding 
  reply value.  The OIDs in the replyWantBack item MUST match the 
  OIDs in the wantBack item in the request. 
   
  The replyWantBack item uses the ReplyWantBack type, which has the 
  following syntax: 
   
    ReplyWantBacks ::= SEQUENCE OF ReplyWantBack 
   
    ReplyWantBack::= SEQUENCE { 
      wb                         OBJECT IDENTIFIER, 
      value                      OCTET STRING } 
   
  The octet string value for the certification path used to verify 
  the certificate in the request, { id-swb 1 }, contains the 
  CertBundle type.  The syntax and semantics of the CertBundle type 
  are described in section3.1.9. 
   
  The octet string value for the proof of revocation status, { id-swb 
  2 }, contains the RevocationInfos type.  The syntax and semantics 
  of the RevocationInfo type are described in section 3.1.10. 
   
  The octet string value for the public key certificate status, { id-
  swb 3 }, contains an ASN.1 BOOLEAN type.  The value will be TRUE if 
  the certificate is valid, and the value will be FALSE if the 
  certificate is not valid. 
   
  The octet string value for the public key information, { id-swb 4 }, 
  contains the SubjectPublicKeyInfo type.  The syntax and semantics 
  of the SubjectPublicKeyInfo type are described in [PKIX-1]. 
   
  The octet string value for the AC issuer certification path used to 
  verify the certificate in the request, { id-swb 5 }, contains the 
  CertBundle type.  The syntax and semantics of the CertBundle type 
  are described in section 3.1.9. 
   
Freeman, Housley, & Malpani                                    [Page 47] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  The octet string value for the proof of revocation status of the AC 
  issuer certification path, { id-swb 6 }, contains the 
  RevocationInfo type.  The syntax and semantics of the 
  RevocationInfo type are described in section 3.1.10. 
   
  The octet string value for the proof of revocation status of the 
  attribute certificate, { id-swb 7 }, contains the RevocationInfo 
  type.  The syntax and semantics of the RevocationInfo type are 
  described in section 3.1.10. 
   
  The octet string value for the attribute certificate status, { id-
  swb 8 }, contains an ASN.1 BOOLEAN type.  The value will be TRUE if 
  the certificate is valid, and the value will be FALSE if the 
  certificate is not valid. 
   
4.10.6 validationAlg 
   
  The validationAlg item indicates the validation algorithm used by 
  the SCVP server.   The server MUST include the validation algorithm 
  that was used.    
   
  The syntax and semantics of the validationAlg item are descried in 
  section 3.1.5.2 
4.10.7 validationErrors 
   
  The validationErrors item  MUST only be present in failure 
  responses. It MUST contains one or more OID representing the why 
  the validation failed.  
   
4.10.8 nextUpdate 
   
  The nextUpdate item tells the time at which the server expects a 
  refresh of information regarding the validity of the certificate to 
  become available.  The nextUpdate is especially interesting if the 
  certificate revocation status information is not available or the 
  certificate is suspended.  The nextUpdate item represents the date 
  and time in UTC, using the GeneralizedTime type.  The encoding 
  rules for GeneralizedTime in section 3.1.8 MUST be used. 
   
4.10.9 certReplyExtensions 
   
  The certReplyExtensions contains the responses to the 
  queryExtension item in the request.  The certReplyExtensions item 
  uses the Extensions type defined in [PKIX-1].  The object 
  identifiers (OIDs) in the queryExtension item in the request are 
  used to identify the corresponding reply value.  The 
  certReplyExtensions item, when present, contains a sequence of 
  Extension items, each of which contains an extnID item, a critical 
  item, and an extnValue item. 
   
Freeman, Housley, & Malpani                                    [Page 48] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  The extnID item is an identifier for the extension.  It contains 
  the OID that names the extension, and it MUST match one of the OIDs 
  in the queryExtension item in the request. 
   
  The critical item is a BOOLEAN, and it MUST be set to FALSE. 
  The extnValue item contains an OCTET STRING.  Within the OCTET 
  STRING is the extension value.  An ASN.1 type is specified for each 
  extension, and identified by extnID. 
   
4.11 responseNonce 
   
  The responseNonce item contains an identifier to binds the request 
  to the response.   
   
     If the client includes a requestNonce value in the request and 
     the server is generating a specific non-cached response to the 
     request then the server MUST return the same value in the 
     response.  
      
     If the server is using a cached response to the request then it 
     MUST omit the responseNonce field.  
      
     If the server is returning a specific non-cached response to a 
     request without a once, then the server MUST use value of the 
     message-digest attribute in the signedAttrs within SignerInfo of 
     the request as the value in the responseNonce field. 
   
  The requestNonce item uses the octet string type. 
   
  Client SHOULD support and servers MUST support responseNonce. 
   
4.12 serverContextInfo 
   
  The serverContextInfo item in a response is a mechanism for the 
  server to pass some opaque context information to the client.  If 
  the client does not like the certification path retuned, it can 
  make a new query and pass along this context information. 
   
  Section 3.1.6 contains information about the client usage of this 
  item. 
   
  The context information is opaque to the client, but it provides 
  information to the server that ensures that a different 
  certification path will be returned (if another one can be found).  
  The context information could indicate state on the server or it 
  could contain a sequence of hashes of certification paths that have 
  already been returned to the client.  The protocol does not dictate 
  any structure or requirements for this item.  However, implementers 
  should review the Security Considerations section of this document 
  before selecting a structure. 
   
Freeman, Housley, & Malpani                                    [Page 49] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  Servers that are incapable of returning additional paths MUST NOT 
  include the serverContextInfo item in the response. 
   
4.13 respExtensions 
   
  The respExtensions item MAY contain Extensions.  If present, each 
  Extension in the sequence extends the response.  This specification 
  does not define any extensions. The facility is provided to allow 
  future specifications to extend the SCVP.  The syntax for 
  Extensions is imported from [PKIX-1].  The respExtensions item, 
  when present, contains a sequence of Extension items, each of which 
  contains an extnID item, a critical item, and an extnValue item. 
   
  The extnID item is an identifier for the extension.  It contains 
  the object identifier (OID) that names the extension. 
  The critical item is a BOOLEAN.  Each extension is designated as 
  either critical (with a value of TRUE) or non-critical (with a 
  value of FALSE).  An SCVP client MUST reject the response if it 
  encounters a critical extension it does not recognize; however, a 
  non-critical extension MAY be ignored if it is not recognized. 
   
  The extnValue item contains an OCTET STRING.  Within the OCTET 
  STRING is the extension value.  An ASN.1 type is specified for each 
  extension, and identified by extnID. 
 
4.14 SCVP Response Validation 
   
  There are two mechanisms for validation of SCVP responses, one 
  based on the clients knowledge of a specific SCVP server key and 
  the other based on validation of the certificate which signed the 
  SCVP response 
   
4.14.1 Simple Key Validation 
   
  Simple key validation method is where the SCVP client has a local 
  policy of one or more SCVP server keys which directly identify the 
  set of valid SCVP servers. Mechanisms for storage of server keys or 
  identifiers is a local matter. For example, a client could store 
  cryptographic hashes of public keys used to verify signedData 
  responses. Alternatively, a client could store shared symmetric 
  keys used to HMAC authenticatedData responses. 
 
  Simple key validation MUST be used by SCVP clients that cannot 
  validate PKIX-1 certificates and are therefore making delegated 
  path validation requests to the SCVP server[RQTMS]. It is a matter 
  of local policy with these clients whether to use signedData or 
  authenticatedData. Simple key validation MAY be used by other SCVP 
  clients for other reasons. 
 
   
Freeman, Housley, & Malpani                                    [Page 50] 
INTERNET DRAFT                   SCVP                      October 2004 
 
4.14.2 SCVP Server Certificate Validation 
   
  It is a matter of local policy what validation policy is used by 
  the client when validating responses. When validating signed SCVP 
  responses, SCVP clients SHOULD use the validation algorithm defined 
  in section 6 of PKIX-1. 
   
  If the certificate used to sign the validation policy responses and 
  signedData validation responses contains the key usage extension 
  [PKIX-1 section 4.2.1.3] it MUST have either the digital signature 
  or the non-repudiation bits set or both.  
   
  If the certificate for authenticatedData validation responses 
  contains the key usage extension it MUST have the key agreement bit 
  set.  
   
  If the certificates used on a validation policy response or a 
  validation response contains the extended Key Usage extension 
  [PKIX-1 section 4.2.1.13] it MUST contain the following OID 
   
  id-kp-scvpServer             OBJECT IDENTIFIER ::= { id-kp 15 } 
   
5 Server Policy Request 
   
  A SCVP client uses the valPolRequest item to request the list of 
  validation policies supported by the SCVP server.  When a 
  valPolRequest is encapsulated in a MIME body part, it MUST be 
  carried in an application/vp-request MIME body part. 
   
  The request consists of a valPolRequest encapsulated in a 
  ContentInfo.  The request is not signed by the client. 
   
    ContentInfo { 
      contentType        id-ct-scvp-valPolRequest, 
                                    -- (1.2.840.113549.1.9.16.1.12) 
      content            valPolRequest } 
   
  The valPolRequest type has the following syntax: 
   
  VPRequest ::= SEQUENCE { 
    vpRequestVersion           INTEGER, 
    requestNonce               OCTET STRING} 
   
5.1 vpRequestVersion 
   
  The vpRequestVersion item is described in section 3.1.requestNonce 
   
5.2 requestNonce 
   
  The requestNonce item contains a request identifier generated by 
  the SCVP client.  If the server returns a specific response it MUST 
Freeman, Housley, & Malpani                                    [Page 51] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  include the requestNonce from the request in the response, but MAY 
  return a cached response which MUST NOT include a requestNonce.  
   
6 Validation Policy Response  
   
  In response to a valPolRequest, the SCVP server provides a 
  valPolResponse. The valPolResponse MAY not unique to any 
  valPolRequest, so may be reused by the server in response to 
  multiple vbalPolRequests. The valPolResponse also has an indication 
  of how frequently the valPolResponse may be reissued. When a 
  PolResponse is encapsulated in a MIME body part, it MUST be carried 
  in an application/vp-response MIME body part. 
   
  The response consists of a valPolResponse encapsulated in a 
  ContentInfo.  The response MUST be signed by the server using its 
  digital signature certificate. 
   
    ContentInfo { 
      contentType        id-ct-scvp-valPolResponse, 
                                    -- (1.2.840.113549.1.9.16.1.13) 
      content            valPolResponse } 
   
  The valPolResponse type has the following syntax: 
   
    VPResponse ::= SEQUENCE { 
      vpResponseVersion          INTEGER, 
      maxCVResponseVersion       INTEGER, 
      maxVPResponseVersion       INTEGER, 
      defaultPolicyID            INTEGER, 
      thisUpdate                 GeneralizedTime, 
      nextUpdate                 GeneralizedTime OPTIONAL, 
      validationPolices          SEQUENCE OF ValidationPolRef, 
      validationAlgs             SEQUENCE OF OBJECT IDENTIFIER, 
      authPolicies               SEQUENCE OF AuthPolicy, 
      responseTypes              ResponseTypes, 
      defaultPolicyValues        ValidationPolValues, 
      dhPublicKeyInfo            SEQUENCE OF DHPublicKeyInfo, 
      clockSkew              [0] INTEGER OPTIONAL, 
      requestNonce           [1] OCTET STRING OPTIONAL } 
   
  ResponseTypes  ::= ENUMERATED { 
    cached-only                (0), 
    specific-signed-only       (1), 
    cached-and-specific-signed (2)} 
   
   
  SCVP clients that support validation policy requests MUST support  
  SCVP responses. SCVP servers MUST support validation policy 
  responses. 
   
Freeman, Housley, & Malpani                                    [Page 52] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  SCVP servers MUST support cached policy responses and MAY support 
  specific responses to policy request. 
   
6.1 vpResponseVersion 
   
  The syntax and semantics of the vpResponseVersion item is described 
  in section 3.1. The vpResponseVersion used MUST be the same as the 
  vpRequestVersion unless the client has used a value grater than the 
  values the server supports. If the client submits a 
  vpRequestVersion grater then the version supported by the server, 
  it MUST return an a vpResponseVersion using the highest version 
  number the server supports as the version number. 
   
6.2 maxCVRequestVersion 
   
  The maxCVRequestVersion defines the maximum version number for CV 
  requests that the server supports 
   
6.3 maxVPRequestVersion 
   
  The maxVPRequestVersion defines the maximum version number for VP 
  requests that the server supports 
   
   
6.4 defaultPolicyID 
   
  An integer that uniquely represents the version of the default 
  validation policy as represented by the trustAnchors, 
  validationPolicy, validationAlg, authPolicies, clockSkew and 
  authDataCerts. If any of these values change, the server MUST 
  create a new PolResponse with a new defaultPolicyID. If the policy 
  and therefore the defaultPolicyID has not changed, then the server 
  may reused defaultPolicyID across multiple PolResponse messages. 
  However if the server having changed the policy, then reverts to an 
  earlier policy, the server MUST NOT revert the policy ID as well, 
  but MUST select another unique value.  
   
6.5 thisUpdate 
   
  This field indicates the signing date & time of this policy 
  response.  
   
  GeneralizedTime values MUST be expressed Greenwich Mean Time (Zulu) 
  and interpreted as defined in section 3.1.8. 
   
6.6 nextUpdate 
   
  This optional field indicates the expected publication date & time 
  of the next policy response.  
   
Freeman, Housley, & Malpani                                    [Page 53] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  If this field is omitted it indicates a non-cached response 
  generated in response to a specific request, then the polResponse 
  is bound to a specific request. If this filed is omitted the 
  requestNonce files MUST be present and the value copied from the 
  request. 
   
  If this field is preset it indicates a non-cached response, then 
  the polResponse is not bound to a specific request. A SCVP server 
  MUST periodically generate the new response as defined by the next 
  update time and use the same polResponse used for multiple requests. 
   
  It is a matter of local server policy to return a cached or non-
  cached specific response. 
   
  GeneralizedTime values MUST be expressed Greenwich Mean Time (Zulu) 
  as specified in section 3.1.8. 
   
6.7 trustAnchors 
   
  The trustAnchors item specifies the default trust anchors that the 
  SCVP server will use if the request references a validation policy 
  which does not define any trust anchors and no trust anchors are 
  present in the request.  
   
6.8 validationPolicies 
   
  The validationPolicies item contains a sequence of ValidationPolRef 
  representing the validation policies supported by the server. It is 
  a matter of local policy if the server whishes to processes 
  requests using the default validation policy, and if it does not, 
  then it MUST NOT include the id-svp-defaultValPolicy in this list. 
   
6.9 validationAlgs 
   
  The validationAlgs item contains a sequence of OIDs.  Each OID 
  identifies a validation algorithm supported by the server. 
   
6.10 authPolicies 
   
  The authPolicies item contains a sequence of policy references for 
  authenticating to the SCVP server. 
   
  The reference to the authentication policy can be either an OID 
  where the client and server have agreed the OID to represent a 
  authentication policy or a URI where the URI points to a human 
  readable definition of the policy. The list of policies is intended 
  to document to the client if authentication is required for some 
  requests and if so how. 
   
  AuthPolicy ::= CHOICE { 
      authPolRefByOID     [0] OBJECT IDENTIFIER, 
Freeman, Housley, & Malpani                                    [Page 54] 
INTERNET DRAFT                   SCVP                      October 2004 
 
      authPolRefByURI     [1] IA5String} 
   
6.11 responseTypes 
   
  Response types allows the server to publish the range of response 
  types it supports. Cache only means the server will only return 
  cached responses to requests. Unique signed responses means the 
  server will return a specific response to the request i.e. 
  containing the requestors nonce. Both means the server will return 
  either depending on the request. 
   
6.12 dhPublicKeyInfo 
   
  The dhPublicKeyInfo is a  sequence of one or more Diffie-Hellman 
  public keys and associated parameters. It is used by clients making 
  authenticatedData requests to the server. dhPublicKeyInfo has the 
  following structure: 
   
  DHPublicKeyInfo ::= SEQUENCE { 
    dhPublicKey                DHPublicKey, 
    domainParameters           DomainParameters} 
   
  DHPublicKeyInformation MUST be supported by a SCVP server. SCVP 
  serverS MUST support a 1536-bit MODP group key (group 5) as defined 
  in [IKE-GROUPS]. SCVP servers MAY support other group keys as 
  defined in [IKE] or [IKE-GROUPS]. 
   
6.13 clockSkew 
   
  The clockSkew item is the number of minutes the server will allow 
  for clock skew. If absent the server MUST use the default value of 
  10 minutes. 
   
6.14 defaultValPolicy 
   
  This is the default validation policy used by the server. It 
  contains a VaidationPolValues which is defined in section 4.5 A 
  server will use these default values when 
   
     The request references the default validation policy and the 
     client does not override the defaults vaues by supplying other 
     values in the request 
      
     The request references a non-default validation policy, which 
     does not define every parameter necessary as defined by the 
     validation algorithm and the client further omits these missing 
     values from request. The server MUST use its default value for 
     any parameter not defined by the referenced non-default policy, 
     and not specified in the request.  
      
Freeman, Housley, & Malpani                                    [Page 55] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  This allows the client to optimize the request by omitting 
  parameters which match the server default values. 
   
7 SCVP Server Relay 
   
  In some network environments, especially ones that include 
  firewalls, an SCVP server might not be able to obtain all of the 
  information that it needs to process a request.  However, the 
  server might be configured to use the services of one or more other 
  SCVP servers to fulfill all requests.  In such cases, the SCVP 
  client is unaware that the initial SCVP server is using the 
  services of other SCVP servers.  The initial SCVP server acts as a 
  client to another SCVP server.  Unlike the original client, the 
  SCVP server is expected to have moderate computing and memory 
  resources.   This section describes SCVP server-to-SCVP server 
  exchanges.  This section does not impose any requirements on SCVP 
  clients that are not also SCVP servers.  Further, this section does 
  not impose any requirements on SCVP servers that do not relay 
  requests to other SCVP servers. 
   
  When one SCVP server relays a request to another server, in an 
  incorrectly configured system of servers, it is possible that the 
  same request will be relayed back again.  Any SCVP server that 
  relays requests MUST implement the conventions described in this 
  section to detect and break loops. 
   
  When an SCVP server relays a request, the request MUST include the 
  requestor item.  If the request to be relayed already contains a 
  requestor item, then server-generated request MUST contain a 
  requestor item constructed from this value followed by a zero octet 
  followed by the identifier of the SCVP server.  If the request to 
  be relayed does not contain a requestor item, then server-generated 
  request MUST contain only the identifier of the SCVP server. 
   
  When an SVCP server receives a request that contains a requestor 
  item, the server MUST check for its own identifier.  The identifier 
  could be located at the beginning of the octet string followed by a 
  zero octet, or it could be located between two zero octets.  If the 
  server discovers its own identifier in the requestor item, it MUST 
  respond with an error, setting the cvResponseStatus to 40. 
   
8 SCVP ASN.1 Module 
   
  This section defines the syntax for SCVP request-response pairs.  
  The semantics for the messages are defined in sections 3, 4, 5, and 
  6.  The SCVP ASN.1 module follows. 
   
  SCVP 
   
  { iso(1) identified-organization(3) dod(6) internet(1)   
  security(5) mechanisms(5) pkix(7) id-mod(0) 21 } 
Freeman, Housley, & Malpani                                    [Page 56] 
INTERNET DRAFT                   SCVP                      October 2004 
 
   
  DEFINITIONS IMPLICIT TAGS ::= BEGIN 
   
  IMPORTS 
   
    DHPublicKey, DomainParameters 
      FROM PKIX1Algorithms88  RFC 3279 
      { iso(1) identified-organization(3) 
      dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) 
      id-mod-pkix1-algorithms(17) 
   
  AlgorithmIdentifier, Certificate, Extensions, GeneralNames, 
    UTF8String, CertificateList, keyPurposeId 
      FROM PKIX1Explicit88 -- RFC 3280 
      { iso(1) identified-organization(3) dod(6) internet(1) 
        security(5) mechanisms(5) pkix(7) id-mod(0) 18 } 
   
    AttributeCertificate 
      FROM PKIXAttributeCertificate -- RFC 3281 
      { iso(1) identified-organization(3) dod(6) internet(1) 
        security(5) mechanisms(5) pkix(7) id-mod(0) 12 } 
   
    ESSCertID     FROM ExtendedSecurityServices -- RFC 2634 
      { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 
        pkcs-9(9) smime(16) modules(0) 2 } ; 
   
  -- SCVP Certificate Validation Request 
   
   id-ct OBJECT IDENTIFIER ::= { iso(1) member-body(2) 
            us(840) rsadsi(113549) pkcs(1) pkcs9(9) 
            id-smime(16) 1 } 
   
  id-ct-scvp-certValRequest OBJECT IDENTIFIER ::= { id-ct 10 } 
   
  CVRequest ::= SEQUENCE { 
    cvRequestVersion           INTEGER, 
    query                      Query, 
    requestorRef           [0] SEQUENCE SIZE (1..MAX) OF OCTET STRING 
                                 OPTIONAL, 
    requestNonce           [1] OCTET STRING OPTIONAL, 
    reqestExtensions       [2] Extensions OPTIONAL, 
    dhPublicKey            [3] DHPublicKey OPTIONAL} 
   
   
  Query ::= SEQUENCE { 
    queriedCerts               SEQUENCE SIZE (1..MAX) OF 
                                 CertReference, 
    checks                     CertChecks, 
    wantBack                   WantBack, 
    validationPolicy           ValidationPolicy, 
    responseFlags              ResponseFlags OPTIONAL, 
Freeman, Housley, & Malpani                                    [Page 57] 
INTERNET DRAFT                   SCVP                      October 2004 
 
    serverContextInfo      [0] OCTET STRING OPTIONAL, 
    validationTime         [1] GeneralizedTime OPTIONAL, 
    intermediateCerts      [2] CertBundle OPTIONAL, 
    revInfos               [3] RevocationInfos OPTIONAL, 
    producedAt             [4] GeneralizedTime OPTIONAL, 
    queryExtensions        [5] Extensions OPTIONAL } 
   
  CertReference::= CHOICE { 
    pkc                        PKCReference, 
    ac                         ACReference } 
   
  PKCReference ::= CHOICE { 
    cert                   [0] Certificate, 
    pkcRef                 [1] ESSCertID } 
   
  ACReference ::= CHOICE { 
    attrCert               [2] AttributeCertificate, 
    acRef                  [3] ESSCertID } 
   
  ValidationPolicy ::= SEQUENCE { 
    validationPolRef           ValidationPolRef, 
    validationAlg          [0] ValidationAlg OPTIONAL, 
    userPolicySet          [1] SEQUENCE SIZE (1..MAX) OF OBJECT 
                                 IDENTIFIER OPTIONAL, 
    inhibitPolicyMapping   [2] BOOLEAN OPTIONAL, 
    requireExplicitPolicy  [3] BOOLEAN OPTIONAL, 
    inhibitAnyPolicy       [4] BOOLEAN OPTIONAL, 
    isCA                   [5] BOOLEAN OPTIONAL, 
    trustAnchors           [6] TrustAnchors OPTIONAL, 
    keyUsages              [7] SEQUENCE SIZE (1..MAX) OF KeyUsage 
                                 OPTIONAL, 
    extendedKeyUsages      [8] ExtKeyUsageSyntax OPTIONAL} 
 
   
  CertChecks ::= SEQUENCE SIZE (1..MAX) OF OBJECT IDENTIFIER 
   
  WantBack ::= SEQUENCE SIZE (1..MAX) OF OBJECT IDENTIFIER 
   
  ValidationPolRef ::= CHOICE { 
    valPolRefByOID         [0] OBJECT IDENTIFIER, 
    valPolRefByURI         [1] IA5String} 
   
  ValidationAlg ::= SEQUENCE { 
    valAlgId                   OBJECT IDENTIFIER, 
    parameters                 ANY DEFINED BY valAlgId OPTIONAL } 
   
  nameValidationAlg ::= SEQUENCE { 
    keyPurposeId               OBJECT IDENTIFIER, 
    validationName             GeneralNames } 
   
  TrustAnchors ::= SEQUENCE SIZE (1..MAX) OF PKCReference 
Freeman, Housley, & Malpani                                    [Page 58] 
INTERNET DRAFT                   SCVP                      October 2004 
 
   
  ResponseFlags ::= SEQUENCE { 
    responseRefHash            BOOLEAN DEFAULT TRUE, 
    responseValidationPolByRef BOOLEAN DEFAULT TRUE, 
    signResponse               BOOLEAN DEFAULT TRUE } 
   
  CertBundle ::= SEQUENCE SIZE (1..MAX) OF PKCReference 
   
  RevocationInfos ::= SEQUENCE SIZE (1..MAX) OF RevocationInfo 
   
  RevocationInfo ::= CHOICE { 
    crl                    [0] CertificateList, 
    delta-crl              [1] CertificateList, 
    ocsp                   [2] OCSPResponse, 
    other                  [3] OtherRevInfo } 
   
  OtherRevInfo ::= SEQUENCE { 
    riType                     OBJECT IDENTIFIER, 
    riValue                    ANY DEFINED BY riType } 
   
   
   -- SCVP Certificate Validation Response 
   
  id-ct-scvp-certValResponse OBJECT IDENTIFIER ::= { id-ct 11 } 
   
  CVResponse ::= SEQUENCE { 
    cvResponseVersion          cvResponseVersion        INTEGER, 
    policyID                   INTEGER, 
    producedAt                 GeneralizedTime, 
    responseStatus             ResponseStatus, 
    respValidationPolicy   [0] RespValPolicy OPTIONAL, 
    requestRef             [1] RequestReference OPTIONAL, 
    requestorRef           [2] OCTET STRING OPTIONAL, 
    requestorName          [3] GeneralNames OPTIONAL, 
    responder              [4] OCTET STRING OPTIONAL, 
    replyObjects           [5] ReplyObjects OPTIONAL, 
    respNonce              [6] OCTET STRING OPTIONAL, 
    serverContextInfo      [7] OCTET STRING OPTIONAL, 
    cvResponseExtensions   [8] Extensions OPTIONAL } 
   
  responseStatus ::= SEQUENCE { 
      statusCode               CVStatusCode, 
      errorMessage         [0] UTF8String OPTIONAL } 
   
  CVStatusCode ::= ENUMERATED { 
      okay                        (0), 
      skipUnrecognizedItems       (1), 
      tooBusy                    (10), 
      invalidREquest             (11), 
      internalError              (12), 
      badStructure               (20), 
Freeman, Housley, & Malpani                                    [Page 59] 
INTERNET DRAFT                   SCVP                      October 2004 
 
      unsupportedVersion         (21), 
      abortUnrecognizedItems     (22), 
      unrecognizedSigKey         (23), 
      badSignature               (24), 
      unableToDecode             (25), 
      notAuthorized              (26), 
      unsupportedChecks          (27), 
      unsupportedWantBacks       (28), 
      unsupportedSignature       (29), 
      invalidSignature           (30), 
      relayingLoop               (40), 
      unrecognizedValPol         (50), 
      unrecognizedValAlg         (51), 
      fullRequestRefUnsuported   (52}, 
      fullPolResponseUnsuported  (53), 
      inhibitPolMapUnsuported    (54), 
      requireExpPolUnsuported    (55), 
      ignoreAnyPolUnsuported     (56), 
      validityTimeUnsuported     (57), 
      unrecognizedUserPolOID     (60), 
      unrecognizedValPolOID      (61), 
      unrecognizedValAlgOID      (62), 
      unrecognizedCritQueryExt   (63), 
      unrecognizedCriticalExt    (64)} 
   
  RespValidationPolicy ::= SEQUENCE { 
    validationPolRef           ValidationPolRef, 
    validationPolValues    [0] ValidationPolValues OPTIONAL  
    userFinalPolicySet     [1] SEQUENCE SIZE (1..MAX) OF  
                                 OBJECT IDENTIFIER OPTIONAL 
    permittedSubtrees      [2] SEQUENCE SIZE (1..MAX) OF  
                                 GeneralNames OPTIONAL 
    excludedSubtrees       [3] SEQUENCE SIZE (1..MAX) OF  
                                GeneralNames OPTIONAL} 
     
  ValidationPolValues ::=SEQUENCE  { 
    validationAlg              ValidationAlg, 
    inhibitPolMap              BOOLEAN DEFAULT FALSE, 
    requireExplicitPol         BOOLEAN DEFAULT FALSE, 
    inhibitAnyPol              BOOLEAN DEFAULT FALSE, 
    isCA                       BOOLEAN DEFAULT FALSE, 
    trustAnchors               TrustAnchors, 
    keyUsage               [0] KeyUsage OPTIONAL, 
    extendedKeyUsage       [1] ExtKeyUsageSyntax OPTIONAL, 
    validationPolicyAtt    [2] SEQUENCE SIZE (1..MAX) OF Attribute 
                                 OPTIONAL } 
   
  RequestReference ::= CHOICE { 
    requestHash            [0] HashValue, -- hash of CVRequest 
    fullRequest            [1] CVRequest } 
   
Freeman, Housley, & Malpani                                    [Page 60] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  HashValue ::= SEQUENCE { 
    algorithm                  AlgorithmIdentifier DEFAULT { sha-1 }, 
    value                      OCTET STRING } 
   
  sha-1 OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) 
            oiw(14) secsig(3) algorithm(2) 26 } 
   
  ReplyObjects ::= SEQUENCE SIZE (1..MAX) OF CertReply 
   
  CertReply ::= SEQUENCE { 
    cert                       CertReference, 
    replyStatus                ReplyStatus, 
    replyValTime               GeneralizedTime, 
    replyChecks                ReplyChecks, 
    replyWantBacks             ReplyWantBacks, 
    validationErrors       [0] SEQUENCE SIZE (1..MAX) OF  
                                 OBJECT IDENTIFIER OPTIONAL, 
    nextUpdate             [1] GeneralizedTime OPTIONAL, 
    certReplyExtensions    [2] Extensions OPTIONAL } 
   
  ReplyCertificate ::= CHOICE { 
    pkc                    [1] Certificate, 
    ac                     [2] AttributeCertificate } 
   
   
  ReplyStatus ::= ENUMERATED { 
    success                    (0), 
    malformedPKC               (1), 
    malformedAC                (2), 
    unavailableValidityTime    (3), 
    referenceCertHashFail      (4), 
    certPathConstructFail      (5), 
    certPathNotValid           (6), 
    certPathNotValidNow        (7)} 
   
  ReplyChecks ::= SEQUENCE OF ReplyCheck 
   
  ReplyCheck ::= SEQUENCE { 
    check                      OBJECT IDENTIFIER, 
    status                     INTEGER } 
   
  ReplyWantBacks ::= SEQUENCE OF ReplyWantBack 
   
  ReplyWantBack::= SEQUENCE { 
    wb                         OBJECT IDENTIFIER, 
    value                      OCTET STRING } 
   
   -- SCVP Validation Policies Request 
   
  id-ct-scvp-valPolRequest     OBJECT IDENTIFIER ::= { id-ct 12 } 
   
Freeman, Housley, & Malpani                                    [Page 61] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  VPRequest ::= SEQUENCE { 
    scvpVersion                INTEGER, 
    requestNonce               OCTET STRING} 
   
  -- SCVP Validation Policies Response 
   
  id-ct-scvp-valPolResponse OBJECT IDENTIFIER ::= { id-ct 13 } 
   
  VPResponse ::= SEQUENCE { 
    vpResponseVersion          INTEGER, 
    maxCVResponseVersion       INTEGER, 
    maxVPResponseVersion       INTEGER, 
    defaultPolicyID            INTEGER, 
    thisUpdate                 GeneralizedTime, 
    nextUpdate                 GeneralizedTime OPTIONAL, 
    validationPolices          SEQUENCE OF ValidationPolRef, 
    validationAlgs             SEQUENCE OF OBJECT IDENTIFIER, 
    authPolicies               SEQUENCE OF AuthPolicy, 
    responseTypes              ResponseTypes, 
    defaultValidationPolicy    ValidationPolValues, 
    dhPublicKeyInfo            SEQUENCE OF DHPublicKeyInfo, 
    clockSkew              [0] INTEGER OPTIONAL, 
    requestNonce           [1] OCTET STRING OPTIONAL } 
   
  ResponseTypes  ::= ENUMERATED { 
    cached-only                (0), 
    specific-signed only       (1), 
    cached-and-specific-signed (2)} 
   
  DHPublicKeyInfo ::= SEQUENCE { 
    dhPublicKey                DHPublicKey, 
    domainParameters           DomainParameters} 
   
  -- SCVP Check Identifiers 
   
  id-stc OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) 
             dod(6) internet(1) security(5) mechanisms(5) pkix(7) 
  17 } 
   
  id-stc-build-pkc-path        OBJECT IDENTIFIER ::= { id-stc 1 } 
  id-stc-build-valid-pkc-path  OBJECT IDENTIFIER ::= { id-stc 2 } 
  id-stc-build-status-checked-pkc-path 
                               OBJECT IDENTIFIER ::= { id-stc 3 } 
  id-stc-build-aa-path         OBJECT IDENTIFIER ::= { id-stc 4 } 
  id-stc-build-valid-aa-path   OBJECT IDENTIFIER ::= { id-stc 5 } 
   
  -- SCVP WantBack Identifiers 
   
  id-swb OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) 
             dod(6) internet(1) security(5) mechanisms(5) pkix(7) 
  18 } 
Freeman, Housley, & Malpani                                    [Page 62] 
INTERNET DRAFT                   SCVP                      October 2004 
 
   
   id-swb-pkc-best-cert-path       OBJECT IDENTIFIER ::= { id-swb 1 } 
   id-swb-pkc-revocation-info      OBJECT IDENTIFIER ::= { id-swb 2 } 
   id-swb-pkc-cert-status          OBJECT IDENTIFIER ::= { id-swb 3 } 
   id-swb-pkc-public-key-info      OBJECT IDENTIFIER ::= { id-swb 4 } 
   id-swb-aa-cert-path             OBJECT IDENTIFIER ::= { id-swb 5 } 
   id-swb-aa-revocation-info       OBJECT IDENTIFIER ::= { id-swb 6 } 
   id-swb-ac-revocation-info       OBJECT IDENTIFIER ::= { id-swb 7 } 
   id-swb-ac-cert-status           OBJECT IDENTIFIER ::= { id-swb 8 } 
   id-swb-non-cached-resp          OBJECT IDENTIFIER ::= { id-swb 9 } 
   id-swb-pkc-cert                 OBJECT IDENTIFIER ::= { id-swb 10} 
   id-swb-ac-cert                  OBJECT IDENTIFIER ::= { id-swb 11} 
   id-swb-pkc-all-valid-cert-paths OBJECT IDENTIFIER ::= { id-swb 13} 
   
  -- SCVP Validation Algorithm Identifiers 
   
  id-svp OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) 
             dod(6) internet(1) security(5) mechanisms(5) pkix(7) 
  19 } 
   
  id-svp-defaultValAlg OBJECT IDENTIFIER ::= { id-svp 1 } 
   
   -- SCVP Basic Validation Algorithm Identifier 
   
    id-svp-basicValAlg OBJECT IDENTIFIER ::= { id-svp 3 } 
   
   -- SCVP Basic Validation Algorithm Errors 
   
  id-bvae OBJECT IDENTIFIER ::= { id-svp-basicValAlg 1 } 
   
  id-bvae-expired              OBJECT IDENTIFIER ::= { id-bvae 1 } 
  id-bvae-not-yet-valid        OBJECT IDENTIFIER ::= { id-bvae 2 } 
  id-bvae-wrong-anchor         OBJECT IDENTIFIER ::= { id-bvae 3 } 
  id-bvae-partial-chain        OBJECT IDENTIFIER ::= { id-bvae 4 } 
  id-bvae-invalid-key-usage    OBJECT IDENTIFIER ::= { id-bvae 10 } 
  id-bvae-invalid-Purpose      OBJECT IDENTIFIER ::= { id-bvae 11 } 
  id-bvae-invalid-policy       OBJECT IDENTIFIER ::= { id-bvae 12 } 
  id-bvae-invalid-name         OBJECT IDENTIFIER ::= { id-bvae 13 } 
  id-bvae-invalid-entity       OBJECT IDENTIFIER ::= { id-bvae 14 } 
  id-bvae-invalid-depth        OBJECT IDENTIFIER ::= { id-bvae 15 } 
   
  -- SCVP Name Validation Algorithm Identifier 
   
    id-svp-NameValAlg OBJECT IDENTIFIER ::= { id-svp 2 } 
   
  -- SCVP Name Validation Algorithm Errors 
   
  id-nvae OBJECT IDENTIFIER ::= { id-svp-NameValPol 1 } 
   
  id-nvae-name-mismatch          OBJECT IDENTIFIER ::= { id-nvae 1 } 
  id-nvae-no-name                OBJECT IDENTIFIER ::= { id-nvae 2 } 
Freeman, Housley, & Malpani                                    [Page 63] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  id-nvae-unknown-pupose         OBJECT IDENTIFIER ::= { id-nvae 3 } 
  id-nvae-bad-name               OBJECT IDENTIFIER ::= { id-nvae 4 } 
  id-nvae-bad-name-type          OBJECT IDENTIFIER ::= { id-nvae 5 } 
  id-nvae-mixed-names           OBJECT IDENTIFIER ::= { id-nvae 6 } 
   
   
  END 
   
9 Security Considerations 
   
  The following are in addition to the [CMS] security considerations 
   
  A client that trusts a server's response for validation of a 
  certificate inherently trusts that server as much as it would trust 
  its own validation software.  This means that if an attacker 
  compromises a trusted SCVP server, the attacker can change the 
  validation processing for every client that relies on that server.  
  Thus, an SCVP server must be protected at least as well as the 
  trust anchors that the SCVP server trusts. 
   
  Clients MUST check the requestRef item in the response and ensure 
  that it matches their original request.  Requests contain a lot of 
  information that affects the response and clients need to ensure 
  that the server response corresponds to the expected request. 
   
  When the SCVP response is used to determine the validity of a 
  certificate, the client MUST validate the signature on the response 
  to ensure that the expected SCVP server generated it.  If the 
  client does not check the signature on the response, a man-in-the-
  middle attack could fool the client into believing modified 
  responses from the server, or responses to questions the client did 
  not ask. 
   
  If the client does not include a requestNonce item, or if the 
  client does not check that the requestNonce in the response matches 
  the value in the request, an attacker can replay previous responses 
  from the SCVP server. 
   
  If the server does not require some sort of authorization (such as 
  signed requests), an attacker can get the server to respond to 
  arbitrary requests.  Such responses may give the attacker 
  information about weaknesses in the server or about the timeliness 
  of the server's checking.  This information may be valuable for a 
  future attack. 
   
  If the server uses the serverContextInformation to indicate some 
  server state associated with a requestor, implementers must take 
  appropriate measures against denial of service attacks where an 
  attacker sends in a lot of requests at one time to force the server 
  to keep a lot of state information. 
   
Freeman, Housley, & Malpani                                    [Page 64] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  SCVP does not include any confidentiality mechanisms.  If 
  confidentiality is needed, it can be achieved with a lower-layer 
  security protocol. 
   
  The only validation policy references which are truly persistent 
  are OIDs. If the ownership of the policy could in any way be an 
  issue, then OIDs should be the type reference of choice. However in 
  many situations, even though URIs are technically non-persistent, 
  the use of an URI is much more readily understood because of its 
  widespread use elsewhere, and with many organizations they may be 
  viewed as persistent for practical purposes. Therefore in these 
  situations use of URI many be more attractive.  
   
  Certificate validation is expensive and there are performance 
  benefits in caching and reusing the result of a validation -
                                                   - 
  especially for high volume server processes. Caching end entity 
  certificate would typically result in low hit rates against the 
  cashe so is therefore inefficient. Caching CA certificates should 
  yield much higher hit rates, but this needs to be done carefully 
  because it could lead to the wrong result. One way this to achieve 
  caching at the CA certificate level is to build a client which has 
  enough of the chain validation logic to validate an end entity 
  certificate to a CA certificate. The client can then use SCVP to 
  validate the CA certificate, cache the result and locally validate 
  end entity certificates against the cache of known good CA 
  certificates. Attempting this kind of optimization with 
  intermediate CA certificates could cause problems in some edge 
  cases -
       - especially with chains involving self-issued certificates 
  so caches should only be attempted with end entity issuing CA 
  certificate. 
   
  If an SCVP client is not operating on a network with good physical 
  protection, it must ensure that there is integrity over the SCVP 
  request\response pair and ensure that the response cannot be a 
  replay of a cached response obtained by another client. It can do 
  this by using a protected transport such as TLS. It can also do 
  this by using the Diffie-hellman keys to sign the request. It can 
  also use signing keys and request a fresh response from the server. 
   
10 References 
   
  Normative and informative references are provided. 
   
10.1  Normative References 
   
  [STDWORDS]   Bradner, S., "Key words for use in RFCs to Indicate 
             Requirement Levels", BCP 14, RFC 2119, March 1997. 
             http://www.ietf.org/rfc/rfc2119.txt 
   
Freeman, Housley, & Malpani                                    [Page 65] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  [CMS]       Housley, R., "Cryptographic Message Syntax", RFC 
             2630,June 1999. 
             http://www.ietf.org/rfc/rfc2630.txt 
   
  [OCSP]      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. 
             http://www.ietf.org/rfc/rfc2560.txt 
   
  [PKIX-1]     Housley, R., Polk, T, Ford, W.  and Solo, D., 
             "Internet X.509 Public Key Infrastructure Certificate 
             and Certificate Revocation List (CRL) Profile", RFC 
             3280, April 2002. 
             http://www.ietf.org/rfc/rfc3280.txt 
   
  [PKIX-AC]    Farrell, S., and R.  Housley, "An Internet Attribute 
             Certificate Profile for Authorization", RFC 3281, 
             April 2002. 
             http://www.ietf.org/rfc/rfc3281.txt 
   
  [PKIX-ALG]   Polk, W., Housley, R.  and L.  Bassham, "Algorithms 
             and Identifiers for the Internet X.509 Public Key 
             Infrastructure Certificate and Certificate Revocation 
             List (CRL) Profile", RFC 3279, April 2002. 
             http://www.ietf.org/rfc/rfc3280.txt 
   
  [SHA-1]     National Institute of Standards and Technology, 
             "Secure Hash Standard", NIST FIPS Pub 180-1, April 
             1995. 
   
  [UTF8]      Yergeau, F., "UTF-8, a transformation format of ISO 
             10646", RFC 2279, January 1998. 
             http://www.ietf.org/rfc/rfc2279.txt 
   
  [ESS]       Hoffman, P., "Enhanced Security Services for S/MIME", 
             RFC 2634, June 1999. 
             http://www.ietf.org/rfc/rfc2634.txt 
   
  [HTTP-TLS]   Rescorla, E., "HTTP Over TLS", RFC2818, May 2000. 
             http://www.ietf.org/rfc/rfc2818.txt 
   
  [SMIME-CERT] B. Ramsdell, Ed. Secure/Multipurpose Internet Mail 
             Extensions (S/MIME) Version 3.1 Certificate 
             Handling RFC3850, July 2004. 
             http://www.ietf.org/rfc/rfc3850.txt 
   
  [IKE]       D. Harkins, D. Carrel. The Internet Key Exchange 
             RFC2409, November 1998 
             http://www.ietf.org/rfc/rfc2409.txt 
   
Freeman, Housley, & Malpani                                    [Page 66] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  [IKE-GROUPS] T. Kivinen, M. Kojo More Modular Exponential (MODP) 
             Diffie-Hellman groups for Internet Key Exchange (IKE) 
             RFC3526, May 2003 
             http://www.ietf.org/rfc/rfc3526.txt 
   
10.2  Informative References 
   
  [HTTP]      Fielding, R., Gettys, J., Mogul, J., Frystyk, H. and 
             T. Berners-Lee, "Hypertext Transfer Protocol -- 
             HTTP/1.1", RFC 2068, January 1997. 
   
  [RQMTS]     Pinkas, D., and R.  Housley, "Delegated Path 
             Validation and Delegated Path Discovery Protocol 
             Requirements", RFC 3379, September 2002. 
   
11 Acknowledgments 
   
  The lively debate in the PKIX Working Group has made a significant 
  impact on this protocol.  Special thanks to the following for their 
  contributions to this standard and diligence in greatly improving 
  this document. 
   
    Denis Pinkas  
    Phillip Hallam-Baker 
    Mike Myers  
    Frank Balluffi 
    Ameya Talwalkar 
    John Thielens 
    Peter Sylvester 
    Yuriy Dzambasow 
    Sean P. Turner 
    Wen-Cheng Wang 
    Francis Dupont 
    Dave Engberg 
    Faisal Maqsood 
    David A. Cooper 
     
  Thanks also to the workgroup chairs Tim Polk and Steve Kent in 
  their support and help. 
   
Appendix A -- MIME Registrations 
   
  Four MIME type registrations are provided in this appendix. 
   
 A.1 application/cv-request 
   
  To: ietf-types@iana.org 
  Subject: Registration of MIME media type application/cv-request 
   
  MIME media type name: application 
   
Freeman, Housley, & Malpani                                    [Page 67] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  MIME subtype name: cv-request 
   
  Required parameters: format 
   
  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 Simple 
  Certificate Validation Protocol (SCVP) 
   
  Applications which use this media type: SCVP clients 
   
  Additional information: 
      Magic number(s): None 
      File extension(s): .SCQ 
      Macintosh File Type Code(s): none 
   
  Person & email address to contact for further information: 
  Ambarish Malpani <ambarish@malpani.biz> 
   
  Intended usage: COMMON 
   
  Author/Change controller: 
  Ambarish Malpani <ambarish@malpani.biz> 
   
 A.2 application/cv-response 
   
  To: ietf-types@iana.org 
  Subject: Registration of MIME media type application/cv-response 
   
  MIME media type name: application 
   
  MIME subtype name: cv-response 
   
  Required parameters: format 
   
  Optional parameters: None 
   
  Encoding considerations: binary 
   
  Security considerations: Unless reporting an error, the response is 
  cryptographically signed 
   
  Interoperability considerations: None 
   
Freeman, Housley, & Malpani                                    [Page 68] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  Published specification: IETF PKIX Working Group Draft on Simple 
  Certificate Validation Protocol (SCVP) 
   
  Applications which use this media type: SCVP servers 
   
  Additional information: 
   
      Magic number(s): None 
      File extension(s): .SCS 
      Macintosh File Type Code(s): none 
   
  Person & email address to contact for further information: 
  Ambarish Malpani <ambarish@malpani.biz> 
   
  Intended usage: COMMON 
   
  Author/Change controller: Ambarish Malpani <ambarish@malpani.biz> 
   
 A.3 application/vp-request 
   
  To: ietf-types@iana.org 
  Subject: Registration of MIME media type application/vp-request 
   
  MIME media type name: application 
   
  MIME subtype name: vp-request 
   
  Required parameters: format 
   
  Optional parameters: None 
   
  Encoding considerations: binary 
   
  Security considerations: Carries a request for information. 
   
  Interoperability considerations: None 
   
  Published specification: IETF PKIX Working Group Draft on Simple 
  Certificate Validation Protocol (SCVP) 
   
  Applications which use this media type: SCVP clients 
   
  Additional information: 
   
      Magic number(s): None 
      File extension(s): .SPQ 
      Macintosh File Type Code(s): none 
   
  Person & email address to contact for further information: 
  Ambarish Malpani <ambarish@malpani.biz> 
   
Freeman, Housley, & Malpani                                    [Page 69] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  Intended usage: COMMON 
   
  Author/Change controller: Ambarish Malpani <ambarish@malpani.biz> 
   
 A.4 application/vp-response 
   
  To: ietf-types@iana.org 
  Subject: Registration of MIME media type application/vp-response 
   
  MIME media type name: application 
   
  MIME subtype name: vp-response 
   
  Required parameters: format 
   
  Optional parameters: None 
   
  Encoding considerations: Binary 
   
  Security considerations: None 
   
  Interoperability considerations: None 
   
  Published specification: IETF PKIX Working Group Draft on Simple 
  Certificate Validation Protocol (SCVP) 
   
  Applications which use this media type: SCVP servers 
   
  Additional information: 
      Magic number(s): None 
      File extension(s): .SPP 
      Macintosh File Type Code(s): none 
   
  Person & email address to contact for further information: 
  Ambarish Malpani <ambarish@malpani.biz> 
   
  Intended usage: COMMON 
   
  Author/Change controller: 
  Ambarish Malpani <ambarish@malpani.biz> 
   
Appendix B  -- SCVP over HTTP 
   
  This appendix describes the formatting conventions for the SCVP 
  request and response when carried by HTTP. 
   
B.1 SCVP Request 
   
  HTTP based SCVP requests can use the POST method to submit their 
  requests.  Where privacy is a requirement, SCVP transactions 
Freeman, Housley, & Malpani                                    [Page 70] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  exchanged using HTTP MAY be protected using either TLS/SSL or some 
  other lower layer protocol. 
   
  An SCVP request using the POST method is constructed as follows: 
   
      The Content-Type header MUST have the value "application/cv- 
      request". 
   
      The Content-Length header MUST be present and have the exact 
      length of the request. 
   
      The body of the message is the binary value of the DER encoding 
      of the VPRequest.  Other HTTP headers MAY be present and MAY be 
      ignored if not understood by the requestor. 
   
  Sample Content-Type headers are: 
         Content-Type: application/cv-policy-request 
   
B.2 SCVP Response 
   
  An HTTP-based SCVP response is composed of the appropriate HTTP 
  headers, followed by the binary value of the DER encoding of the 
  CVResponse. 
   
  The Content-Type header MUST have the value "application/cv- 
  response". 
   
  The Content-Length header MUST be present and specify the length of 
  the response. 
   
  Other HTTP headers MAY be present and MAY be ignored if not 
  understood by the requestor. 
   
B.3 SCVP Policy Request 
   
  HTTP based SCVP policy requests can use the POST method to submit 
  their requests.  Where privacy is a requirement, SCVP transactions 
  exchanged using HTTP MAY be protected using either TLS/SSL or some 
  other lower layer protocol. 
   
  An SCVP request using the POST method is constructed as follows: 
   
      The Content-Type header MUST have the value "application/vp-
  request". 
   
      The Content-Length header MUST be present and have the exact 
      length of the request. 
   
      The body of the message is the binary value of the DER encoding 
      of the VPRequest.  Other HTTP headers MAY be present and MAY be 
      ignored if not understood by the requestor. 
Freeman, Housley, & Malpani                                    [Page 71] 
INTERNET DRAFT                   SCVP                      October 2004 
 
   
  Sample Content-Type headers are: 
         Content-Type: application/vp-request 
   
B.4 SCVP Policy Response 
   
  An HTTP-based SCVP policy response is composed of the appropriate 
  HTTP headers, followed by the binary value of the DER encoding of 
  the VPResponse. 
   
  The Content-Type header MUST have the value "application/vp- 
  response". 
   
  The Content-Length header MUST be present and specify the length of 
  the response. 
   
  Other HTTP headers MAY be present and MAY be ignored if not 
  understood by the requestor. 
   
   
Appendix C  -- Author Contact Information 
   
  Trevor Freeman 
  Microsoft Corporation, 
  One Microsoft way. 
  Redmond, WA 98052 
  USA. 
  trevorf@microsoft.com  
   
  Russell Housley 
  Vigil Security, LLC 
  918 Spring Knoll Drive 
  Herndon, VA 20170 
  USA 
  housley@Vigilsec.com 
   
  Ambarish Malpani 
  Malpani Consulting Services 
  ambarish@malpani.biz 
 
 
Freeman, Housley, & Malpani                                    [Page 72] 
INTERNET DRAFT                   SCVP                      October 2004 
 
  Full Copyright Statement 
   
  "Copyright (C) The Internet Society (2004).  This document is 
  subject to the rights, licenses and restrictions contained in BCP 
  78, and except as set forth therein, the authors retain all their 
  rights." 
   
  "This document and the information contained herein are provided on 
  An "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE 
  REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND 
  THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, 
  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT 
  THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR 
  ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A 
  PARTICULAR PURPOSE." 
   
  This document and translations of it may be copied and furnished to 
  others, and derivative works that comment on or otherwise explain 
  it or assist in its implementation may be prepared, copied, 
  published and distributed, in whole or in part, without restriction 
  of any kind, provided that the above copyright notice and this 
  paragraph are included on all such copies and derivative works.   
  In addition, the ASN.1 modules presented may be used in whole or in 
  part without inclusion of the copyright notice.  However, this 
  document itself may not be modified in any way, such as by removing 
  the copyright notice or references to the Internet Society or other 
  Internet organizations, except as needed for the purpose of 
  developing Internet standards in which case the procedures for 
  copyrights defined in the Internet Standards process shall be 
  followed, or as required to translate it into languages other than 
  English. 
   
Freeman, Housley, & Malpani                                    [Page 73] 

PAFTECH AB 2003-20262026-04-22 07:22:17