Utilizzando l'API OpenSSL, ho estratto un'estensione personalizzata da un certificato X.509v3 con:Decodifica di un DER OCTET STRING ASN.1 con OpenSSL
X509_EXTENSION* ex = X509_get_ext(x509, 4);
L'oggetto X509_EXTENSION contiene un valore (ex > value) che è una STRINGA OCTET ASN.1. OCTET STRING contiene una stringa UTF-8 codificata DER. Sto cercando di decodificare l'OCTET STRING per ottenere la semplice stringa UTF-8.
ho provato un paio di cose, come ad esempio:
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';
Questi entrambi mi danno la stringa codificato DER. Come ottengo la semplice stringa UTF-8?
ho usato 'asn1_get_object' per fare questo qualche tempo fa, seguendo l'esempio di codice in OpenSSL (circa crypto/ASN1/asn1_par.c: 135). È così doloroso decodificare una grande struttura in questo modo che consiglio di utilizzare un parser asn1 alternativo come SNACC o libtasn1. – Francois
@Francois: Grazie per il suggerimento. Poiché non sto cercando di decodificare una struttura grande, solo una singola stringa, ASN1_get_object() potrebbe essere adeguata. Tuttavia, ho fatto un tentativo di usarlo, in base a come è usato in asn1_par.c, ma non riuscivo a farlo funzionare. Sareste in grado di fornire un esempio? –
@Francois: ho scoperto come utilizzare la funzione e ho postato una risposta basata su questo. Grazie ancora. –