Décodage ASN.1 DER OCTUOR à CORDES avec OpenSSL

À l'aide d'OpenSSL API, j'ai extrait une extension personnalisée à partir d'un X. 509v3 certificat:

X509_EXTENSION* ex = X509_get_ext(x509, 4);

La X509_EXTENSION objet contient une valeur (ex->valeur), qui est une ASN.1 OCTET STRING. La CHAÎNE d'OCTET contient codé DER chaîne UTF-8. Je suis en train de décoder la CHAÎNE d'OCTET pour obtenir la plaine chaîne UTF-8.

J'ai essayé quelques petites choses, telles que:

ASN1_STRING_to_UTF8(&buf, ex->value);

et

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

Ces deux me donner la DER chaîne codée. Comment puis-je obtenir la plaine chaîne UTF-8?

J'ai utilisé "asn1_get_object" de le faire il y a longtemps, à la suite de l'exemple de code d'openssl (autour de crypto/asn1/asn1_par.c:135). C'est tellement douloureux pour décoder une grosse structure de cette façon que je vous recommande d'utiliser un autre asn1 analyseur tels que SNACC ou libtasn1.
Merci pour l'astuce. Depuis que je ne suis pas en train de décoder une grosse structure, juste une seule chaîne, ASN1_get_object() peut être suffisant. Cependant, j'ai fait une tentative de l'utiliser, basé sur la façon dont il est utilisé dans asn1_par.c, mais je ne pouvais pas le faire fonctionner. Seriez-vous en mesure de fournir un exemple?
J'ai trouvé comment utiliser la fonction et posté une réponse sur cette base. Merci encore.

OriginalL'auteur Roger Dahl | 2011-09-07