Pregunta

El uso de la API de OpenSSL, he extraído una extensión personalizada de un certificado X.509v3 con:

X509_EXTENSION* ex = X509_get_ext(x509, 4);

El objeto X509_EXTENSION contiene una (valor ex>) valor que es una cadena ASN.1 octeto. El OCTET STRING contiene un DER codificada UTF-8 cadena. Estoy intentando decodificar la OCTET STRING para obtener la cadena sin formato UTF-8.

He intentado algunas cosas, como por ejemplo:

ASN1_STRING_to_UTF8(&buf, ex->value);

y

M_ASN1_OCTET_STRING_print(bio, ex->value);
int len = BIO_read(bio, buf, buf_size);
buf[len] = '\0';

Estos dos me dan la cadena de codificación DER. ¿Cómo consigo la cadena sin formato UTF-8?

¿Fue útil?

Solución

@Francois me señaló a la función ASN1_get_object (). Esa función es apropiado para este escenario en el que la extensión del certificado contiene sólo un único valor.

ASN1_get_object () toma un puntero a un puntero a un tampón C que contiene un objeto DER codificado. Devuelve los datos en sí (ajustando el puntero), la longitud de los datos, el valor de la etiqueta ASN.1 y la clase de objeto 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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top