query on key usage OIDs
Viktor Dukhovni
openssl-users at dukhovni.org
Sat Jul 17 15:19:22 UTC 2021
On Fri, Jul 16, 2021 at 01:11:04PM +0200, Jakob Bohm via openssl-users wrote:
> Question was how to retrieve those lists for any given certificate,
> using currently supported OpenSSL APIs.
>
> The lists of usage bits and extusage OIDs in any given certificate
> are finite, even if the list of values that could be in other
> certificates is infinite.
The bits can be retrieved via: X509_get_key_usage(3).
https://www.openssl.org/docs/man1.1.1/man3/X509_get_key_usage.html
The "standard" EKU extensions can be retrieved via: X509_get_extended_key_usage(3)
X509_get_extended_key_usage() returns the value of the extended key
usage extension. If extended key usage is present it will return
zero or more of the flags: XKU_SSL_SERVER, XKU_SSL_CLIENT,
XKU_SMIME, XKU_CODE_SIGN XKU_OCSP_SIGN, XKU_TIMESTAMP, XKU_DVCS or
XKU_ANYEKU. These correspond to the OIDs id-kp-serverAuth,
id-kp-clientAuth, id-kp-emailProtection, id-kp-codeSigning,
id-kp-OCSPSigning, id-kp-timeStamping, id-kp-dvcs and
anyExtendedKeyUsage respectively.
To retrieve the full list of extended key usage OIDs: X509_get_ext_d2i(3)
X509 *x;
EXTENDED_KEY_USAGE *extusage;
int i;
...
if ((extusage = X509_get_ext_d2i(x, NID_ext_key_usage, &i, NULL)) != NULL) {
for (i = 0; i < sk_ASN1_OBJECT_num(extusage); ++i) {
ASN1_OBJECT *obj = sk_ASN1_OBJECT_value(extusage, i);
/* Do something with "obj" */
}
}
sk_ASN1_OBJECT_pop_free(extusage, ASN1_OBJECT_free);
--
Viktor.
More information about the openssl-users
mailing list