Domanda

Usando l'API OpenSSL, ho estratto un'estensione personalizzata da un certificato X.509v3 con:

X509_EXTENSION* ex = X509_get_ext(x509, 4);

L'oggetto X509_Extension contiene un valore (ex-> valore) che è una stringa di ottetto ASN.1. La stringa di ottetto contiene una stringa UTF-8 codificata DER. Sto cercando di decodificare la stringa di ottetto per ottenere la stringa UTF-8 semplice.

Ho provato alcune cose, come:

ASN1_STRING_to_UTF8(&buf, ex->value);

e

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

Entrambi mi danno la stringa codificata DER. Come ottengo la semplice stringa UTF-8?

È stato utile?

Soluzione

@Francois mi ha indicato la funzione asn1_get_object (). Tale funzione è appropriata per questo scenario in cui l'estensione del certificato contiene solo un unico valore.

Asn1_get_object () porta un puntatore a un puntatore a un buffer C che contiene un oggetto codificato DER. Restituisce i dati stessi (regolando il puntatore), la lunghezza dei dati, il valore del tag ASN.1 e la classe oggetto 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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top