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

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

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

45–46<br />

48–49<br />

die Hilfsfunktionen nicht erfolgreich sind, wird der bereits angelegte <strong>SSL</strong>-<br />

Kontext wieder freigegeben <strong>und</strong> die openssl_create_ssl_ctx()-Funktion<br />

kehrt <strong>mit</strong> dem Fehlercode 0 zurück.<br />

Mittels <strong>SSL</strong>_CTX_set_verify() wird nun die Open<strong>SSL</strong>-interne Verifizierung<br />

der präsentierten Serverzertifikate für alle neuen, aus dem <strong>SSL</strong>-Kontext abgeleiteten<br />

<strong>SSL</strong>-Verbindungen aktiviert. Gleichzeitig wird die Callback-Funktion<br />

verify_cert() zur Nachbereitung der Zertifikatsüberprüfung eingetragen<br />

(siehe dazu Beispiel 7.5).<br />

Abschließend setzen wir die maximal akzeptierte Tiefe der Zertifikatshierarchie<br />

auf VERIFY_DEPTH+1. Die maximal gewünschte Tiefe VERIFY_DEPTH wird<br />

in openssl-util.h festgelegt. Leider erkennt Open<strong>SSL</strong> zwar das Überschreiten<br />

der maximalen Tiefe im Rahmen der Zertifikatsprüfung ordnungsgemäß,<br />

gibt dabei aber keine aussagekräftige Fehlermeldung zurück. Deshalb erhöhen<br />

wir entsprechend einem Beispiel aus der Open<strong>SSL</strong>-Dokumentation die Maximaltiefe<br />

an dieser Stelle künstlich auf VERIFY_DEPTH+1 <strong>und</strong> überprüfen dann<br />

im verify_cert()-Callback selbständig auf Überschreitung des tatsächlich<br />

geforderten Werts VERIFY_DEPTH.<br />

7.3.2 Zertifikatsüberprüfung per Callback nachbereiten<br />

Im Allgemeinen ist eine Nachbereitung der von Open<strong>SSL</strong> vorgenommenen<br />

Zertifikatsüberprüfung nicht notwendig. Es bietet sich jedoch an, über die<br />

Callback-Funktion die Ursache einer eventuell fehlgeschlagenen Prüfung zu<br />

protokollieren <strong>und</strong> dabei Zusatzinformationen über das beanstandete Zertifikat<br />

<strong>mit</strong> auszugeben. Diese Aufgabe übernimmt auch die Callback-Funktion<br />

aus Beispiel 7.5. Im konkreten Fall wollen wir aber zusätzlich auch noch<br />

die künstlich erhöhte Maximaltiefe der Zertifikatshierarchie (vgl. dazu Beispiel<br />

7.4) auf das eigentlich gewünschte Maß VERIFY_DEPTH zurechtstutzen.<br />

Bevor wir uns <strong>mit</strong> dem Beispielprogramm beschäftigen, werfen wir zunächst<br />

zum besseren Verständnis einen Blick auf den Aufbau eines <strong>SSL</strong>-Zertifikats:<br />

Abbildung 7.1 zeigt in ASN.1-Notation 5 die in RFC 3280 [HFPS02] festgelegte<br />

Struktur eines solchen X.509v3-Zertifikats 6 [Gut00]. Das Zertifikat besteht<br />

zum einen aus den verschiedenen Zertifikatsinformationen (in der Struktur<br />

tbsCertificate) <strong>und</strong> zum anderen aus der digitalen Unterschrift der Zertifizierungsstelle<br />

(signatureValue) sowie einer Referenz auf den hierfür verwendeten<br />

kryptographischen Algorithmus (signatureAlgorithm). Die Struktur<br />

tbsCertificate enthält ihrerseits mehrere Komponenten <strong>mit</strong> weiterführenden<br />

Zertifikatsinformationen. So wird z. B. jedem Zertifikat über das Attribut<br />

serialNumber eine eindeutige Seriennummer zugewiesen, die Komponente<br />

5 Die Abstract Syntax Notation One (ASN.1) ist eine Beschreibungssprache zur<br />

abstrakten Definition von Datenstrukturen.<br />

6 X.509v3 bezeichnet die aktuelle Version 3 des De-Facto-Standards für Public-<br />

Key-Infrastrukturen (PKI) <strong>und</strong> digitale Zertifikate.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!