Question

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

X509_EXTENSION* ex = X509_get_ext(x509, 4);

L'objet X509_EXTENSION contient une (valeur ex->) valeur qui est une chaîne d'octets ASN.1. L'OCTET STRING contient une chaîne de caractères codée DER UTF-8. Je suis en train de décoder le OCTET STRING pour obtenir la chaîne UTF-8 ordinaire.

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] = '\0';

Ces deux me donnent la chaîne encodée DER. Comment puis-je obtenir la chaîne UTF-8 ordinaire?

Était-ce utile?

La solution

@Francois me montra la fonction ASN1_get_object (). Cette fonction est appropriée pour ce scénario où l'extension du certificat ne contient qu'une seule valeur.

ASN1_get_object () prend un pointeur vers un pointeur vers un tampon de C qui contient un objet codé DER. Il renvoie les données elles-mêmes (en ajustant le pointeur), la longueur des données, la valeur d'étiquette ASN.1 et la classe d'objet 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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top