Hi, You can have a look at following files from openssl source code.
1. ssl_cert.c (around line number 626) 2. x509_vfy.c (around line number 153) 3. v3_purp.c (around line number 700). good luck! On Mon, Jul 23, 2012 at 8:41 AM, Ashok C <ash....@gmail.com> wrote: > Hi, > > I have a requirement to form a correct certificate chain (for a server > application, to send to client). > Currently I was forming the chain using the issuer-id and subject name > combination alone. > Eg: The algorithm followed was: > Let End entity(server certificate) be called as 'E'. Root certificate as > 'R' , and intermediate CA certificate be 'I'. > > > 1. Look up E's issuer-id. Let it be 'C=IN'. Chain at this step: "E" > 2. Search trust store for CA certificate which has this 'C=IN' as > subject name and add it to chain. This is "I". Chain at this step: "E-I" > 3. Look at issuer-id of I and search trust store which has it as > subject-name. In this case I will find 'R'. Since for 'R' issuer-id and > subject-name are same, this is considered to be root and hence not added to > chain. > > But, I find that this chain is not conclusive enough, as > subject-name==issuer-id is not a complete criteria for a root certificate > and also that "I" cannot be treated as issuer of "E" just because of the > success of the issuer-id/subject-name checks. > I read the openSSL verify man page and understood that checks related to > authority key identifier and subject key identifier are required to decide > upon the correct chain. > > So I presume that the logic should be modified to look something like this: > > > 1. Look up E's issuer-id. Let it be 'C=IN'. Chain at this step: "E" > 2. Search trust store for CA certificate which has this 'C=IN' as > subject name. This is "I". Check if authority key identifier of "E" is the > same as the subject key identifier of "I". If this is true, add it to > chain. Chain at this step: "E-I" > 3. Look at issuer-id of I and search trust store which has it as > subject-name. In this case I will find 'R'. Check if authority key > identifier of "I" is the same as the subject key identifier of "R". 'R' can > be concluded as the root only if subject-name==issuer-id and > authority-key-identifier==subject-key-identifier. > > Is this solution complete for a multi-level hierarchy? As of now, I do not > have to deal with cross-certification, though I am very interested to know > from you guys on the complications involved when that comes into the > picture. I understand there is RFC 4158 explaining this path formation, but > was wondering that needs to be read in detail only for the > cross-certification related parts. > > Does openSSL have any sample implementation somewhere for this path > formation(subject-key/authority-key checks) which I could use for reference? > Thanks in advance. > > Regards, > Ashok > > -- Regards, *Sukalp Bhople.*