Frage

Mit dem OpenSSL API, ich habe eine benutzerdefinierte Erweiterung von einem X.509v3-Zertifikat mit extrahiere:

X509_EXTENSION* ex = X509_get_ext(x509, 4);

Das X509_EXTENSION Objekt enthält einen Wert (ex-> value), der ein ASN.1 OCTET STRING ist. Der OCTET STRING enthält eine codierte DER UTF-8-String. Ich versuche, die OCTET STRING zu bekommen die Ebene UTF-8-String zu dekodieren.

Ich habe ein paar Dinge ausprobiert, 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 die DER-codierte Zeichenfolge. Wie erhalte ich die Ebene UTF-8-String?

War es hilfreich?

Lösung

@Francois wies mich auf die ASN1_get_object () Funktion. Diese Funktion ist für dieses Szenario, in dem die Zertifikatserweiterung nur einen einzigen Wert enthält.

ASN1_get_object () nimmt einen Zeiger auf einen Zeiger auf einen Puffer C, der eine DER codierten Objekt enthält. Es gibt die Daten selbst (durch den Zeiger Einstellung), die Länge der Daten, den Wert des ASN.1-Tages und die ASN.1-Objekt-Klasse.

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top