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.

394 7 Client-/Server-Programmierung <strong>mit</strong> Open<strong>SSL</strong><br />

109 print_smtp_response( bio );<br />

110<br />

111 /* gepuffertes BIO zur <strong>SSL</strong>-Kommunikation erstellen */<br />

112 if( ! ( bio = build_ssl_chain( bio ) ) )<br />

113 {<br />

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

115 ERR_print_errors_fp( stdout );<br />

116 exit( EXIT_FAILURE );<br />

117 }<br />

118<br />

119 if( ! openssl_match_host_cert( bio, argv[1] ) )<br />

120 {<br />

121 printf( "Failed to verify peer certificate: "<br />

122 "subjectAltName or commonName doesn ’t match %s\n",<br />

123 argv[1] );<br />

124 exit( EXIT_FAILURE );<br />

125 }<br />

126<br />

127 /* Frage/Antwort -Spielchen <strong>mit</strong> dem Server */<br />

128 send_smtp_request( bio, "EHLO indien\n" );<br />

129 print_smtp_response( bio );<br />

130 send_smtp_request( bio, "QUIT\n" );<br />

131 print_smtp_response( bio );<br />

132<br />

133 /* BIO freigeben <strong>und</strong> Verbindung beenden , Programmende */<br />

134 BIO_free_all( bio );<br />

135 exit( EXIT_SUCCESS );<br />

136 }<br />

104–109<br />

111–117<br />

Die Kommunikation <strong>mit</strong> dem Server erfolgt nun <strong>mit</strong> Hilfe der Funktionen<br />

send_smtp_request() <strong>und</strong> print_smtp_response() über die zuvor aufgebaute<br />

BIO-Kette. Als erstes erwartet der Client die Begrüßungsformel des<br />

Servers <strong>und</strong> reagiert darauf seinerseits <strong>mit</strong> einem EHLO. Nachdernächsten<br />

Antwort des Servers initiiert der SMTP-Client <strong>mit</strong> dem STARTTLS-Kommando<br />

das Upgrade der bestehenden Verbindung zu einer <strong>SSL</strong>-Verbindung. 10<br />

Nachdem der Server (hoffentlich) sein OK für das <strong>SSL</strong>-Upgrade gegeben hat,<br />

beginnt der Client, die <strong>SSL</strong>-Verbindung aufzusetzen. Mit Hilfe der Funktion<br />

build_ssl_chain() zerlegt er dazu, wie oben beschrieben, die bestehende<br />

Socket-BIO-Kette <strong>und</strong> fügt in der Mitte ein neues <strong>SSL</strong>-BIO ein. Die resultierende<br />

BIO-Kette lautet buffer→ssl→socket. Diebuild_ssl_chain()-<br />

Funktion führt darüber hinaus das <strong>SSL</strong>-Handshake durch. Während des<br />

10 Natürlich muß sich ein echter SMTP-Client um die Statuscodes in den Serverantworten<br />

kümmern <strong>und</strong> darf die Kommunikation <strong>mit</strong> dem Gegenüber nicht dermaßen<br />

blind vorantreiben, wie es in diesem stark vereinfachten Beispiel zu sehen<br />

ist.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!