Расшифровка ASN.1 Der ОКТЕТНАЯ строка с OpenSSL
используя OpenSSL API, я извлек пользовательское расширение из сертификата X. 509v3 с помощью:
X509_EXTENSION* ex = X509_get_ext(x509, 4);
объект X509_EXTENSION содержит значение (ex - >value), которое является ASN.1 ОКТЕТНАЯ СТРОКА. Строка октета содержит строку UTF-8 в кодировке DER. Я пытаюсь декодировать ОКТЕТНУЮ строку, чтобы получить простую строку UTF-8.
Я пробовал несколько вещей, таких как:
ASN1_STRING_to_UTF8(&buf, ex->value);
и
M_ASN1_OCTET_STRING_print(bio, ex->value);
int len = BIO_read(bio, buf, buf_size);
buf[len] = '';
Они оба дают мне закодированную строку DER. Как получить простую строку UTF-8?
1 ответов
@Francois указал мне на функцию ASN1_get_object (). Эта функция подходит для данного сценария, в котором расширение сертификата содержит только одно значение.
ASN1_get_object () принимает указатель на указатель на буфер C, содержащий закодированный объект DER. Он возвращает сами данные (путем регулировки указателя), длину данных, ASN.1 значение тега и ASN.Объект 1 класса.
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);