Zum Hauptinhalt springen

Anhang E. Abwärtskompatibilität (Backward Compatibility)

Dieser Anhang behandelt Kompatibilitätsprobleme zwischen TLS 1.2 und früheren Versionen.

E.1. Kompatibilität mit TLS 1.0/1.1 und SSL 3.0 (Compatibility with TLS 1.0/1.1 and SSL 3.0)

Aufgrund neuer Funktionen und einiger struktureller Änderungen gibt es keine direkte Interoperabilität zwischen TLS 1.2 und TLS 1.1, TLS 1.0 und SSL 3.0. TLS 1.2 enthält jedoch einen Mechanismus, durch den eine TLS 1.2-Implementierung mit früheren Versionen verhandeln kann.

E.1.1. Versionsverhandlung

TLS bietet einen eingebauten Mechanismus für die Versionsverhandlung als Teil des Handshakes:

  1. Version im ClientHello:

    • Der Client gibt im ClientHello die höchste von ihm unterstützte Version an
    • Implementierungen SOLLTEN TLS 1.2 (Version 3) im ClientHello angeben
  2. Version im ServerHello:

    • Der Server wählt die höchste Version aus, die sowohl von ihm als auch vom Client unterstützt wird
    • Wenn der Server die vom Client vorgeschlagene Version nicht unterstützt, wählt er eine niedrigere Version
  3. Record-Layer-Version:

    • Die Version des ClientHello-Eintrags SOLLTE für maximale Kompatibilität auf 1 (TLS 1.0) gesetzt werden
    • Nachfolgende Einträge verwenden die ausgehandelte Version

E.1.2. Erweiterungen

TLS 1.2 führt neue Erweiterungen und Änderungen an bestehenden Erweiterungen ein:

  • signature_algorithms-Erweiterung: TLS 1.2-Clients MÜSSEN diese Erweiterung einschließen
  • Server älterer Versionen werden Erweiterungen ignorieren, die sie nicht verstehen

E.1.3. Cipher Suites

Bestimmte Cipher Suites sind spezifisch für TLS 1.2:

  • Cipher Suites, die die SHA-256-PRF verwenden
  • Neue AEAD-Cipher-Suites

Bei der Verhandlung mit früheren Versionen SOLLTEN diese Cipher Suites NICHT im ClientHello angeboten werden.

E.1.4. Implementierungsempfehlungen

Client-Implementierungen SOLLTEN:

  • Mehrere TLS-Versionen unterstützen
  • Die höchste unterstützte Version im ClientHello ankündigen
  • Bereit sein, eine niedrigere Version zu akzeptieren
  • Versions-Fallback-Schutz (SCSV) implementieren

Server-Implementierungen SOLLTEN:

  • Mehrere TLS-Versionen für breite Kompatibilität unterstützen
  • Die höchste Protokollversion bevorzugen
  • ClientHellos aus früheren Versionen ordnungsgemäß behandeln

Beispiel-Verhandlungsablauf:

Client (unterstützt TLS 1.2, 1.1, 1.0)
-> ClientHello (version=3.3)
Unterstützte Versionen: TLS 1.2, 1.1, 1.0

Server (unterstützt nur TLS 1.1, 1.0)
<- ServerHello (version=3.2)
Ausgewählt: TLS 1.1

Verbindung wird mit TLS 1.1 fortgesetzt

E.2. Kompatibilität mit SSL 2.0 (Compatibility with SSL 2.0)

SSL 2.0 SOLLTE NICHT in neuen Implementierungen verwendet werden. Für die Kompatibilität mit Legacy-Systemen müssen einige Implementierungen jedoch möglicherweise ClientHellos im SSL 2.0-Format verstehen.

E.2.1. SSL 2.0 ClientHello

Das SSL 2.0 ClientHello hat ein anderes Format:

uint16 msg_length;          /* Höchstes Bit MUSS 1 sein */
uint8 msg_type; /* MUSS 1 sein */
Version version; /* Vom Client gewünschte Version */
uint16 cipher_spec_length; /* Kann nicht 0 sein */
uint16 session_id_length; /* MUSS 0 oder 16 sein */
uint16 challenge_length; /* Kann nicht 0 sein */
CipherSpec cipher_specs[...];
SessionID session_id;
Challenge challenge;

E.2.2. Behandlung von SSL 2.0 ClientHello

Ein TLS 1.2-Server KANN ein im SSL 2.0-Format gekapseltes ClientHello akzeptieren, MUSS aber:

  1. Das höchste Bit von msg_length überprüfen
  2. Die Formatgültigkeit überprüfen
  3. Es für die Verarbeitung ins TLS-Format konvertieren
  4. Mit einem ServerHello im TLS-Format antworten

E.2.3. Sicherheitsüberlegungen

Wichtig: Die Unterstützung von ClientHellos im SSL 2.0-Format bedeutet nicht die Unterstützung des SSL 2.0-Protokolls selbst. SSL 2.0 hat viele bekannte Sicherheitslücken und DARF NICHT zur Verwendung ausgehandelt werden.

E.2.4. Implementierungsempfehlungen

  • TLS 1.2-Clients DÜRFEN KEINE ClientHellos im SSL 2.0-Format senden
  • Server-Unterstützung für ClientHellos im SSL 2.0-Format ist jetzt KANN, anstatt SOLLTE
  • Das Senden von ClientHellos im SSL 2.0-Format ist SOLLTE NICHT
  • Zukünftige TLS-Versionen können dies in SOLLTE NICHT unterstützen ändern

E.3. Vermeidung von Man-in-the-Middle-Versions-Rollback (Avoiding Man-in-the-Middle Version Rollback)

Frühere Versionen des Protokolls waren anfällig für Versions-Rollback-Angriffe, bei denen ein Angreifer eine Verbindung zur Verwendung einer früheren (schwächeren) Protokollversion zwingen konnte.

E.3.1. Schutzmechanismen

TLS 1.2 verwendet mehrere Mechanismen, um Versions-Rollback zu verhindern:

  1. Finished-Nachrichtenüberprüfung:

    • Die Finished-Nachricht enthält einen Hash aller Handshake-Nachrichten
    • Enthält die Versionsfelder aus ClientHello und ServerHello
    • Jede Versionsänderung führt zum Fehlschlagen der Finished-Überprüfung
  2. TLS_FALLBACK_SCSV:

    • Signalisierender Cipher-Suite-Wert, definiert in RFC 7507
    • Clients fügen diesen Wert hinzu, wenn sie eine Verbindung mit einer niedrigeren Version wiederholen
    • Server lehnt die Verbindung ab, wenn er eine höhere Version unterstützt

E.3.2. Implementierungsanforderungen

Clients MÜSSEN:

  • Zuvor versuchte Versionen aufzeichnen
  • TLS_FALLBACK_SCSV beim Downgrade-Wiederholungsversuch einschließen
  • Finished-Nachricht überprüfen

Server MÜSSEN:

  • Nach TLS_FALLBACK_SCSV suchen
  • inappropriate_fallback-Alarm senden, wenn eine höhere Version unterstützt wird
  • Finished-Nachricht korrekt berechnen und überprüfen

E.3.3. Beispielszenarien

Normale Verbindung:

Client -> ClientHello (TLS 1.2)
Server <- ServerHello (TLS 1.2)
... Normaler Handshake ...
Erfolg!

Legitimer Downgrade:

Client -> ClientHello (TLS 1.2)
Server <- ServerHello (TLS 1.1)
... TLS 1.1-Handshake ...
Erfolg!

Erkannter Angriff:

Client -> ClientHello (TLS 1.2)
Angreifer ändert zu (TLS 1.0)
Server <- ServerHello (TLS 1.0)
... Handshake wird fortgesetzt ...
Client -> Finished (Überprüfung schlägt fehl!)
Verbindung abgebrochen!

Wiederholung mit SCSV:

Client -> ClientHello (TLS 1.2) - Schlägt fehl
Client -> ClientHello (TLS 1.1, TLS_FALLBACK_SCSV)
Server erkennt SCSV und unterstützt TLS 1.2
Server <- Alert: inappropriate_fallback
Verbindung abgebrochen - Downgrade-Angriff erkannt!

Hinweis: Für vollständige Kompatibilitätsinformationen und detaillierte Erklärungen siehe den vollständigen Text von RFC 5246 Anhang E.