public_key_t *key;
bool valid;
x509_t *x509 = (x509_t*)issuer;
+ chunk_t keyid = chunk_empty;
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
const ASN1_BIT_STRING *sig;
#else
return FALSE;
}
}
- if (!this->issuer->equals(this->issuer, issuer->get_subject(issuer)))
+
+ /* compare keyIdentifiers if available, otherwise use DNs */
+ if (this->authKeyIdentifier.ptr)
{
- return FALSE;
+ keyid = x509->get_subjectKeyIdentifier(x509);
+ if (keyid.len && !chunk_equals(keyid, this->authKeyIdentifier))
+ {
+ return FALSE;
+ }
}
+ if (!keyid.len)
+ {
+ if (!this->issuer->equals(this->issuer, issuer->get_subject(issuer)))
+ {
+ return FALSE;
+ }
+ }
+
key = issuer->get_public_key(issuer);
if (!key)
{