openssl получить расширение сертификата sions

Я использую 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

5
задан Community 23 May 2017 в 12:11
поделиться