Path processing algorithm
Jump to navigation
Jump to search
A certification path is a sequence of n certificates where:
* for all x in {1,(n-1)}, the subject of certificate x is the
issuer of certificate x+1.
* certificate x=1 is the the self-signed certificate, and
* certificate x=n is the end entity certificate.
This section assumes the following inputs are provided to the path processing logic:
(a) a certification path of length n;
(b) a set of initial policy identifiers (each comprising a
sequence of policy element identifiers), which identifies one or
more certificate policies, any one of which would be acceptable
for the purposes of certification path processing, or the special
value "any-policy";
(c) the current date/time (if not available internally to the
certification path processing module); and
(d) the time, T, for which the validity of the path should be
determined. (This may be the current date/time, or some point in
the past.)
From the inputs, the procedure intializes five state variables:
(a) acceptable policy set: A set of certificate policy
identifiers comprising the policy or policies recognized by the
public key user together with policies deemed equivalent through
policy mapping. The initial value of the acceptable policy set is
the special value "any-policy".
(b) constrained subtrees: A set of root names defining a set of
subtrees within which all subject names in subsequent certificates
in the certification path shall fall. The initial value is
"unbounded".
(c) excluded subtrees: A set of root names defining a set of
subtrees within which no subject name in subsequent certificates
in the certification path may fall. The initial value is "empty".
(d) explicit policy: an integer which indicates if an explicit
policy identifier is required. The integer indicates the first
certificate in the path where this requirement is imposed. Once
set, this variable may be decreased, but may not be increased.
(That is, if a certificate in the path requires explicit policy
identifiers, a later certificate can not remove this requirement.)
The initial value is n+1.
(e) policy mapping: an integer which indicates if policy mapping
is permitted. The integer indicates the last certificate on which
policy mapping may be applied. Once set, this variable may be
decreased, but may not be increased. (That is, if a certificate in
the path specifies policy mapping is not permitted, it can not be
overriden by a later certificate.) The initial value is n+1.
The actions performed by the path processing software for each certificate i=1 through n are described below. The self-signed certificate is certificate i=1, the end entity certificate is i=n. The processing is performed sequentially, so that processing certificate i affects the state variables for processing certificate (i+1). Note that actions (h) through (m) are not applied to the end entity certificate (certificate n).
The path processing actions to be performed are:
(a) Verify the basic certificate information, including:
(1) the certificate was signed using the subject public key
from certificate i-1 (in the special case i=1, this step may be
omitted; if not, use the subject public key from the same
certificate),
(2) the certificate validity period includes time T,
(3) the certificate had not been revoked at time T and is not
currently on hold status that commenced before time T, (this
may be determined by obtaining the appropriate CRL or status
information, or by out-of-band mechanisms), and
(4) the subject and issuer names chain correctly (that is, the
issuer of this certificate was the subject of the previous
certificate.)
(b) Verify that the subject name and subjectAltName extension
(critical or noncritical) is consistent with the constrained
subtrees state variables.
(c) Verify that the subject name and subjectAltName extension
(critical or noncritical) is consistent with the excluded subtrees
state variables.
(d) Verify that policy information is consistent with the initial
policy set:
(1) if the explicit policy state variable is less than or equal
to i, a policy identifier in the certificate shall be in the
initial policy set; and
(2) if the policy mapping variable is less than or equal to i,
the policy identifier may not be mapped.
(e) Verify that policy information is consistent with the
acceptable policy set:
(1) if the certificate policies extension is marked critical,
the intersection of the policies extension and the acceptable
policy set shall be non-null;
(2) the acceptable policy set is assigned the resulting
intersection as its new value.
(g) Verify that the intersection of the acceptable policy set and
the initial policy set is non-null.
(h) Recognize and process any other critical extension present in
the certificate.
(i) Verify that the certificate is a CA certificate (as specified
in a basicConstraints extension or as verified out-of-band).
(j) If permittedSubtrees is present in the certificate, set the
constrained subtrees state variable to the intersection of its
previous value and the value indicated in the extension field.
(k) If excludedSubtrees is present in the certificate, set the
excluded subtrees state variable to the union of its previous
value and the value indicated in the extension field.
(l) If a policy constraints extension is included in the
certificate, modify the explicit policy and policy mapping state
variables as follows:
(1) If requireExplicitPolicy is present and has value r, the
explicit policy state variable is set to the minimum of its
current value and the sum of r and i (the current certificate
in the sequence).
(2) If inhibitPolicyMapping is present and has value q, the
policy mapping state variable is set to the minimum of its
current value and the sum of q and i (the current certificate
in the sequence).
(m) If a key usage extension is marked critical, ensure the
keyCertSign bit is set.
If any one of the above checks fail, the procedure terminates, returning a failure indication and an appropriate reason. If none of the above checks fail on the end-entity certificate, the procedure terminates, returning a success indication together with the set of all policy qualifier values encountered in the set of certificates.