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.

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

stammt, die vom Programm bzw. vom Nutzer im Vorfeld als vertrauenswürdig<br />

eingestuft wurde. Auf Wunsch wird auch diese Aufgabe von<br />

Open<strong>SSL</strong> im Verlauf des <strong>SSL</strong>-Handshakes automatisch abgedeckt, wobei<br />

natürlich die Liste der vertrauenswürdigen Zertifizierungsstellen von der<br />

Anwendung explizit bereitgestellt werden muß. Die Software bildet dazu<br />

eine Zertifikatskette vom fraglichen Zertifikat über die ausstellende CA<br />

bis hin zu einer vertrauten Zertifizierungsstelle <strong>und</strong> prüft dann über festgelegte<br />

Regeln die Gültigkeit dieser Kette.<br />

3. Konnte nachgewiesen werden, daß das Zertifikat gültig ist <strong>und</strong> von einer<br />

vertrauenswürdigen Zertifizierungsstelle abstammt, so gilt es als letztes<br />

zu klären, ob Kommunikationspartner <strong>und</strong> Zertifikat zusammenpassen.<br />

Dieser Arbeitsschritt liegt komplett im Aufgabenbereich der Anwendung<br />

<strong>und</strong> muß daher eigenständig umgesetzt werden.<br />

Die Open<strong>SSL</strong>-interne Zertifikatsprüfung (Schritte 1 <strong>und</strong> 2) wird durch Aufruf<br />

der <strong>SSL</strong>_CTX_set_verify()-Funktion für den angegebenen <strong>SSL</strong>-Kontext<br />

bzw. durch Aufruf von <strong>SSL</strong>_set_verify() für eine einzelne <strong>SSL</strong>-Verbindung<br />

aktiviert. Die Funktionen haben keinen Rückgabewert. Neben einer Referenz<br />

auf den Kontext bzw. die <strong>SSL</strong>-Verbindung erwarten die beiden Funktionen im<br />

Bitfeld mode genauere Anweisungen, ob <strong>und</strong> wie ggf. die Prüfung erfolgen soll.<br />

Im Wesentlichen wird dabei zwischen den beiden Modi <strong>SSL</strong>_VERIFY_NONE <strong>und</strong><br />

<strong>SSL</strong>_VERIFY_PEER unterschieden:<br />

<strong>SSL</strong> VERIFY NONE: Ist die Option <strong>SSL</strong>_VERIFY_NONE in einem <strong>SSL</strong>-Client gesetzt,<br />

so prüft Open<strong>SSL</strong> zwar während des Verbindungsaufbaus das Server-<br />

Zertifikat der Gegenstelle, ein ungültiges oder von der falschen“ Zertifizierungsstelle<br />

ausgestelltes Zertifikat führt aber nicht zum Abbruch des<br />

”<br />

<strong>SSL</strong>-Handshakes.<br />

Ist die Option auf der Server-Seite gesetzt, so verlangt der Server vom<br />

Client beim Aufbau der <strong>SSL</strong>-Verbindung kein Client-Zertifikat.<br />

Das <strong>SSL</strong>_VERIFY_NONE-Flag darf nicht <strong>mit</strong> einem der anderen Flags kombiniert<br />

werden.<br />

<strong>SSL</strong> VERIFY PEER: Ist die Option <strong>SSL</strong>_VERIFY_PEER clientseitig gesetzt, so erwartet<br />

der Client vom Server ein <strong>SSL</strong>-Zertifikat. Das von der Gegenstelle<br />

über<strong>mit</strong>telte Server-Zertifikat wird entsprechend den oben aufgeführten<br />

Arbeitsschritten 1 <strong>und</strong> 2 überprüft. 2 Sofern die Prüfung fehlschlägt, wird<br />

das <strong>SSL</strong>-Handshake umgehend abgebrochen <strong>und</strong> eine entsprechende Fehlermeldung<br />

hinterlegt.<br />

2 Lediglich wenn Chiffrenfolgen <strong>mit</strong> anonymem Schlüsselaustausch zugelassen sind,<br />

schickt der Server im Rahmen des <strong>SSL</strong>-Handshakes kein Zertifikat an den Client.<br />

Derartige Chiffrenfolgen werden in den vorliegenden Beispielen aber durch die<br />

zuvor beschriebene Chiffrenliste explizit unterb<strong>und</strong>en.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!