<div dir="ltr"><div class="gmail_extra"><div style="font-size:16px">Not sure about how to completely solve the problem.  As the</div><div style="font-size:16px">function </div><div style="font-size:16px">X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit, int *idx)</div><div style="font-size:16px">is called, crit is not actually used.</div><div style="font-size:16px">(e.g., in v3_purp.c, line 462)</div><div style="font-size:16px">x->akid =X509_get_ext_d2i(x, NID_authority_key_identifier, NULL, NULL);</div><div style="font-size:16px"><br></div><div style="font-size:16px">If the value of crit can be retrieved, we may fix</div><div style="font-size:16px">function X509_check_issued (around line 701). </div><div style="font-size:16px"><br></div><div style="font-size:16px">if(X509_NAME_cmp(X509_get_subject_name(issuer),</div><div style="font-size:16px">     X509_get_issuer_name(subject)))</div><div style="font-size:16px">         return X509_V_ERR_SUBJECT_ISSUER_MISMATCH;</div><div style="font-size:16px">     x509v3_cache_extensions(issuer);</div><div style="font-size:16px">     x509v3_cache_extensions(subject);</div><div style="font-size:16px">     </div><div style="font-size:16px">    if(subject->akid)</div><div style="font-size:16px">     {</div><div style="font-size:16px">         int ret = X509_check_akid(issuer, subject->akid);</div><div style="font-size:16px">         if (ret != X509_V_OK)</div><div style="font-size:16px">            return ret;</div><div style="font-size:16px">     }</div><div style="font-size:16px">+    else if (crit==-2) //subject has more than one akids</div><div style="font-size:16px">+         return X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH;</div></div></div>