Я использую openssl для разбора сертификата X509. Мне удается получить расширения, но я не знаю, как извлечь значение расширения.
Код, который я использую:
X509_EXTENSION *extension = sk_X509_EXTENSION_pop(exts);
int critical = X509_EXTENSION_get_critical(extension);
ASN1_OBJECT *obj = extension-> object;
ln = OBJ_nid2ln(OBJ_obj2nid(obj));
if( !ln ) ln = "";
OBJ_obj2txt(objbuf,sizeof(objbuf),obj,1);
int nid = OBJ_txt2nid(ln);
Этот код говорит мне, является ли расширение критическим или нет, и дает мне nid расширения.
Я полагаю, что значение может быть получено с помощью:
ASN1_OCTET_STRING *data= X509_EXTENSION_get_data(extension);
, но я не знаю, как обращаться с полученным объектом data
. Предполагается, что объект данных должен быть закодирован.
Любая идея о том, как получить данные расширения?
РЕДАКТИРОВАТЬ: Как было предложено здесь, я пытался сделать:
ASN1_OCTET_STRING* octet_str = X509_EXTENSION_get_data(extension);
const unsigned char* octet_str_data = octet_str->data;
long xlen;
int tag, xclass;
int ret = ASN1_get_object(&octet_str_data, &xlen, &tag, &xclass, octet_str->length);
printf(@"value: %s\n", octet_str_data);
, но строка, которую я получаю после декодирования, такая же, как и до нее - что-то вроде: 4Á˃◊∫Ns∑äP∂W≠%£A