PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : OpenSSL, Socket Verbindung aufbauen


Schorschi
20.07.2006, 01:43
Hallo,

ich arbeite gerade an einem Client welcher sich in einem Webserver einloggen soll. Die verschiedenen request ob Get, Post und die Auswertung von Cookies und redirect bekomme ich hin.
Jetzt möchte ich das ganze auch per ssl Verbindung machen. Testumgebung Apache 2 mit openssl ist eingerichtet.
Programmierumgebung VC 6.0 C++
Sys: W2K

Über den theoretischen Ablauf habe ich schon etwas gelesen, von wegen Client sendet Hello an Server, Server sendet den öffenlichen Schlüssel etc. Also im Groben weiß ich ungefähr Bescheid über das Handshake verfahren.

Mein Problem ist jetzt das Coden.
Z.B. sende ich ja als erstes eine Anfrage per normalen Socket zum Webserver. Wie setzt sich dieser Request zusammen ?
Empfangende Daten, selbst verschlüsselte, denke ich mal sind weniger das Problem diese entsprechend zu entschlüsseln.

Ich denke mal das die Header, welche als Anfrage und Antwort zwischen Client und Server ausgetauscht werden, eine spezielle Syntax haben.

Kann mir vielleicht jemand von euch speziell auf das Thema Syntax im Verbindungsaufbau Tipps geben ?

Bitte keine Verweise auf openssl. Komme leider nicht so ganz mit dem englischen klar. Googeln half auch nicht viel, aber vielleicht habe ich mal wieder die Falschen Suchbegriffe genutzt.

Für Tutorials oder Links wäre ich auch dankbar.

Gruß Joerg


foobarflu
20.07.2006, 06:57
Mein Problem ist jetzt das Coden.
Z.B. sende ich ja als erstes eine Anfrage per normalen Socket zum Webserver. Wie setzt sich dieser Request zusammen ?
Empfangende Daten, selbst verschlüsselte, denke ich mal sind weniger das Problem diese entsprechend zu entschlüsseln.

Ich denke mal das die Header, welche als Anfrage und Antwort zwischen Client und Server ausgetauscht werden, eine spezielle Syntax haben.

Kann mir vielleicht jemand von euch speziell auf das Thema Syntax im Verbindungsaufbau Tipps geben ?
Äh... Du willst nicht wirklich SSL als Protokoll nachprogrammieren, oder?
Du willst eigentlich diese Sachen von openSSL erledigen lassen.

Vereinfacht gesagt tauscht Du jegliche Aufrufe von connect, read und write durch SSL_connect, SSL_read und SSL_write aus und openssl kümmert sich um den Rest.
Dann gibt es noch weitere komplizierte Spielereien wie die Verifikation der x509 Zertifikate usw.


Bitte keine Verweise auf openssl.
Würde auch nichts bringen, die openssl-Doku ist grauenhaft. Die von gnuTLS ist deutlich besser: http://www.gnu.org/software/gnutls/manual/gnutls.html

Komme leider nicht so ganz mit dem englischen klar. Dann hast Du ein Problem denn eine Doku von dem Umfang wie die von gnuTLS gibts nur in Englisch.

Schorschi
20.07.2006, 14:10
Du hast recht ich möchte die Verbindung erstellen und per Methoden von openssl bearbeiten.

Ich denke mal das es so funktioniert das ich die Verbindung zu Port 443 eines Webservers aufbaue, einen Request absetze und das Ergebnis per SSL_Read, SSL_write etc. weiter verarbeite.

Grauenhaft, naja, da Sagst du was.Ich hatte mal in einem eurer Threads gelesen das die LIB's von gnuTLS Fehler beim Compilieren erzeugen. Deshalb hatte ich das Thema gnuTLS erst mal abgeschrieben. Desweiteren war in dem Thread zwar gesagt das gnuTLS einfacher zu handhaben ist, aber nicht weit verbreitet ist und weniger Dokumentiert was mich hoffen lies, das es doch vielleicht irgendwo ne gescheite Anleitung gibt.


Das Grundlegende Problem ist wohl erst einmal, die Formulierung des Request an den Port 443. Es muß zum Beispiel erstmal eine Hello abgesetzt werden, darauf antwortet der Server mit dem öffentlichen Schlüssel u.s.w.

Zunächst einmal habe ich das Problem den Port 443 korrekt anzusprechen, ich brauche also erst mal die "Befehle" oder besser "Komandos" welche hin und her geschickt werden. wenn ich dann erst mal die Verbindung aufgebaut habe, denke ich kommt das Problem mit der grauenhaften Programmierung von openSSL, vielleicht auch gnuTLS, um die Antworten auszuwerten und das Handshake komplett zu machen.

Also erst mal muß ich den Port gescheit ansprechen können.

Gruß Joerg

badphantom
20.07.2006, 17:55
Moin,

ich hab' nicht den blassesten, wie man eine Socketverbindung ( programmierenderweise ) herstellt, aber wenn du Header - Normierungen suchst, kann ich dir helfen.

o.O

<- Vielleicht war das auch ne Themaverfehlung. In diesem Fall setzt mich auf eure Ignor-List.. :D

Schorschi
21.07.2006, 00:26
@badphantom

dann leg mal los, aber normierungen wie du sie nennst für den SSL Datenaustausch

Gruß Joerg