Das Dekodieren einer ASN.1 DER OKTETT-STRING mit OpenSSL

Mithilfe der OpenSSL-API, die ich entpackt habe eine benutzerdefinierte Erweiterung von einem X. 509v3-Zertifikat mit:

X509_EXTENSION* ex = X509_get_ext(x509, 4);

Den X509_EXTENSION-Objekt enthält einen Wert, der (ex->Wert), dass ist ein ASN.1-OKTETT-STRING. Die OKTETT-STRING enthält ein DER-codiertes UTF-8-string. Ich bin versucht zu entschlüsseln, die OKTETT-STRING zu erhalten, der plain UTF-8-string.

Habe ich versucht, ein paar Dinge, wie zum Beispiel:

ASN1_STRING_to_UTF8(&buf, ex->value);

und

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

Diese beiden geben mir das DER kodierte string. Wie bekomme ich die plain UTF-8-string?

  • Ich benutzt 'asn1_get_object' zu tun, dieses vor einer Weile, nach dem Vorbild in der openssl-code (etwa crypto/asn1/asn1_par.c:135). Es ist so schmerzhaft zu Dekodieren, die eine große Struktur, die auf diese Weise empfehle ich die Verwendung eines alternativen asn1-parser wie SNACC oder libtasn1.
  • Danke für den Tipp. Da bin ich nicht versuchen zu entschlüsseln, einen großen Aufbau, nur ein einziger string, ASN1_get_object() kann angemessen sein. Allerdings machte ich den Versuch, es zu verwenden, basiert auf, wie es verwendet wird in asn1_par.c, aber konnte es nicht funktioniert. Könnten Sie ein Beispiel geben?
  • Ich fand heraus, wie man die Funktion und verfasst eine Antwort, die Grundlage. Nochmals vielen Dank.
InformationsquelleAutor Roger Dahl | 2011-09-07
Schreibe einen Kommentar