BigBastis Blog

SSL Teil 3: Der SSL Handshake

Introduction

user

Sebastian Gross

Sebastian Gross arbeitet in Bielefeld als Softwareentwickler für .NET und Java im Bereich Web.Als Fan der .NET-Plattform lässt er sich kein Userguppen Treffen und Community Event im Raum OWL entgehen.Dabei hat er eine besondere Vorliebe für das ASP.NET MVC Framework und für das Test Driven Development (TDD) entwickelt.


LATEST POSTS

Handling too long scrollspy menus 10th June, 2015

Java: Create ZIP archive 23rd March, 2015

Allgemein

SSL Teil 3: Der SSL Handshake

Posted on .
SSL Darstellung

SSL im Browser

Links im Chrome rechts im Internet Explorer 8

SSL (Secure Socket Layer) sollte wohl den meisten ein Begriff sein, das ist dieses lustige kleine „s“ was manchmal hinter dem „http“ in der Adresszeile des Browsers auftaucht (siehe Bild). In dieser Serie möchte ich euch erklären wie SSL in der Theorie funktioniert und wie ihr es in euren Applikationen nutzen könnt.

In diesem Teil möchte ich etwas tiefer graben und mit euch zusammen den SSL Handshake durchgehen. Der gesamte Prozess, den der Client und der Server beim Verbindungsaufbau durchläuft nennt sich Handshake. Die Parteien tauschen also alle nötigen Informationen aus um eine Verbindung aufbauen zu können.

Der Handshake

Ist der Handshake durchlaufen, so ist die Verbindung erfolgreich hergestellt und die verschlüsselte Kommunikation kann beginnen. Aber mal von vorn.

Eine verschlüsselte Verbindung, wie der Name schon sagt ist verschlüsselt, aber es gibt verschiedene Verschlüsselungsverfahren. So werden, wenn man von SSL spricht, eigentlich zwei Verfahren eingesetzt, nämlich zunächst die asymmetrische Verschlüsselung um den geheimen Schlüssel auszutauschen und dann die symmetrische Verschlüsselung (mit Hilfe des geheimen Schlüssels) um die eigentlich Kommunikation zu verschlüsseln.

Den gesamten Ablauf des Handshakes kann man ganz gut der Wikipedia Grafik entnehmen. Keine Angst, diese ist nicht so kompliziert wie sie aussieht.

Im ersten Schritt werden Zufallszahlen generiert und ausgetauscht. Anschließend schickt der Server seinen Public Key zum Client zur Prüfung und verlangt gleich auch ein Clientzertifikat (nur bei einer beidseitigen Authentifizierung).

Wenn der Client das Serverzertifikat akzeptiert schickt er seinen Public Key zum Server (bei einer beidseitigen Authentifizierung) welchen der Server nun prüfen (und akzeptieren) muss. Anschließend verschlüsselt der Client seine bisherigen Nachrichten mit seinem privaten Schlüssel und schickt diese an den Server, damit er prüfen kann, ob die bisher empfangenen Nachrichten auch wirklich von dem Client kamen und man nicht einer Man-In-The-Middle Attake o.ä. zum Opfer gefallen ist.

Nun erzeugt der Client mit Hilfe des Öffentlichen Schlüssels vom Server das so genannte Premaster Secret und schickt diesen an den Server. An dieser Stelle haben der Client und der Server alle wichtigen Informationen ausgetauscht und können nun beide das so genannte Mastersecret aus den am Anfang genereirten Zufallszahlen und dem Premaster Secret erzeugen.

Dieses Mastersecret wird nun dazu genutzt um die weitere Kommunikation symmetrisch zu verschlüsseln. Somit ist nun der SSL Handshake abgeschlossen und die Verbindung erfolgreich aufgebaut.

Im Grunde ist das alles auch ziemlich simpel, hat man den Ablauf ein paar mal im Kopf durchgespielt wird der recht logische Ablauf auch gut verständlich!

Teil 1: Serverseitige Authentifizierung und Zertifikate
Teil 2: Beidseitige Authentifizierung
Teil 3: Der SSL Handshake
Teil 4: Serverseitige Authentifizierung mit Java

profile

Sebastian Gross

http://www.bigbasti.com

Sebastian Gross arbeitet in Bielefeld als Softwareentwickler für .NET und Java im Bereich Web.Als Fan der .NET-Plattform lässt er sich kein Userguppen Treffen und Community Event im Raum OWL entgehen.Dabei hat er eine besondere Vorliebe für das ASP.NET MVC Framework und für das Test Driven Development (TDD) entwickelt.

There are no comments.

Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

View Comments (0) ...
Navigation