OpenSSL: Implementierung innerhalb eines Client- und Server-Programms, Teil 1

Erster Test

Nun ist es an der Zeit für einen ersten Test. Da der Client erst im nächsten Teil folgt, soll der erste Test an der Stelle mit OpenSSL-Bordmitteln erfolgen. Die Verbindung zum WOPR-Server erfolgt vorerst mit dem s_client von OpenSSL.

Der Server lässt sich nun wie folgt starten:

./wopr <host>:<port> servercert.pem private.key

In der Kommandozeile finden sich neben dem Host (oder 0.0.0.0, :: oder *) und dem zu belauschenden Port noch das Server-Zertifikat (servercert.pem) und der dazugehörige private Schlüssel (private.key). Das Server-Zertifikat, das das Makefile erzeugt, ist "self-signed". Alternativ lässt sich auch ein von einer CA signiertes Zertifikat einsetzen.

Der folgende Befehl startet den s_client und verbindet ihn mit dem WOPR-Server:

openssl s_client -connect <host>:<port> -ssl3

Sowie sich der s_client mit dem Server verbunden hat, kann der Dialog analog zum Film
stattfinden. Die Befehle HELP LOGON, HELP GAMES und LIST GAMES lassen sich sowohl auf dem LOGON-Prompt als auch nach dem Logon eingeben. Sie antworten immer mit dem passenden Text.

Als Logon-Namen sind JOSHUA und MCKITTRICK definiert. Je nach Logon-Namen erscheint eine passende Begrüßungsmeldung. Nur nach dem Logon kann man die Befehle TIC-TAC-TOE, DISCONNECT, LOGOFF und alle in der Liste von LIST GAMES aufgeführten Spielenamen angeben.

Falsche Befehle und falsche Logon-Namen in der Logon-Phase führen zu einem Disconnect. Sie lassen sich als falsche Logons interpretieren. Falsche Befehle nach dem erfolgreichen Logon liefern eine Fehlermeldung darüber, dass der Befehl nicht gültig ist. Falsche Logon-Namen zeigen schön, wie ein Server die Verbindung trennt und der Client darauf reagiert. Ein DISCONNECT nach dem Logon zeigt hingegen, wie der Client die Verbindung trennt und der Server darauf reagiert.

Zugegeben, das Verhalten der Befehle ist nicht immer logisch. Es entspricht jedoch dem Dialog des Films. Was die Befehle an der Stelle für Reaktionen produzieren, ist technisch an der Stelle auch nicht wichtig. Das Programm zeigt jedoch, wie einfach es im Grunde ist, sichere Netzwerkkommunikation in C/C++-Programmen über OpenSSL bereitzustellen. Außerdem lässt sich der grundsätzliche Aufbau von WOPR auf andere, neue OpenSSL-Programme übertragen und dadurch als Schablone verwenden.

s_client bietet noch keine schöne Darstellung. Im zweiten Teil ändert sich das jedoch. Er geht auf die OpenSSL-Programmierung des Clients – das WOPR-Terminal – ein. (ane)

Oliver Müller
ist Geschäftsführer der OMSE Software Engineering GmbH. Er leitet die Bereiche Software Engineering, Nearshoring und IT-Sicherheit.