#include #include #include X509 *X509_open_cert(const char *path) { X509 *cert; FILE *fp; if (!(fp = fopen(path, "r"))) return NULL; cert = PEM_read_X509(fp, NULL, NULL, NULL); fclose(fp); return cert; } char *X509_get_common_name(X509 *cert) { X509_NAME *subj; X509_NAME_ENTRY *entry; ASN1_STRING *data; unsigned char *cn; int idx; if (!(subj = X509_get_subject_name(cert))) return NULL; if ((idx = X509_NAME_get_index_by_NID(subj, NID_commonName, -1)) < 0) return NULL; if (!(entry = X509_NAME_get_entry(subj, idx))) return NULL; if (!(data = X509_NAME_ENTRY_get_data(entry))) return NULL; if (ASN1_STRING_to_UTF8(&cn, data) == 0) return NULL; return (char *)cn; }