سؤال

وباستخدام API بينسل، لقد انتزعت تمديد مخصصة من شهادة X.509v3 مع:

X509_EXTENSION* ex = X509_get_ext(x509, 4);

والكائن X509_EXTENSION يحتوي على (قيمة السابقين>) القيمة التي هي STRING ASN.1 OCTET. يحتوي STRING OCTET على DER ترميز UTF-8 السلسلة. أحاول فك STRING OCTET للحصول على سهل 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] = '\0';

وكلا تعطي هذه لي سلسلة DER المشفرة. كيف يمكنني الحصول على سهل UTF-8 سلسلة؟

هل كانت مفيدة؟

المحلول

وأشار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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top