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.

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

15 /* schwache Verschlüsselungsalgorithmen ausschließen */<br />

16 if( ! <strong>SSL</strong>_CTX_set_cipher_list( ctx,<br />

17 "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH" ) )<br />

18 {<br />

19 printf( "Can’t set cipher list ...\n" );<br />

20 ERR_print_errors_fp( stdout );<br />

21 exit( EXIT_FAILURE );<br />

22 }<br />

1–7<br />

9–10<br />

12–13<br />

15–22<br />

Anstatt sich auf das TLS-Protokoll zu beschränken, erstellt das Programm<br />

zunächst einen <strong>SSL</strong>-Kontext, der neben TLS auch die Protokolle <strong>SSL</strong> 2.0 <strong>und</strong><br />

<strong>SSL</strong> 3.0 unterstützt.<br />

Als erstes wird dann der Umfang der unterstützten Protokolle reduziert indem<br />

das als nicht sicher eingestufte <strong>SSL</strong> 2.0 <strong>mit</strong>tels <strong>SSL</strong>_OP_NO_<strong>SSL</strong>v2 nachträglich<br />

aus dem Kontext ausgeschlossen wird. Zusätzlich versuchen wir, unser Clientprogramm<br />

so kompatibel wie möglich zu gestalten <strong>und</strong> verordnen deshalb <strong>mit</strong><br />

<strong>SSL</strong>_OP_ALL, daß alle bekannten Probleme in der <strong>SSL</strong>-Implementierung der<br />

Kommunikationspartner so tolerant wie möglich behandelt werden.<br />

Anschließend veranlaßt das Programm die ssl-Bibliothek, eventuell auftretende<br />

Wiederholungsanforderungen nicht an die Anwendung weiterzugeben.<br />

Für alle im weiteren Verlauf aus diesem Kontext hervorgehenden <strong>SSL</strong>-<br />

Verbindungen gilt deshalb, daß Wiederholungsanforderungen von Open<strong>SSL</strong><br />

stets intern behandelt werden.<br />

Als letztes wird die Liste der zulässigen Chiffrenfolgen entsprechend der obigen<br />

Ausführungen für den <strong>SSL</strong>-Kontext festgelegt. Sofern keine der angegebenen<br />

Chiffrenfolgen in den <strong>SSL</strong>-Kontext übernommen werden kann, löst das<br />

Programm eine entsprechende Fehlermeldung aus <strong>und</strong> beendet sich.<br />

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

Wie bereits erwähnt, fehlt zum Aufbau einer sicheren <strong>SSL</strong>-Verbindung noch<br />

ein wesentlicher Schritt: die Überprüfung des vom Server präsentierten <strong>SSL</strong>-<br />

Zertifikats. Diese wichtige Aufgabe gliedert sich in drei Teilschritte:<br />

1. Das Programm muß testen, ob das präsentierte Zertifikat überhaupt gültig<br />

ist. In Analogie zur Überprüfung eines Reisepasses wird hierbei u. a. die<br />

Gültigkeitsdauer des Zertifikats (gültig von/gültig bis) verifiziert. Für diese<br />

Aufgabe stellt Open<strong>SSL</strong> eine geeignete Funktion zur Verfügung, welche<br />

während des <strong>SSL</strong>-Handshakes alle notwendigen Tests absolviert.<br />

2. Liegt ein gültiges Zertifikat vor, muß über die digitale Unterschrift geklärt<br />

werden, ob die Beglaubigung tatsächlich von einer Zertifizierungsstelle

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!