[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: CA=True for an OCSP certficat



Peter,

RFC 3280 is pretty clear on what determines a CA.  It is based on basic constraints for version 3 certificates and out of band means for version 1 and 2.  See section 4.2.1.10 (Basic Constraints) and step k in Section 6.1.4.

RFC 3280 is also clear that CA certificate need not contain key usage extension, let alone have key cert Sign bit.   See step n in Section 6.1.4.

I agree that if key usage extension is present, key cert sign bit must be set in order to verify signature on a child certificate.

-----Original Message-----
From: owner-ietf-pkix@xxxxxxxxxxxx [mailto:owner-ietf-pkix@xxxxxxxxxxxx] On Behalf Of Peter Sylvester
Sent: Thursday, April 03, 2008 6:23 AM
To: Stephen Kent
Cc: pkix; zzSantosh Chokhani
Subject: Re: CA=True for an OCSP certficat

Stephen and Santosh,
thanks for the answer.

The origin of my question:

A test tool that wants to distingusih 'CA certficates, CRLsigners and EE 
certs':
(CA certficates in the meaning: It can sign certificates).

IMO the way to proceed is:
A CA cert is one that has keyusage=keyCertSign
If not; If it has CRLsign, then it is a CRL signer
else it is an EE cert.

One does not use basicconstrints to distinguish these types.

If for keysuage=keyCertSign, the CA flag is not asserted, one
this is an error. Similar, if not both keyCertSign and CA flag is
set pathlength must not be asserted.

Stephen Kent wrote:
> Peter,
>
> I expect the CA flag to be set to TRUE only in a cert used to validate 
> signatures on other certs, and/or signatures on CRLs.
Well, that's what you might expect, but that's not what is required in 
the text nor excluding
the opposite.
>
> A cert for an EE contains no basic constraints extension, or one in 
> which the CA flag is FALSE.
I cannot logically deduce this from the text. I can only deduce, it is 
one that does  neither have
keyusage  certsign  crlsign
(not talking about certs without extensions but that's another story).
>
> A cert issued to a service run by a CA, such as OCSP server or a time 
> stamp server is not  CA cert, but an EE cert, i.e., it is used to 
> verify signatures on objects others than certs or CRLs, and thus it 
> MUST not have the CA flag set TRUE.
I think that there are two conflicting definitions of 'CA certficate' in 
RFC 3280 which
are indicated by either  basicconstraints ca=true or keysuage 
keyCertSign in the text.

Since these conditions are not identical, I cannot properly interprete 
you response.

'A cert issed to a service run by a CA', this sounds to be like

   The basic constraints extension identifies whether the subject of the
   certificate is a CA 


Where is text that say, EE certs MUST not have CA=true?

keyusage:

      The keyCertSign bit is asserted when the subject public key is
      used for verifying a signature on public key certificates.  If the
      keyCertSign bit is asserted, then the cA bit in the basic
      constraints extension (section 4.2.1.10) MUST also be asserted.

      The cRLSign bit is asserted when the subject public key is used
      for verifying a signature on certificate revocation list (e.g., a
      CRL, delta CRL, or an ARL).  This bit MUST be asserted in
      certificates that are used to verify signatures on CRLs.

These statements only require:   keyCertSin => ca=true
but not  for crlSign.

subject key identifier :

   To facilitate certification path construction, this extension MUST
   appear in all conforming CA certificates, that is, all certificates
   including the basic constraints extension (section 4.2.1.10) where
   the value of cA is TRUE.  

for crl signers this is useful.

basic constraints say

   The basic constraints extension identifies whether the subject of the
   certificate is a CA and the maximum depth of valid certification
   paths that include this certificate.


The first statement says something about the nature of the subject, but not
of the purpose of the certificate.

   The cA boolean indicates whether the certified public key belongs to
   a CA.  If the cA boolean is not asserted, then the keyCertSign bit in
   the key usage extension MUST NOT be asserted.

This statement essentially repeats the corresponding keyusage statement.
It does not say anything about crlSign.

   The pathLenConstraint field is meaningful only if the cA boolean is
   asserted and the key usage extension asserts the keyCertSign bit

This is interesting because of both conditions.

   Usually, the last certificate is an end
   entity certificate, but it can be a CA certificate.

This sentence is a little bit irritating because there is not proper
definition of CA certficate. in that context I assume keyusage=keycertsign
is the good interpretation.

   This extension MAY appear as a critical
   or non-critical extension in CA certificates that contain public keys
   used exclusively for purposes other than validating digital
   signatures on certificates.  Such CA certificates include ones that
   contain public keys used exclusively for validating digital
   signatures on CRLs and ones that contain key management public keys
   used with certificate enrollment protocols. 

in this context CA certificate seems to mean basicconstraints ca=true
What are such 'CA certficates'? Aren't they in fact end-entities?

   This extension MAY
   appear as a critical or non-critical extension in end entity
   certificates.

This statement covers the rest.

CAs MUST NOT include the pathLenConstraint field unless the cA
   boolean is asserted and the key usage extension asserts the
   keyCertSign bit.

Again here, we have two conditions.



Does all that may some sense?



-- 
To verify the signature, see http://edelpki.edelweb.fr/ 
Cela vous permet de charger le certificat de l'autorité; 
die Liste mit zurückgerufenen Zertifikaten finden Sie da auch.