Uso de la API OpenSSL, he extraído una extensión personalizada de un certificado X.509v3 con:Decodificar un DER OCTET STRING ASN.1 con OpenSSL
X509_EXTENSION* ex = X509_get_ext(x509, 4);
El objeto X509_EXTENSION contiene un valor (ex- > value) que es un ASN.1 OCTET STRING. OCTET STRING contiene una cadena UTF-8 codificada DER. Estoy intentando descifrar OCTET STRING para obtener la cadena UTF-8.
he intentado un par de cosas, tales como:
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 obtengo la cadena UTF-8 simple?
he usado 'asn1_get_object' para hacer esto hace un tiempo, siguiendo el ejemplo de código de OpenSSL (alrededor de cifrado/asn1/asn1_par.c: 135). Es muy doloroso decodificar una gran estructura de esta manera que recomiendo usar un analizador asn1 alternativo como SNACC o libtasn1. – Francois
@Francois: Gracias por el consejo. Como no intento decodificar una gran estructura, solo una cadena, ASN1_get_object() podría ser adecuada. Sin embargo, hice un intento de usarlo, en función de cómo se usa en asn1_par.c, pero no pude hacerlo funcionar. ¿Serías capaz de dar un ejemplo? –
@Francois: descubrí cómo usar la función y publiqué una respuesta basada en eso. Gracias de nuevo. –