Zahn | Unix-Netzwerkprogrammierung mit Threads, Sockets und SSL | E-Book | www.sack.de
E-Book

E-Book, Deutsch, 434 Seiten

Reihe: X.systems.press

Zahn Unix-Netzwerkprogrammierung mit Threads, Sockets und SSL


2006
ISBN: 978-3-540-38302-4
Verlag: Springer Berlin Heidelberg
Format: PDF
Kopierschutz: 1 - PDF Watermark

E-Book, Deutsch, 434 Seiten

Reihe: X.systems.press

ISBN: 978-3-540-38302-4
Verlag: Springer Berlin Heidelberg
Format: PDF
Kopierschutz: 1 - PDF Watermark





Markus Zahn war nach Abschluß seines Mathematik-Studiums im Jahr 1994 als wissenschaftlicher Mitarbeiter am Lehrstuhl für Informatik I an der Universität Augsburg tätig und hat dort 1999 mit einer umfassenden Dissertation zum Thema 'Konsistenzmechanismen in Software-DSM-Systemen' promoviert. Seit 1997 leitet Herr Zahn die Arbeitsgruppe 'Betriebssysteme und parallele Server' am Rechenzentrum der Uni Augsburg. Die thematischen Schwerpunkte seiner Arbeit liegen in der parallelen und verteilten Programmierung von UNIX-Clustern und in den Bereichen POSIX-Threads, Remote Procedure Calls und Message Passing.

Zahn Unix-Netzwerkprogrammierung mit Threads, Sockets und SSL jetzt bestellen!

Autoren/Hrsg.


Weitere Infos & Material


1;Vorwort;5
2;Inhaltsverzeichnis;9
3;Beispielprogramme;13
4;1 Einführung;16
4.1;1.1 TCP/IP-Grundlagen;17
4.1.1;1.1.1 Netzwerkschicht;18
4.1.2;1.1.2 Internet-Schicht;19
4.1.3;1.1.3 Transportschicht;20
4.1.4;1.1.4 Anwendungsschicht;21
4.2;1.2 Internet-Standards;21
4.3;1.3 Unix-Standards;22
5;2 Programmieren mit Unix-Prozessen;24
5.1;2.1 Unix-Prozesse;24
5.1.1;2.1.1 Prozeßgruppen und Sessions;25
5.1.2;2.1.2 Kontrollierendes Terminal;27
5.1.3;2.1.3 Verwaiste Prozesse und verwaiste Prozeßgruppen;28
5.1.4;2.1.4 Prozeßumgebung;29
5.1.5;2.1.5 Lebenszyklus;30
5.1.6;2.1.6 User- und Gruppen-ID;35
5.2;2.2 Ein- und Ausgabe;36
5.2.1;2.2.1 Dateideskriptoren;36
5.2.2;2.2.2 Elementare Ein- und Ausgabe;39
5.2.3;2.2.3 Standardeingabe und -ausgabe;50
5.2.4;2.2.4 Ausgabe über den Syslog- Dienst;56
5.3;2.3 Buffer-Overflows und Format-String-Schwachstellen;60
5.3.1;2.3.1 Buffer-Overflows;62
5.3.2;2.3.2 Format-String-Schwachstellen;69
5.3.3;2.3.3 Geeignete Gegenmaßnahmen;72
5.4;2.4 Signale;73
5.4.1;2.4.1 Signale behandeln;74
5.4.2;2.4.2 Signale blockieren;83
5.4.3;2.4.3 Signale annehmen;87
5.4.4;2.4.4 Signale generieren;89
5.5;2.5 Prozeflkontrolle;91
5.5.1;2.5.1 Was bin ich? Prozeß-IDs und mehr;92
5.5.2;2.5.2 Neue Prozesse erzeugen;94
5.5.3;2.5.3 Prozesse synchronisieren;98
5.5.4;2.5.4 Zombie-Prozesse;104
5.5.5;2.5.5 Andere Programme ausführen;105
5.5.6;2.5.6 User- und Group-IDs wechseln;109
5.6;2.6 Dæmon-Prozesse;111
6;3 Programmieren mit POSIX-Threads;118
6.1;3.1 Grundlagen;119
6.1.1;Ready:;124
6.1.2;Running:;124
6.1.3;Blocked:;124
6.1.4;Terminated:;124
6.2;3.2 Synchronisation;130
6.2.1;3.2.1 Race Conditions und kritische Bereiche;131
6.2.2;3.2.2 Gegenseitiger Ausschluß;135
6.2.2.1;Mutexe erstellen und verwerfen;135
6.2.2.2;Mutexe sperren und wieder freigeben;136
6.2.2.3;Mutexe praktisch einsetzen;137
6.2.3;3.2.3 Bedingungsvariablen;141
6.2.3.1;Bedingungsvariablen erstellen und verwerfen;141
6.2.3.2;Auf Bedingungsvariablen warten;142
6.2.3.3;Bedingungsvariablen signalisieren;144
6.2.3.4;Mutexe und Bedingungsvariablen einsetzen;145
6.3;3.3 Pthreads und Unix-Prozesse;150
6.3.1;3.3.1 Threadsichere und eintrittsinvariante Funktionen;150
6.3.1.1;Threadsicherheit:;150
6.3.1.2;Eintrittsinvarianz:;150
6.3.2;3.3.2 Fehlerbehandlung und errno;152
6.3.3;3.3.3 Signalverarbeitung;153
6.3.4;3.3.4 fork() und exec() in Pthreads-Programmen;159
7;4 Grundlagen der Socket-Programmierung;162
7.1;4.1 Erste Schritte mit telnet und inetd;162
7.1.1;4.1.1 Das telnet-Kommando als Netzwerk-Client;162
7.1.1.1;Beliebige Dienste ansprechen;163
7.1.1.2;Kommunikation mit einem Mailserver;164
7.1.1.3;Zusammenfassung;166
7.1.2;4.1.2 Einfache Netzwerkdienste mit dem inetd;167
7.2;4.2 IP-Namen und IP-Adressen;171
7.2.1;4.2.1 Das Domain Name System;172
7.2.2;4.2.2 IPv4-Adressen;174
7.2.2.1;Klasse A:;175
7.2.2.2;Klasse B:;176
7.2.2.3;Klasse C:;176
7.2.2.4;Klasse D:;176
7.2.2.5;Klasse E:;177
7.2.2.6;CIDR – Classless Inter-Domain Routing;177
7.2.2.7;Private IP-Adressen;178
7.2.3;4.2.3 IPv6-Adressen;179
7.3;4.3 Sockets;194
7.3.1;4.3.1 Socket anlegen;195
7.3.2;4.3.2 Socket-Strukturen;197
7.3.2.1;IPv4 Socket-Adreßstruktur;197
7.3.2.2;IPv6 Socket-Adreßstruktur;197
7.3.2.3;Generische Socket-Adreßstrukturen;198
7.3.3;4.3.3 Client-seitiger TCP-Verbindungsaufbau;199
7.3.4;4.3.4 Socket-Adressen zuweisen;204
7.3.5;4.3.5 Annehmende Sockets;207
7.3.6;4.3.6 TCP-Verbindungen annehmen;209
7.3.7;4.3.7 Drei-Wege-Handshake und TCP-Zustandsübergänge;214
7.3.8;4.3.8 Kommunikation über UDP;220
7.3.9;4.3.9 Standardeingabe und -ausgabe über Sockets;227
7.3.10;4.3.10 Socket-Adressen ermitteln;228
7.3.11;4.3.11 Multiplexing von Netzwerkverbindungen;233
7.3.12;4.3.12 Socket-Optionen;238
7.4;4.4 Namensaulösung;242
8;5 Netzwerkprogrammierung in der Praxis;250
8.1;5.1 Aufbau der Testumgebung;251
8.1.1;5.1.1 Funktionsumfang der Testumgebung;252
8.1.2;5.1.2 Hilfsfunktionen für die Socket- Kommunikation;253
8.1.3;5.1.3 Der Test-Client;264
8.2;5.2 Iterative Server;270
8.2.1;5.2.1 Sequentielle Verarbeitung der Anfragen;271
8.2.2;5.2.2 Clientbehandlung;274
8.2.3;5.2.3 Hilfsfunktionen zur Laufzeitmessung;277
8.2.4;5.2.4 Eigenschaften und Einsatzgebiete;279
8.3;5.3 Nebenläufige Server mit mehreren Threads;281
8.3.1;5.3.1 Abgewandelte Signalbehandlung;282
8.3.2;5.3.2 Ein neuer Thread pro Client;283
8.3.3;5.3.3 Das Hauptprogramm als Signalverarbeiter;285
8.3.4;5.3.4 Eigenschaften und Einsatzgebiete;287
8.4;5.4 Nebenläufige Server mit Prethreading;289
8.4.1;5.4.1 Clientbehandlung mittels paralleler Accept-Handler;290
8.4.2;5.4.2 Das Hauptprogramm als Signalverarbeiter;292
8.4.3;5.4.3 Eigenschaften und Einsatzgebiete;294
8.5;5.5 Nebenläufige Server mit mehreren Prozessen;296
8.5.1;5.5.1 Anpassung der Signalbehandlung;297
8.5.2;5.5.2 Ein neuer Prozeß pro Client;299
8.5.3;5.5.3 Das Hauptprogramm;301
8.5.4;5.5.4 Eigenschaften und Einsatzgebiete;302
8.6;5.6 Nebenläufige Server mit Preforking;304
8.6.1;5.6.1 Buchführende Signalbehandlung;305
8.6.2;5.6.2 Parallele Accept-Handler in mehreren Prozessen;307
8.6.3;5.6.3 Preforking im Hauptprogramm;309
8.6.4;5.6.4 Eigenschaften und Einsatzgebiete;311
8.7;5.7 Zusammenfassung;313
9;6 Netzwerkprogrammierung mit SSL;316
9.1;6.1 Strategien zur Absicherung des Datenverkehrs;317
9.1.1;6.1.1 Datenverschlüsselung;319
9.1.2;6.1.2 Hashfunktionen und Message Authentication Codes;322
9.1.3;6.1.3 Digitale Signaturen;323
9.1.4;6.1.4 Zertifizierungsstellen und digitale Zertifikate;324
9.1.5;6.1.5 Praktische Absicherung des Datenverkehrs;325
9.2;6.2 SSL-Grundlagen;328
9.2.1;6.2.1 Datentransfer über SSL;329
9.2.2;6.2.2 Anwendungsprotokolle um SSL erweitern;332
9.2.3;6.2.3 SSL-Verbindungen interaktiv testen;336
9.3;6.3 OpenSSL-Basisfunktionalität;338
9.3.1;6.3.1 Das Konzept der BIO-API;339
9.3.2;6.3.2 Lebenszyklus von BIO-Objekten;340
9.3.3;6.3.3 Ein-/Ausgabe über BIO-Objekte;341
9.3.4;6.3.4 BIO-Quellen/Senken und BIO-Filter;344
9.3.5;6.3.5 Fehlerbehandlung;357
9.3.6;6.3.6 Thread-Support;360
9.3.7;6.3.7 Pseudozufallszahlengenerator;367
10;7 Client-/Server-Programmierung mit OpenSSL;372
10.1;7.1 Initialisierung der ssl-Bibliothek;372
10.2;7.2 Der SSL-Kontext;374
10.2.1;7.2.1 Ein unvollständiger SSMTP- Client;375
10.2.2;7.2.2 SSL-Optionen, SSL-Modi und Chiffrenfolgen;379
10.3;7.3 Sicherer Umgang mit X.509-Zertifikaten;383
10.3.1;7.3.1 Zertifikatsüberprüfung aktivieren;387
10.3.2;7.3.2 Zertifikatsüberprüfung per Callback nachbereiten;389
10.3.3;7.3.3 Identitätsabgleich mit digitalen Zertifikaten;395
10.3.4;7.3.4 SSL-Kommunikation mit eigener Identität;402
10.4;7.4 Client-/Server-Beispiel: SMTP mit SARTTLS;404
10.4.1;7.4.1 Ein SMTP-Client mit STARTTLS;404
10.4.2;7.4.2 Ein SMTP-Server mit STARTTLS;412
10.5;7.5 Zusammenfassung;421
11;Anhang;424
11.1;A.1 Zertifikate erstellen mit OpenSSL;424
11.1.1;A.1.1 Aufbau einer Zerti.zierungsstelle;424
11.1.2;Erzeugen eines geheimen CA-Schl ¨ ussels;425
11.1.3;Erzeugen des CA-Zerti.kats;425
11.1.4;CA-Dateien speichern;426
11.1.5;A.1.2 Neue Zerti.kate ausstellen;427
11.1.6;Certi.cate Signing Request erzeugen;427
11.1.7;Certi.cate Signing Request signieren;428
11.1.8;A.1.3 Vertrauensw ¨ urdige Zerti . zierungsstellen;429
11.2;A.2 Barrieren mit POSIX-Threads;430
12;Literaturverzeichnis;438
13;Sachverzeichnis;442


6 Netzwerkprogrammierung mit SSL (S. 301-302)

Die Entwicklung der Unix-Betriebssysteme ist eng mit der Entwicklung des Internets verknüpft: Die schier unendlichen Möglichkeiten, die sich aus der Unix-Netzwerkprogrammierung ergaben, bereiteten im Zusammenspiel mit den Anfängen des Internets den Weg für eine Vielzahl von Netzwerkdiensten und darauf aufbauenden Dienstleistungen. Mit der Einführung des am Europäischen Kernforschungszentrum CERN entwickelten Netzwerkdiensts World Wide Web (WWW) schaffte das Internet schließlich den Sprung heraus aus der Welt der Forschung und der Wissenschaft. Über das WWW wurde von Internetnutzern aus der ganzen Welt binnen relativ kurzer Zeit eine bis dahin unvorstellbare Menge an Informationen bereitgestellt und miteinander verwoben, weshalb der Begriff "Internet" seitdem umgangssprachlich häufig mit dem World Wide Web gleichgesetzt wird. Aufgrund seiner Informationsvielfalt verzeichnete das Internet ab Mitte der Neunziger Jahre ein rasantes Wachstum von damals gut 1,3 Millionen angeschlossen Rechnern (Januar 1993) zu nunmehr knapp 400 Millionen miteinander vernetzten Systemen (Januar 2006).

Immer mehr Privatanwender, insbesondere auch Computerlaien, machen seither von dieser weltumspannenden Informationsquelle Gebrauch, was Zug um Zug auch zu immer mehr kommerziellen Angeboten im Netz führte (und immer noch führt). Das Internet ist damit inzwischen von einem Netz für Universitäten und Forschungseinrichtungen zum ubiquitären Informations- und Kommunikationsmedium avanciert. Viele neue Dienste wie etwa die elektronische Post (EMail), das Telefonieren über das Internet (IP-Telefonie, VoIP), das Einkaufen über das Internet (Online-Shopping), der elektronische Zahlungsverkehr (Online-Banking), die elektronische Steuererklärung (ELSTER) oder auch das sogenannte E-Government verlangen eine Personalisierung ihrer Dienst leistungen.

Niemand soll schließlich unberechtigten Zugriff auf das Konto Dritter haben, unter einer falschen Identität Waren einkaufen oder gar eine Steuererklärung abgeben können. Die Benutzer müssen sich also gegenüber den angesprochenen Diensten ausweisen können und dabei müssen dann letztendlich auch sensible Daten verwaltet und über das (unsichere) Netzwerk übertragen werden. Die IT-Sicherheit spielt damit in solchen Systemen eine zentrale Rolle. Im weiteren Verlauf dieses Kapitels wollen wir deshalb aus dem weiten Themenfeld der IT-Sicherheit einen für die Unix-Netzwerkprogrammierung relevanten Baustein herausgreifen: die sichere Datenübertragung über ein IPbasiertes Netzwerk.

6.1 Strategien zur Absicherung des Datenverkehrs

Die Absicherung des Datenverkehrs zwischen zwei Kommunikationspartnern dreht sich, anders als gemeinhin angenommen, in der Regel nicht nur um die reine Verschlüsselung der zu übertragenden Daten. Die Herausforderungen, die bei der sicheren Datenübetragung zu meistern sind, sind gleichzeitig die vier Hauptziele der modernen Kryptographie und werden Schutzziele der ITSicherheit genannt: Vertraulichkeit: Nur der gewünschte Empfänger einer vertraulichen Nachricht soll in der Lage sein, den Inhalt der Nachricht zu lesen. Um die Vertraulichkeit zu gewährleisten, muß also sichergestellt werden, daß der Inhalt einer Mitteilung nur von der Person bzw. dem System gelesen werden kann, für die bzw. für das der Absender seine Mitteilung bestimmt hat. Darüber hinaus sollte es für Unbefugte nicht einmal möglich sein, abgeleitete Informationen über den eigentlichen Nachrichteninhalt (etwa eine statistische Verteilung bestimmter Zeichen) zu erlangen.



Ihre Fragen, Wünsche oder Anmerkungen
Vorname*
Nachname*
Ihre E-Mail-Adresse*
Kundennr.
Ihre Nachricht*
Lediglich mit * gekennzeichnete Felder sind Pflichtfelder.
Wenn Sie die im Kontaktformular eingegebenen Daten durch Klick auf den nachfolgenden Button übersenden, erklären Sie sich damit einverstanden, dass wir Ihr Angaben für die Beantwortung Ihrer Anfrage verwenden. Selbstverständlich werden Ihre Daten vertraulich behandelt und nicht an Dritte weitergegeben. Sie können der Verwendung Ihrer Daten jederzeit widersprechen. Das Datenhandling bei Sack Fachmedien erklären wir Ihnen in unserer Datenschutzerklärung.