Eric,
I found this information on the internet. How accurate it is I do not know...
Based on RFC 5280, here are the required certificate extensions for CA certificates when they are used to validate digital signatures on certificates or CRLs:
Required Extensions
1. Key Usage (2.5.29.15) - Section 4.2.1.3
Requirement: MUST be included
Critical: SHOULD mark as critical
Required bits:
- keyCertSign (bit 5) - MUST be set if validating signatures on certificates
- cRLSign (bit 6) - MUST be set if validating signatures on CRLs
From RFC 5280:
"Conforming CAs MUST include this extension in certificates that contain public keys that are used to validate digital signatures on other public key certificates or CRLs."
KeyUsage ::= BIT STRING {
digitalSignature (0),
nonRepudiation (1),
keyEncipherment (2),
dataEncipherment (3),
keyAgreement (4),
keyCertSign (5), -- MUST be set for CA certs
cRLSign (6), -- MUST be set if signing CRLs
encipherOnly (7),
decipherOnly (8)
}
2. Basic Constraints (2.5.29.19) - Section 4.2.1.9
Requirement: MUST be included
Critical: MUST mark as critical
Required values:
- cA boolean - MUST be TRUE
- pathLenConstraint - Optional, but if keyCertSign is set, this can specify max path depth
From RFC 5280:
"Conforming CAs MUST include this extension in all CA certificates that contain public keys used to validate digital signatures on certificates and MUST mark the extension as critical in such certificates."
BasicConstraints ::= SEQUENCE {
cA BOOLEAN DEFAULT FALSE, -- MUST be TRUE for CAs
pathLenConstraint INTEGER (0..MAX) OPTIONAL
}
3. Subject Key Identifier (2.5.29.14) - Section 4.2.1.2
Requirement: MUST appear in all conforming CA certificates
Critical: MUST mark as non-critical
Purpose: Identifies the CA's public key; used in the Authority Key Identifier of issued certificates
From RFC 5280:
"To facilitate certification path construction, this extension MUST appear in all conforming CA certificates, that is, all certificates including the basic constraints extension where the value of cA is TRUE."
SubjectKeyIdentifier ::= KeyIdentifier
KeyIdentifier ::= OCTET STRING
4. Authority Key Identifier (2.5.29.35) - Section 4.2.1.1
Requirement: MUST be included (except for self-signed root CAs where it MAY be omitted)
Critical: MUST mark as non-critical
Purpose: Identifies the public key of the issuer that signed this CA certificate
From RFC 5280:
"The keyIdentifier field of the authorityKeyIdentifier extension MUST be included in all certificates generated by conforming CAs to facilitate certification path construction."
AuthorityKeyIdentifier ::= SEQUENCE {
keyIdentifier [0] KeyIdentifier OPTIONAL,
authorityCertIssuer [1] GeneralNames OPTIONAL,
authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL
}
Summary Table
|
Extension
|
OID
|
Required?
|
Critical?
|
Purpose
|
|
Key Usage
|
2.5.29.15
|
MUST
|
SHOULD
|
Indicates cert/CRL signing capability
|
|
Basic Constraints
|
2.5.29.19
|
MUST
|
MUST
|
Identifies as CA certificate
|
|
Subject Key Identifier
|
2.5.29.14
|
MUST
|
MUST NOT
|
Identifies this CA's public key
|
|
Authority Key Identifier
|
2.5.29.35
|
MUST*
|
MUST NOT
|
Identifies issuer's public key
|
*Exception: MAY be omitted in self-signed root CA certificates
Important Relationships
Key Usage and Basic Constraints must be consistent:
"If the keyCertSign bit is asserted, then the cA bit in the basic constraints extension MUST also be asserted."
Why these extensions matter for signature validation:
- Basic Constraints - Verifier checks: "Is this a CA certificate?" (cA=TRUE)
- Key Usage - Verifier checks: "Is this key authorized to sign certificates?" (keyCertSign bit set)
- Subject Key Identifier - Helps chain certificates together
- Authority Key Identifier - Helps find the issuer's certificate in the chain
Additional Recommended Extension
While not strictly required by RFC 5280, Certificate Policies (2.5.29.32) is also important:
From RFC 5280:
"Conforming CAs MUST support... certificate policies extensions."
This helps relying parties understand the policies under which the CA operates.
Practical Example
A typical CA certificate for signature validation would have:
Extensions:
X509v3 Basic Constraints: critical
CA:TRUE, pathlen:0
X509v3 Key Usage: critical
Certificate Sign, CRL Sign
X509v3 Subject Key Identifier:
AB:CD:EF:12:34:56:78:90...
X509v3 Authority Key Identifier:
keyid:12:34:56:78:90:AB:CD:EF...
Without these required extensions properly set, certificate path validation will fail according to RFC 5280 requirements.
I will be following up with the certificate vendor on these extensions.
Sincerely,
Mark