SSL -> So funktioniert es

»SSL«1) (Secure Socket Layer) ist ein Verschlüsselungsprotokoll und wird idR zum sicheren Übertragen von Daten in Netzwerken verwendet. »SSL« wurde bis zur Version 3.1 entwickelt und danach in »TLS« weiter entwickelt, wo es heute bei Version 1.2 angekommen ist. Eine bekannte Implementierung ist zB »OpenSSL«2).

Wozu und Wofür SSL

»SSL« findet häufig Verwendung bei der Verschlüsselung der Datenübertragung von Webseiten, wie zB bei der Eingabe von Login Informationen oder anderen sensiblen Daten. Mittlerweile wird aber auch ganz gewöhnlicher HTTP-Traffic verschlüsselt, unterstützt wird dies nicht zuletzt durch immer leistungsfähigere Rechnerhardware. Man erkennt eine verschlüsselte Webseite uA durch die Angabe des »HTTPS« Protokolls in der »URL«. Ein weiteres Einsatzgebiet mit zunehmender Verbreitung ist die Verschlüsselung des E-Mail Verkehrs »SMTP«. »SSL« ist jedoch nicht exklusiv für »HTTP« oder »SMTP« entwickelt, wird jedoch von diesen beiden Technologien am meisten benutzt.

»SSL« zieht zwischen der »Transportschicht« und der »Anwendungsschicht« eine weitere Schicht ein, den »Secure Socket Layer«, wodurch im Prinzip jedes höhere Protokoll »SSL« nutzen könnte.

Warum wird verschlüsselt? Bei »HTTP« und »SMTP« ohne »SSL« wird die gesamte Kommunikation unverschlüsselt in Plain Text übertragen. Ein Datenstrom durchläuft vom Sender zum Empfänger etliche Stationen, wo an jeder mitgehört bzw. mitgelesen werden kann ohne irgendeinen Aufwand betreiben zu müssen. Eine E-Mail zB kann unverschlüsselt mit einer Postkarte verglichen werden die jeder lesen kann, der sie in die Finger bekommt. Würde man sich unverschlüsselt über das Internet an irgendeiner Webseite anmelden (Ebay, Amazon, Banken etc) würde das Passwort ebenfalls unverschlüsselt übertragen werden. Die Technik des meist unbefugten Mitlesens von Datenverkehr in Netzwerken nennt man »Man-In-The-Middle-Angriff«3). Es liegt auf der Hand, dass dies kein erstrebenswerter Zustand sein kann.

Ein weiterer Bestandteil von »SSL« ist die zertifikatsbasierte Server- und Clientauthentifizierung, wobei die Serverauthentifizierung sehr häufig und die Clientauthentifizierung eher in Ausnahmefällen zum tragen kommt. Damit sichergestellt werden kann, dass zB ein Server auch der ist für den er sich ausgibt, werden digitale Zertifikate verwendet. Diese Zertifikate werden von beglaubigten »CAs« (Certification Authority) ausgestellt. Damit eine »CA« ein Serverzertifikat ausstellt muss der Antragsteller beweisen, dass er derjenige ist für den er sich ausgibt. Das kann verschiedenste Maßnahmen mit sich bringen aber im Grunde weiß die »CA« wem sie da für was ein Zertifikat ausstellt und beglaubigt das ausgestellte Zertifikat in dem es digital signiert, quasi unterschrieben wird. Ein Internet-Browser hat nun eine Liste vertrauenswürdiger »CAs« und überprüft das Serverzertifikat, welches der Server dem Client beim Verbindungsaufbau zur Überprüfung sendet. Dadurch soll zB verhindert werden, dass jemand den Login Ihres Onlinebanking Portals auf seine eigene Seite umleitet die genau so aussieht wie die echte und sie ahnungslos Ihre Zugangsdaten eintippen, die der Angreifer dann abgreifen kann. Diesen Angriff nennt man »Phishing«4) und gehört heute zu einem der am häufigsten verwendeten Angriffen.

Was SSL nicht kann

Da »SSL« eine Implementierung in das Netzwerk Subsystem ist kann es auch nur Daten verschlüsseln, welche diesen Stack durchlaufen. Sitzt der Angreifer entweder auf dem Client- oder auf dem Server-System selbst, können dort die Daten auch gestohlen werden. Gespeicherte Daten sind ohne weitere Maßnahmen ebenfalls unverschlüsselt abgelegt. Auch auf dem Transportweg zwischen zwei Rechnern kann der »SSL« verschlüsselte Datenstrom entschlüsselt, abgegriffen, wieder verschlüsselt und weitergeleitet werden, was allerdings zu einer Zertifikatswarnung führt, was dem aufmerksamen Anwender sofort skeptisch werden lässt. Meine Experimente mit »Man-In-The-Middel-Angriffen« sind nun schon eine Weile her aber schon damals war es zB mit »Ettercap«5) möglich eine »SSL« verschlüsselte Kommunikation zu belauschen, was zumindest damals aber eine Menge "Lärm" verursacht hat. Man blieb dabei nicht unbemerkt.

Des Weiteren kann »SSL« nicht die Adresse Ihres Kommunikationspartners verschleiern. Das bedeutet, dass ein Angreifer der nur Ihren Netzwerkverkehr belauscht ohne dabei selbst aktiv einzugreifen, in der Lage ist festzustellen mit wem Sie verschlüsselt kommunizieren, was ja auch schon mal nützlich sein kann. Das liegt zum einen daran, dass »SSL« erst nach der Transportschicht, also nach dem TCP-Protokoll Anwendung findet und im TCP-Header bereits ausreichend Informationen vorhanden sind um beide Kommunikationsendpunkte zu identifizieren und zum anderen an der Tatsache dass einem »HTTPS« Verbindungsaufbau meist eine DNS Abfrage vorausgeht, welche per se ja nicht »SSL« verschlüsselt wird.

Durch das Design von »SSL«, dass der »HTTP-Header« vollständig verschlüsselt wird, resultiert zB die Problematik, das Namens-basierte vHosts in Webservern nicht so ohne weiteres funktionieren bzw. nur einer pro Server IP-Adresse. Der Webserver kann den SSL Traffic keinem bestimmten vHost in Form eines »FQDNs« zuordnen, weil dieser noch im verschlüsselten »HTTP-Header« steht.

Funktionsweise

Im Prinzip besteht »SSL« aus drei Hauptkomponenten, dem privaten und öffentlichen Schlüsselpaar sowie dem digitalen Zertifikat. Bei der Generierung eines »SSL Schlüssels« wird ein zweiteiliger Schlüssel erzeugt, der einen privaten und einen öffentlichen Schlüssel enthält. Um mit jemanden verschlüsselte Daten auzutauschen muss auch dieser solch ein Schlüsselpaar besitzen. Meine Nachricht wird nun mit meinem privaten und dem öffentlichen Schlüssel des Empfängers verschlüsselt. Der öffentliche Schlüssel meines Kommunikationspartners muss mir bekannt sein. Der Empfänger entschlüsselt nun die Daten wieder mit seinem privaten und meinem öffentlichen Schlüssel. Somit ist sichergestellt dass zum einen die Nachricht nur vom richtigen Empfänger gelesen werden kann und sie auch nur vom ausgewiesenen Sender stammen kann. In der Praxis kann sich der private und öffentliche Teil eines Schlüssel auch in nur einen Schlüssel befinden, »OpenSSL« verfährt zB in dieser Art. Als Verschlüsselungsalgorithmen wird häufig »RSA«6) und »DSA«7) verwendet.8)

$ openssl genrsa -out mykey.key 2048
Generating RSA private key, 2048 bit long modulus
................................................................................+++
...+++
e is 65537 (0x10001)

Das oben stehende Kommando erzeugt einen privaten RSA Schlüssel mit einer Länge von 2048 Bit, der öffentliche Teil des Schlüssels ist darin bereits enthalten. Sie können sich mit folgendem Kommando den öffentlichen teil des Schlüssels anzeigen lassen:

$ openssl rsa -in mykey.key -pubout -text

SSL Handshake

Um nun wieder auf das Beispiel mit der »SSL« verschlüsselten Webseite zurück zu kommen, schauen wir uns so eine Verbindung mal in seiner Entstehung genau an:

Ein Webserver steht idR Stand-By und wartet auf Clientanfragen, demzufolge wird auch der Wunsch zu einer verschlüsselten Verbindung idR vom Client initiiert. Häufig ist es jedoch so, dass der Server für bestimmte Dienste nur eine sichere Verbindung anbietet und den Client dann quasi zum Aufbau einer sicheren Verbindung zwingt.

  • TCP-Handshake: Da der SSL Layer erst oberhalb dem Transport Layer (ISO-OSI Layer 4) aufbaut, wird der TCP-Handshake noch auf herkömmliche Art abgearbeitet. Das »SYN«, »SYN-ACK« und »ACK« wird noch unverschlüsselt gesendet.
  • Client Hello: Der Client leitet nun mit einer »Client Hello« Nachricht den »SSL-Handshake« ein. Diese Nachricht enthält idR Angaben zu den unterstützen SSL/TLS Versionen, eine zufällig generierte Zahl, einen Session Identifier (SessionID), eine Lister der unterstützten Verschlüsselungs-Algorithmen und ggf weitere von der Implementierung abhängige Metadaten, welche vom Server ausgewertet und ggf verwendet werden können.

    Client Hello

    ClientVersion 3,1
    ClientRandom[32]
    SessionID: None (new session)
    Suggested Cipher Suites:
       TLS_RSA_WITH_3DES_EDE_CBC_SHA
       TLS_RSA_WITH_DES_CBC_SHA
    Suggested Compression Algorithm: NONE
  • Server Hello: Der Server antwortet darauf mit einem »Server Hello« was im Wesentlichen die gleichen Angaben wie das »Client Hello« enthält: unterstützte Versionen, eine zufällig generierte Zahl welche in Verbindung mit der vom Client gesendeten Zufallszahl verwendet wird um das »Master Secret« für diese Verbindung zu generieren, unterstützte Verschlüsselungsalgorithmen, unterstützte Kompressionsalgorithmen und ggf weitere sitzungsspezifische Angaben.

    Server Hello

    Version 3,1
    ServerRandom[32]
    SessionID: 8869f0c62bd609767ebf7a6cffb0eb941ef58b1443bd0a77
    Use Cipher Suite:
    TLS_RSA_WITH_3DES_EDE_CBC_SHA
    Compression Algorithm: NONE
  • Server Certificate: In der »Server Certificate« Nachricht sendet der Server dem Client eine Kopie seines digitalen Zertifikats. Dieses Zertifikat enthält neben diversen Angaben zur Identifizierung des Zertifikatsinhabers auch den »Public Key«, also den öffentlichen Teil des Schlüssels des Servers. Der Client nutzt diesen Schlüssel um den Server zu authentifizieren, vor allem ob der »FQDN« (zB www.prontosystems.org) der aufgerufenen »URL« mit dem im Zertifikat hinterlegten »FQDN« übereinstimmt. Des Weiteren nutzt der Client den öffentlichen Schlüssel des Servers zum Verschlüsseln des »PreMaster Secret«
  • Server Key Exchange: Die »Server Key Exchange« Nachricht ist optional und wird idR zB dann verwendet, wenn der Server kein Zertifikat besitzt mit dem der Premaster Key verschlüsselt werden darf. Manche Zertifikate enthalten öffentliche Schlüssel mit denen nur digitale Signaturen überprüft werden dürfen. In so einem Fall wird der öffentliche Schlüssel in der »Server Key Exchange« Nachricht übermittelt.
  • Server Hello Done: Schließt den Nachrichtenblock des Servers ab.
  • Client Key Exchange: Der Client kennt nun den öffentlichen Schlüssel des Servers und generiert bei Verwendung von »RSA« ein »Premaster Secret«, verschlüsselt es mit dem öffentlichen Schlüssel des Servers oder dem temporär erzeugten Schlüssel aus der »Server Key Exchange« Nachricht und sendet dies dem Server in einer »Client Key Exchange« Nachricht. Alternativ dazu kann der »Premaster Key« auch mit einer »Diffie-Hellman-Schlüsselvereinbarung«9) ausgehandelt werden.
  • Change Cipher Spec: Das »Premaster Secret« wandeln die beiden Kommunikationspartner mit Hilfe diverser Verschlüsselungsoperationen in ein »Master Secret« um. Beide Kommunikationspartner teilen mit der nur ein Byte langen »Change Cipher Spec« Nachricht10) dem jeweils anderen mit, dass das »Master Secret« erfolgreich berechnet wurde. Das »Master Secret« wird für den Rest der Session verwendet um die kryptografischen Schlüssel zu berechnen.
  • Encrypted Handshake Message: Der erfolgreiche abgeschlossene »SSL-Handshake« wird von beiden Kommunikationspartnern mit der »Encrypted Handshake Message« quittiert. Danach wird die eigentliche Kommunikation mit den ausgehandelten Parametern ver- und entschlüsselt.

It's just that simple
prontosystems.org - we are connecting more than computers

Verwandte Artikel:
(Linux) Erstellen und Anwenden einer RootCA
(Windows) Exchange 2010: Zuweisen von Diensten zu einem Zertifikat

pronto 2014/06/14 20:54

it/ssl.txt (3899 views) · Zuletzt geändert: 2014/06/16 09:23 von wikisysop
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0