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 367<br />

wie folgt zu beschreiben: ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH. Diese Liste<br />

besagt, daß alle Chiffrenfolgen zugelassen sind, ausgenommen diejenigen<br />

<strong>mit</strong> anonymem Diffie-Hellman-Schlüsselaustausch (ADH),<strong>mit</strong>56bzw.64Bit<br />

Schlüssellänge (LOW), <strong>mit</strong> exportbeschränkter 40 bzw. 56 Bit Schlüssellänge<br />

(EXP) oder <strong>mit</strong> MD5-MACs (MD5). Die Liste der verbliebenen Chiffrenfolgen<br />

wird dann nach der verwendeten Schlüssellänge sortiert (@STRENGTH), so daß<br />

immer eine Chiffrenfolge <strong>mit</strong> möglichst starken Algorithmen ausgewählt wird.<br />

Konnte <strong>SSL</strong>_CTX_set_cipher_list() bzw. <strong>SSL</strong>_set_cipher_list() mindestens<br />

eine Chiffrenfolge aus der übergebenen Liste für den Kontext bzw. die<br />

<strong>SSL</strong>-Verbindung übernehmen, so liefern die Funktionen den Rückgabewert 1.<br />

Enthält die Zeichenkette keine akzeptable Chiffrenfolge, so geben die Funktionen<br />

den Wert 0 zurück. Ob die ausgesuchte Zeichenfolge sinnvoll gewählt ist<br />

<strong>und</strong> welche Algorithmen aufgr<strong>und</strong> der Auswahl letztendlich in Frage kommen,<br />

läßt sich wieder <strong>mit</strong> dem openssl-Kommando verifizieren:<br />

$ openssl ciphers -v ’ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH’<br />

DHE-RSA-AES256-SHA <strong>SSL</strong>v3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1<br />

DHE-DSS-AES256-SHA <strong>SSL</strong>v3 Kx=DH Au=DSS Enc=AES(256) Mac=SHA1<br />

AES256-SHA <strong>SSL</strong>v3 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA1<br />

EDH-RSA-DES-CBC3-SHA <strong>SSL</strong>v3 Kx=DH Au=RSA Enc=3DES(168) Mac=SHA1<br />

EDH-DSS-DES-CBC3-SHA <strong>SSL</strong>v3 Kx=DH Au=DSS Enc=3DES(168) Mac=SHA1<br />

DES-CBC3-SHA <strong>SSL</strong>v3 Kx=RSA Au=RSA Enc=3DES(168) Mac=SHA1<br />

DHE-RSA-AES128-SHA <strong>SSL</strong>v3 Kx=DH Au=RSA Enc=AES(128) Mac=SHA1<br />

DHE-DSS-AES128-SHA <strong>SSL</strong>v3 Kx=DH Au=DSS Enc=AES(128) Mac=SHA1<br />

AES128-SHA <strong>SSL</strong>v3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1<br />

DHE-DSS-RC4-SHA <strong>SSL</strong>v3 Kx=DH Au=DSS Enc=RC4(128) Mac=SHA1<br />

RC4-SHA <strong>SSL</strong>v3 Kx=RSA Au=RSA Enc=RC4(128) Mac=SHA1<br />

Mit diesem Hintergr<strong>und</strong>wissen können wir die Kontexterstellung aus Beispiel<br />

7.3 um einen wichtigen Baustein erweitern, indem wir den neuen <strong>SSL</strong>-<br />

Kontext sukzessive auf unsere Wünsche anpassen:<br />

1 /* <strong>SSL</strong>-Kontext für <strong>SSL</strong>v2 , <strong>SSL</strong>v3 <strong>und</strong> TLSv1 erstellen */<br />

2 if( ( ctx = <strong>SSL</strong>_CTX_new( <strong>SSL</strong>v23_method() ) ) == NULL )<br />

3 {<br />

4 printf( "Can’t create <strong>SSL</strong> context ...\n" );<br />

5 ERR_print_errors_fp( stdout );<br />

6 exit( EXIT_FAILURE );<br />

7 }<br />

8<br />

9 /* bitte kein <strong>SSL</strong> 2.0, dafür maximale Kompatibilität */<br />

10 <strong>SSL</strong>_CTX_set_options( ctx, <strong>SSL</strong>_OP_NO_<strong>SSL</strong>v2 | <strong>SSL</strong>_OP_ALL );<br />

11<br />

12 /* keine Wiederholungsanforderungen auf Anwendungsebene */<br />

13 <strong>SSL</strong>_CTX_set_mode( ctx, <strong>SSL</strong>_MODE_AUTO_RETRY );<br />

14

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!