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.

378 7 Client-/Server-Programmierung <strong>mit</strong> Open<strong>SSL</strong><br />

54–63<br />

65–72<br />

Der Parameter flags bestimmt dabei, wie die Formatierung erfolgen soll <strong>und</strong><br />

indent legt die Tiefe der Einrückungen fest. Obwohl es gleich eine ganze Menge<br />

verschiedener Darstellungsmöglichkeiten gibt, sind die durch die zwei Flags<br />

XN_FLAG_ONELINE (Ausgabe in einer Zeile, durch Schrägstriche getrennt) <strong>und</strong><br />

XN_FLAG_MULTILINE (zeilenweise Ausgabe in Langform) bestimmten Ausgabeformate<br />

die beiden gebräuchlichsten Varianten.<br />

Mit Hilfe dieser Funktionen können wir nun in unserer Callback-Funktion<br />

einige hilfreiche Zusatzinformationen zum beanstandeten Zertifikat ausgeben:<br />

Als erstes er<strong>mit</strong>telt die Callback-Funktion den Fehlercode der Open<strong>SSL</strong>internen<br />

Zertifikatsprüfung sowie die Position des aktuell bearbeiteten Zertifikats<br />

in der Zertifikatskette. Ist die Open<strong>SSL</strong>-interne Verifikation erfolgreich<br />

verlaufen, so hat error den Wert X509_V_OK.<br />

Als nächstes prüft die verify_cert()-Funktion, ob die aktuelle Position innerhalb<br />

der Zertifikatskette bereits die maximale Tiefe von VERIFY_DEPTH<br />

Hierarchieebenen überschreitet. Dieser Fall kann durchaus auftreten, da wir in<br />

Beispiel 7.4 die Länge der Zertifikatskette über <strong>SSL</strong>_CTX_set_verify_depth()<br />

auf maximal VERIFY_DEPTH+1 gesetzt haben. Ist die Maximaltiefe überschritten,<br />

so weist die Funktion der Variablen error zur weiteren Verarbeitung den<br />

entsprechenden Fehlercode X509_V_ERR_CERT_CHAIN_TOO_LONG zu. Darüber<br />

hinaus muß über den Rückgabewert der Funktion angezeigt werden, daß die<br />

Überprüfung des Zertifikats fehlgeschlagen ist.<br />

Beispiel 7.5. openssl-util.c, Teil 2<br />

54 int verify_cert( int ok, X509_STORE_CTX *x509ctx )<br />

55 {<br />

56 X509 *cert;<br />

57 X509_NAME *subject , *issuer;<br />

58 int error, depth;<br />

59<br />

60 /* welcher Fehler ist aufgetreten <strong>und</strong> ... */<br />

61 error = X509_STORE_CTX_get_error( x509ctx );<br />

62 /* ... wo in der Zertifikathierachie befinden wir uns? */<br />

63 depth = X509_STORE_CTX_get_error_depth( x509ctx );<br />

64<br />

65 /* tiefer als die maximal gewünschte Hierarchietiefe? */<br />

66 if( depth > VERIFY_DEPTH )<br />

67 {<br />

68 /* falls ja, dann Fehlerursache setzen */<br />

69 error = X509_V_ERR_CERT_CHAIN_TOO_LONG;<br />

70 /* <strong>und</strong> Rückgabewert modifizieren */<br />

71 ok = 0;<br />

72 }<br />

73<br />

74 /* falls das Zertifikat nicht verifiziert werden konnte */<br />

75 if( ! ok )

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!