Protokoll

Bisher wurde SSH als eine Software beschrieben, die eine gesicherte Anmeldung auf entfernte Computersysteme möglich macht. Um dies zu gewährleisten, steht SSH ein eigenes Protokoll zur Verfügung über das Client und Server kommunizieren.

Dieses Protokoll existiert mittlerweile in zwei verschiedenen Versionen: SSH-1 und SSH-2. Für den Benutzer ist das Protokoll transparent. Er selbst merkt nicht, welche Version des Protokolls eingesetzt wird. Es wird jedoch nicht mehr empfohlen, die ältere Version SSH-1 einzusetzen, da hier veraltete Sicherheitstechniken, wie Integritätsprüfung mittels CRC32 Checksummen, eingesetzt werden, die heutzutage als potentiell unsicher eingestuft sind.

SSH-1 SSH-2
Monolithisches Protokolldesign Trennung der Authentifizierungs-, Verbindungs- und Transportfunktionen in unterschiedliche Ebenen
Integrität mit CRC32 Integrität mit HMAC
Nur ein Kanal pro Sitzung Mehrere Kanäle pro Sitzung
Nur ein Sitzungsschlüssel pro Sitzung Mehrere Sitzungsschlüssel pro Sitzung
Sitzungsschlüssel wird vom Client an den Server übermittelt Sitzungsschlüssel wird mit Diffie-Hellman-Verfahren ausgehandelt
Nur RSA zur Schlüsselgenerierung RSA und DSA werden unterstützt

Da in der Praxis fast ausschließlich auf die Protokollversion 2 gesetzt wird, wird dieses Protokoll im folgenden näher erläutert. SSH-2 besteht im Grunde aus drei verschiedenen Schichten: Der SSH-Transportschicht (SSH-TRANS), der SSH-Authentifizierungsschicht (SSH-USERAUTH) und der SSH-Verbindungsschicht (SSH-CONN).

Abbildung 4.1: Zusammenspiel der einzelnen Protokollschichten während einer SSH-Sitzung.
Image abbildung_protokoll

SSH-TRANS

Diese Schicht ist für den Verbindungsaufbau zwischen Client und Server verantwortlich. Zunächst einigen sich die beiden Verbindungspartner auf die Protokollversion. Anschließend werden Sitzungsschlüssel und Sitzungs-IDs ausgetauscht. Danach findet eine Integritätsprüfung mit HMAC statt. Nach erfolgreicher Serverauthentifizierung ist nun eine sichere Punkt-zu-Punkt Verbindung zwischen Client und Server aufgebaut.

SSH-USERAUTH

Nachdem eine sichere Verbindung zum Server aufgebaut wurde, muss sich der Benutzer authentifizieren. Dazu prüft diese Schicht, welche Authentifizierungsmöglichkeiten der Server bietet. Dies kann eine Authentifizierung mit Passwort oder eine Authentifizierung mit Hilfe eines Public-Keys sein. Nachdem die Authentifizierungsmethode ausgehandelt wurde, wird die eigentliche Authentifizierung durchgeführt. Es ist sogar möglich, dass der Server beide Authentifizerungsmethoden anbietet. Dabei prüft er zuerst, ob der Benutzer den erforderlichen Schlüssel vorzeigen kann. Ist dies nicht der Fall, gibt der Server dem Benutzer in einer Art Fallback-Modus die Möglichkeit, sich per Passwort anzumelden.

SSH-CONN

Diese Schicht bietet dem Benutzer, nach einer erfolgreichen Anmeldung, die Nutzung der eigentlichen SSH-Funktionen, wie das Öffnen einer Befehlskonsole auf einem entfernten Rechner, das Tunneln von TCP/IP-Verbindungen oder sogar das X-Forwarding, mit dem es möglich ist, graphische Oberflächen sicher auf einem anderen Rechner darzustellen.