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.

6.3 Open<strong>SSL</strong>-Basisfunktionalität 341<br />

Um für die neue <strong>SSL</strong>-Verbindung von Haus aus die weiter oben beschriebenen<br />

Wiederholungsanforderungen zu vermeiden, die im Falle der <strong>SSL</strong>-<br />

Kommunikation auch bei der blockierenden Ein-/Ausgabe auftreten können,<br />

wird im Normalfall für die Verbindung noch vor deren Aufbau das Flag<br />

<strong>SSL</strong>_MODE_AUTO_RETRY gesetzt. Diese Option wird über die <strong>SSL</strong>-Funktion<br />

<strong>SSL</strong>_set_mode(), auf die wir in Kapitel 7 noch eingehen werden, gesetzt. Die<br />

Funktion benötigt dazu Zugriff auf die zum BIO assoziierte <strong>SSL</strong>-Datenstruktur,<br />

die sich ggf. durch BIO_get_ssl() er<strong>mit</strong>teln läßt. Die Funktion bzw. das Makro<br />

BIO_get_ssl() liefert die <strong>mit</strong> dem BIO b verknüpfte <strong>SSL</strong>-Struktur im<br />

Parameter ssl zurück. Der Parameter ist dazu als Zeiger auf einen Zeiger<br />

ausgelegt.<br />

Sobald nun die Vorbereitungen für eine neue <strong>SSL</strong>-Verbindung abgeschlossen<br />

sind, kann für das BIO bzw. die BIO-Kette b der Verbindungsaufbau inklusive<br />

<strong>SSL</strong>-Handshake über die Funktion BIO_do_handshake() explizit angestoßen<br />

werden. Die Funktion liefert den Rückgabewert 1, wenn der Verbindungsaufbau<br />

geklappt hat <strong>und</strong> das Handshake-Verfahren erfolgreich abgeschlossen<br />

wurde. Ein Wert ≤ 0 zeigt an, daß der Aufbau der neuen <strong>SSL</strong>-Verbindung<br />

nicht erfolgreich beendet werden konnte.<br />

Das nachfolgende Programmfragment faßt die wesentlichen Schritte für den<br />

clientseitigen Aufbau einer neuen <strong>SSL</strong>-Verbindung kurz zusammen, verzichtet<br />

dabei aber der Übersichtlichkeit halber erneut auf die Fehlerbehandlung:<br />

1 /* <strong>SSL</strong>-BIO erstellen , <strong>SSL</strong>-Kontext bereits initialisiert */<br />

2 ssl_bio = BIO_new_ssl_connect( ctx );<br />

3<br />

4 /* assoziierte <strong>SSL</strong>-Struktur er<strong>mit</strong>teln */<br />

5 BIO_get_ssl( ssl_bio , &ssl );<br />

6<br />

7 /* Wiederholungsanforderungen für Verbindung verhindern */<br />

8 <strong>SSL</strong>_set_mode( ssl, <strong>SSL</strong>_MODE_AUTO_RETRY );<br />

9<br />

10 /* entfernten Endpunkt setzen: Host indien , Port 443 */<br />

11 BIO_set_conn_hostname( ssl_bio , "indien:https" );<br />

12<br />

13 /* TCP-Verbindung aufbauen <strong>und</strong> <strong>SSL</strong>-Handshake durchführen */<br />

14 BIO_do_handshake( ssl_bio );<br />

15<br />

16 /* HTTP-Request schicken */<br />

17 BIO_puts( ssl_bio , "GET / HTTP/1.0\n\n" );<br />

1–2<br />

Der Aufruf der BIO_new_ssl_connect() setzt in ctx einen bereits initialisierten<br />

<strong>SSL</strong>-Kontext voraus <strong>und</strong> erzeugt unter Verwendung dieses Kontexts<br />

eine neue BIO-Kette bestehend aus einem <strong>SSL</strong>-BIO <strong>und</strong> einem nachfolgenden<br />

Connect-BIO.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!