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.

7.4 Client-/Server-Beispiel: SMTP <strong>mit</strong> SARTTLS 389<br />

Gebrauch wieder entschlüsselt werden muß. Für diese Aufgabe muß zunächst,<br />

auf welchem Weg auch immer, das zugehörige Paßwort erfragt werden. Die<br />

größtmögliche Flexibilität läßt sich hier wieder <strong>mit</strong> einer Callback-Funktion<br />

erreichen, die dann das benötigte Paßwort über geeignete Kanäle (z. B. durch<br />

Benutzereingabe oder kryptographische Geräte) er<strong>mit</strong>teln kann. Der Paßwort-<br />

Callback wird über die Hilfsfunktion <strong>SSL</strong>_CTX_set_default_passwd_cb() im<br />

<strong>SSL</strong>-Kontext hinterlegt. In der Praxis wird heutzutage aber meist auf eine<br />

Verschlüsselung des privaten Schlüssels verzichtet <strong>und</strong> die Vertraulichkeit des<br />

Schlüssels wird der Einfachheit halber lediglich über die Dateizugriffsrechte sichergestellt,<br />

weshalb wir an dieser Stelle nicht näher auf die Gestaltung dieser<br />

Callback-Funktion eingehen.<br />

7.4 Client-/Server-Beispiel: SMTP <strong>mit</strong> SARTTLS<br />

Wir vertiefen den sicheren Umgang <strong>mit</strong> digitalen Zertifikaten durch ein abschließendes<br />

Client-/Server-Beispiel. Das Clientprogramm aus Abschnitt 7.4.1<br />

stellt eine Variation des SMTP-Clients aus Beispiel 7.3 dar. Neben der gewissenhaften<br />

Überprüfung des vom Server präsentierten Zertifikats beherrscht<br />

der Client auch das in Abschnitt 6.2.2 beschriebene STARTTLS-Kommando.<br />

Das Serverprogramm aus Abschnitt 7.4.2 liefert dann das dazu passende,<br />

STARTTLS-fähige Gegenstück.<br />

Um die beiden Programme <strong>mit</strong>einander zu testen, benötigen Sie ein passendes<br />

X.509-Zertifikat für den Server. Wie Sie für diese Tests <strong>mit</strong> Hilfe des openssl-<br />

Kommandos ein eigenes X.509-Zertifikat ausstellen können, erfahren Sie bei<br />

Bedarf in Abschnitt A.1.<br />

7.4.1 Ein SMTP-Client <strong>mit</strong> STARTTLS<br />

15–31<br />

Nachdem der erweiterte SMTP-Client das STARTTLS-Kommando beherrschen<br />

soll, muß sich das Programm anstatt <strong>mit</strong> dem SMTPS-Port 465 <strong>mit</strong> entweder<br />

dem SMTP-Port 25 oder dem Submission-Port 587 verbinden. Die Kommunikation<br />

<strong>mit</strong> dem Mailserver startet ja zunächst im Klartext <strong>und</strong> wird erst nach<br />

dem STARTTLS-Handshake von einer <strong>SSL</strong>-Verbindung ummantelt (vgl. dazu<br />

Abschnitt 6.2.2 sowie RFC 3207 [Hof02]). Wir haben uns im vorliegenden Fall<br />

für Port 587 entschieden. Beispiel 7.9 <strong>und</strong> Beispiel 7.10 zeigen die erweiterte<br />

Neuimplementierung des SMTP-Clients:<br />

Die beiden Funktionen send_smtp_request() <strong>und</strong> print_smtp_response()<br />

kapseln die Kommunikation <strong>mit</strong> dem Mailserver. Beide Funktionen arbeiten<br />

auf dem übergebenen BIO-Objekt <strong>und</strong> funktionieren deshalb unabhängig davon,<br />

ob es sich bei der zugr<strong>und</strong>eliegenden Netzwerkverbindung um eine normale,<br />

ungeschützte TCP-Verbindung oder um eine gesicherte <strong>SSL</strong>-Verbindung<br />

handelt. Die Funktionen sind da<strong>mit</strong> so allgemein gehalten, daß sie sowohl vor

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!