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.

7.2 Der <strong>SSL</strong>-Kontext 359<br />

13–18<br />

20–25<br />

Anschließend kümmert sich openssl_lib_init() um den Open<strong>SSL</strong>-eigenen<br />

PRNG. Sofern der Pseudozufallszahlengenerator noch nicht implizit initialisiert<br />

wurde, versucht die Funktion, geeignete Startwerte über einen Entropy<br />

Gathering Dæmon zu beschaffen. Falls der Zustand des PRNG im Anschluß<br />

immer noch unzureichend ist, kehrt die Hilfsfunktion <strong>mit</strong> dem Rückgabewert 0<br />

zurück <strong>und</strong> zeigt da<strong>mit</strong> an, daß der Pseudozufallszahlengenerator nicht über<br />

die benötigte Entropie verfügt. Das Programm sollte in einem solchen Fall<br />

abgebrochen werden.<br />

Lief bis zu diesem Punkt alles glatt, dann lädt die openssl_lib_init()-<br />

Funktion noch die Textdarstellungen der Fehlermeldungen <strong>und</strong> zeigt am Ende<br />

<strong>mit</strong> dem Rückgabewert 1 einen erfolgreichen Verlauf der Initialisierung an.<br />

1 #ifndef OPEN<strong>SSL</strong>_LIB_INIT_H<br />

2 #define OPEN<strong>SSL</strong>_LIB_INIT_H<br />

Beispiel 7.2. openssl-lib-init.h<br />

3<br />

4 #define EGD_SOCKET "/var/run/egd-pool"<br />

5<br />

6 int openssl_lib_init( void );<br />

7<br />

8 #endif<br />

Beispiel 7.2 zeigt die zugehörige Header-Datei, die neben dem Pfad des EGD-<br />

<strong>Sockets</strong> lediglich die openssl_lib_init()-Funktion vereinbart.<br />

7.2 Der <strong>SSL</strong>-Kontext<br />

Ein sogenannter <strong>SSL</strong>-Kontext stellt ein Gerüst für neue <strong>SSL</strong>-Verbindungen<br />

dar, indem er bestimmte Rahmenbedingungen für neue, am Kontext abgeleitete<br />

<strong>SSL</strong>-Verbindungen festschreibt. Eine besonders wichtige Rahmenbedingung<br />

ist dabei die Menge der vom Kontext bzw. den davon abgeleiteten<br />

<strong>SSL</strong>-Verbindungen unterstützten <strong>SSL</strong>/TLS-Protokolle (derzeit <strong>SSL</strong> 2.0,<br />

<strong>SSL</strong> 3.0, TLS 1.0 <strong>und</strong> TLS 1.1). Zusätzlich werden im Kontext aber noch die<br />

Liste der vertrauten Zertifizierungsstellen, die verwendeten Schlüssel, das zugehörige<br />

Zertifikat <strong>und</strong> einiges mehr hinterlegt. Anstatt diese Parameter für<br />

jede <strong>SSL</strong>-Verbindung von neuem zu bestimmen, werden die Informationen im<br />

<strong>SSL</strong>-Kontext zusammengefaßt <strong>und</strong> dann beim Anlegen neuer Verbindungen<br />

implizit berücksichtigt.<br />

Ein neuer <strong>SSL</strong>-Kontext wird über die Funktion <strong>SSL</strong>_CTX_new() erstellt. Ähnlich<br />

wie bei der BIO_new()-Funktion wird auch der <strong>SSL</strong>_CTX_new()-Funktion<br />

ein Bauplan für den neuen Kontext übergeben. Hierfür stehen derzeit die vier

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!