05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

7.3 Sicherer Umgang <strong>mit</strong> X.509-Zertifikaten 377<br />

<strong>SSL</strong>_set_verify() hinterlegt <strong>und</strong> fortan von Open<strong>SSL</strong> für jedes geprüfte<br />

Zertifikat der Zertifikatskette aufgerufen. Ob die Open<strong>SSL</strong>-interne Zertifikatsprüfung<br />

einen Fehler ergeben hat, kann die Callback-Funktion über den<br />

ersten Parameter status er<strong>mit</strong>teln. Der zweite Parameter x509ctx enthält<br />

Zusatzinformationen zum aktuellen Zertifikat der Zertifikatskette. Über die<br />

X509_STORE_CTX_get_error()-Funktion läßt sich daraus z. B. die Ursache<br />

für eine mißlungene Zertifikatsüberprüfung extrahieren <strong>und</strong> die Funktion<br />

X509_STORE_CTX_get_error_depth() gibt darüber hinaus Auskunft, in welcher<br />

Tiefe innerhalb der Zertifikatshierarchie sich das aktuell bearbeitete Zertifikat<br />

befindet. Um schließlich an das betreffende Zertifikat selbst zu kommen,<br />

bedient man sich der Funktion X509_STORE_CTX_get_current_cert(), die<br />

eine Referenz auf das aktuelle X.509v3-Zertifikat liefert.<br />

#include<br />

<br />

int X509_STORE_CTX_get_error( X509_STORE_CTX *ctx );<br />

int X509_STORE_CTX_get_error_depth(<br />

X509_STORE_CTX *ctx );<br />

X509 *X509_STORE_CTX_get_current_cert(<br />

X509_STORE_CTX *ctx );<br />

Mit Hilfe der X509_verify_cert_error_string()-Funktion wird ein zuvor<br />

aus den Zusatzinformationen er<strong>mit</strong>telter Fehlercode in seine Textdarstellung<br />

umgewandelt.<br />

#include<br />

<br />

const char *X509_verify_cert_error_string( long e );<br />

X509_NAME *X509_get_issuer_name( X509 *cert );<br />

X509_NAME *X509_get_subject_name( X509 *cert );<br />

int X509_NAME_print_ex( BIO *out, X509_NAME *name,<br />

int indent , unsigned long flags );<br />

int X509_NAME_print_ex_fp( FILE *fp, X509_NAME *name,<br />

int indent , unsigned long flags );<br />

Um aus dem fraglichen Zertifikat die Distinguished Names der jeweiligen Zertifizierungsstelle<br />

(den Issuer) <strong>und</strong> des jeweiligen Zertifikatnehmers (das Subject)<br />

herauszufischen, stehen die beiden Funktionen X509_get_issuer_name() <strong>und</strong><br />

X509_get_subject_name() zur Verfügung. Die beiden Funktionen liefern die<br />

DNs in einer internen Darstellung vom Typ X509_NAME, dieüber die Hilfsfunktionen<br />

X509_NAME_print_ex() <strong>und</strong> X509_NAME_print_ex_fp() auf einem<br />

BIO oder einem Datenstrom ausgegeben werden kann. Die beiden Ausgabefunktionen<br />

sind in der Lage, den übergebenen DN speziell zu formatieren.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!