Funktionale Auswirkungen von Unterschieden bei SSL und TLS

31

Ich weiß, dass TLS im Wesentlichen eine neuere Version von SSL ist und im Allgemeinen den Übergang einer Verbindung von ungesichert zu gesichert unterstützt (normalerweise über einen STARTTLS-Befehl).

Was ich nicht verstehe, ist, warum TLS für einen IT-Experten wichtig ist und warum ich bei der Auswahl eine über die andere wählen würde. Ist TLS wirklich nur eine neuere Version und wenn ja, ein kompatibles Protokoll?

Als IT-Experte: Wann verwende ich welche? Wann benutze ich welche nicht?

Randell
quelle

Antworten:

44

Kurze Antwort:

SSL ist der Vorläufer von TLS. SSL war ein proprietäres Protokoll, das von Netscape Communications entwickelt, später in IETF standardisiert und in TLS umbenannt wurde. Kurz gesagt, die Versionen sind in dieser Reihenfolge aufgeführt: SSLv2, SSLv3, TLSv1.0, TLSv1.1 und TLSv1.2.

Im Gegensatz zu einer relativ weit verbreiteten Meinung geht es hier überhaupt nicht darum, einen Dienst auf einem bestimmten Port mit SSL ausführen zu müssen und auf demselben Port wie die Nur-Text-Variante mit TLS arbeiten zu können. Für beide Ansätze können sowohl SSL als auch TLS verwendet werden. Hierbei handelt es sich normalerweise um den Unterschied zwischen SSL / TLS bei der Verbindung (manchmal als "implizites SSL / TLS" bezeichnet) und SSL / TLS, nachdem ein Befehl auf Protokollebene ausgegeben wurde STARTTLS(manchmal als "explizites SSL / TLS" bezeichnet). . Das Schlüsselwort in STARTTLSist "START", nicht TLS. Auf der Ebene des Anwendungsprotokolls wird angezeigt, dass auf SSL / TLS umgeschaltet werden muss, wenn es vor einem Austausch des Anwendungsprotokolls nicht initiiert wurde.

Die Verwendung beider Modi sollte äquivalent sein, sofern der Client so konfiguriert ist, dass er SSL / TLS auf die eine oder andere Weise erwartet, um nicht auf eine Nur-Text-Verbindung herabgestuft zu werden.

Längere Antwort:

SSL gegen TLS

Soweit mir bekannt ist, hat SSLv1 die Labore nie verlassen. SSLv2 und SSLv3 waren von Netscape entwickelte Protokolle. SSLv2 gilt seit einiger Zeit als unsicher, da es zu Downgrade-Angriffen neigt. SSLv3 wird intern (3,0)als Versionsnummer (innerhalb der ClientHelloNachricht) verwendet.

TLS ist das Ergebnis der Standardisierung als offeneres Protokoll innerhalb der IETF. (Ich glaube, ich habe irgendwo gelesen, vielleicht in E. Rescorlas Buch, dass der Name so gewählt wurde, dass alle Beteiligten gleichermaßen unzufrieden damit waren, um ein bestimmtes Unternehmen nicht zu bevorzugen. Dies ist eine in Normen weit verbreitete Praxis Körper) Wer daran interessiert ist , wie der Übergang gemacht wurde , die lesen kann. SSL-Talk - Liste FAQ ; Es gibt mehrere Kopien dieses Dokuments, aber die meisten Links (zu netscape.com) sind veraltet.

TLS verwendet sehr ähnliche Nachrichten (ausreichend unterschiedlich, um die Protokolle inkompatibel zu machen, obwohl es möglich ist, eine gemeinsame Version auszuhandeln ). Die TLS 1.0 , 1.1 und 1.2 ClientHello - Nachrichten verwenden (3,1), (3,2), um (3,3)die Versionsnummer angeben, die eindeutig die Fortsetzung von SSL zeigt.

Weitere Details zu den Protokollunterschieden finden Sie in dieser Antwort .

Wann benutze ich welche? Wann benutze ich welche nicht?

Verwenden Sie nach Möglichkeit die höchste Version, die Sie können. In der Praxis erfordert dies als Dienstanbieter, dass Ihre Benutzer Clients haben, die diese Versionen unterstützen. Wie üblich handelt es sich immer um eine Risikobewertung (vorzugsweise unterlegt mit einem Business Case, falls zutreffend). Wenn dies gesagt wird, schneiden Sie SSLv2 trotzdem ab.

Beachten Sie außerdem, dass es bei der von SSL / TLS bereitgestellten Sicherheit nicht nur um die von Ihnen verwendete Version, sondern auch um die ordnungsgemäße Konfiguration geht. SSLv3 mit einer starken Verschlüsselungssuite ist mit Sicherheit vorzuziehen als TLSv1.0 mit einer schwachen (oder) anonyme / Null-Verschlüsselung). Einige zu schwache Cipher Suites wurden von neueren TLS-Versionen ausdrücklich verboten. Die Tabellen im Java 7 SunJSSE-Provider (und ihre Fußnoten) können von Interesse sein, wenn Sie weitere Details wünschen.

Mindestens TLS 1.1 ist vorzuziehen, wird aber leider noch nicht von allen Clients unterstützt (zB Java 6). Wenn Sie eine Version unter 1.1 verwenden, lohnt es sich auf jeden Fall, die Sicherheitsanfälligkeit BEAST zu verringern .

Im Allgemeinen würde ich Eric Rescorlas Buch - SSL und TLS: Entwerfen und Erstellen sicherer Systeme, Addison-Wesley, 2001 ISBN 0-201-61598-3 Personen empfehlen , die wirklich mehr Details wünschen.

Implizites vs explizites SSL / TLS

Es gibt einen Mythos, der besagt, dass Sie mit TLS denselben Port verwenden können, mit SSL jedoch nicht. Das stimmt einfach nicht (und ich lasse die Port-Vereinheitlichung für diese Diskussion aus). Leider scheint sich dieser Mythos auf die Benutzer ausgeweitet zu haben, da einige Anwendungen wie MS Outlook manchmal eine Auswahl zwischen SSL und TLS in ihren Konfigurationsoptionen bieten, wenn sie tatsächlich eine Auswahl zwischen implizitem und explizitem SSL / TLS bedeuten. (Es gibt SSL / TLS-Experten bei Microsoft, aber anscheinend waren sie nicht an der Outlook-Benutzeroberfläche beteiligt.)

Ich denke, der Grund für diese Verwirrung ist der STARTTLSModus. Einige Leute scheinen das als STARTTLS= TLS verstanden zu haben , aber das ist nicht der Fall. Das Schlüsselwort in STARTTLSist "START", nicht TLS. Warum dies nicht aufgerufen wurde STARTSSLoder STARTSSLORTLSweil diese Erweiterungen in der IETF angegeben wurden, in der nur die Namen verwendet wurden, die in den Spezifikationen verwendet wurden (vorausgesetzt, der TLS-Name wäre letztendlich der einzig gültige Name).

  • SSL auf demselben Port wie der Nur-Text-Dienst: HTTPS-Proxy.

Heutzutage können die meisten HTTPS-Server TLS verarbeiten. Vor einigen Jahren verwendeten die meisten Benutzer SSLv3 für HTTPS. HTTPS (streng genommen als HTTP über TLS standardisiert ) stellt normalerweise die SSL / TLS-Verbindung bei TCP-Verbindung her und tauscht dann HTTP-Nachrichten über die SSL / TLS-Schicht aus. Es gibt eine Ausnahme, wenn Sie dazwischen einen HTTP-Proxy verwenden. In diesem Fall stellt der Client eine eindeutige Verbindung zum HTTP-Proxy her (normalerweise über Port 3128), gibt dann den CONNECTHTTP-Befehl aus und initiiert, sofern die Antwort erfolgreich war, den SSL / TLS-Handshake durch Senden von aClientHelloBotschaft. All dies geschieht auf demselben Port wie die Verbindung zwischen Browser und Proxy (offensichtlich nicht zwischen Proxy und dem Zielserver: Es ist nicht einmal derselbe Computer). Dies funktioniert gut mit SSLv3. Viele von uns, die hinter einem Proxy stehen, haben dies für Server verwendet, die mindestens TLS 1.0 nicht unterstützen.

  • SSL auf demselben Port wie der Nur-Text-Dienst: E-Mail.

Diese liegt eindeutig außerhalb der Spezifikationen, funktioniert jedoch in der Praxis häufig. Genau genommen geht es in den Spezifikationen darum, nach Verwendung des Befehls STARTTLS auf TLS (nicht SSL) umzuschalten. In der Praxis funktioniert SSL häufig auch (genau wie die "HTTP over TLS" -Spezifikation auch die Verwendung von SSL anstelle von TLS umfasst). Sie können es selbst versuchen. Angenommen, Sie haben einen SMTP- oder IMAP-Server, der STARTTLS unterstützt, verwenden Sie Thunderbird, rufen Sie die Einstellungen, erweiterten Optionen und den Konfigurationseditor auf und deaktivieren Sie ihn security.enable_tls. Viele Server akzeptieren die Verbindung weiterhin, weil ihre Implementierungen die SSL / TLS-Schicht an eine SSL / TLS-Bibliothek delegieren, die SSL und TLS im Allgemeinen auf die gleiche Weise behandeln kann, sofern dies nicht konfiguriert ist. In den OpenLDAP-FAQ heißt es: "Während der Mechanismus für die Verwendung mit TLSv1 entwickelt wurde, greifen die meisten Implementierungen bei Bedarf auf SSLv3 (und SSLv2) zurück. Msgstr "" "Wenn Sie sich nicht sicher sind, wenden Sie sich an ein Tool wie Wireshark.

  • TLS an einem bestimmten Port.

Viele Clients können TLS 1.0 (mindestens) für Protokolle verwenden, bei denen sich die gesicherte Variante auf einem anderen Port befindet. Offensichtlich gibt es eine Reihe von Browsern und Webservern, die TLS 1.0 (oder höher) für HTTPS unterstützen. Ebenso können SMTPS, IMAPS, POPS und LDAPS auch TLS verwenden. Sie sind nicht auf SSL beschränkt.

Wann benutze ich welche? Wann benutze ich welche nicht?

Zwischen explizitem und implizitem SSL / TLS spielt es keine Rolle. Entscheidend ist, dass Ihr Kunde weiß, was ihn erwartet und entsprechend konfiguriert ist. Noch wichtiger ist, dass es so konfiguriert ist, dass Klartextverbindungen abgelehnt werden, wenn eine implizite oder explizite SSL / TLS-Verbindung erwartet wird .

Der Hauptunterschied zwischen explizitem und implizitem SSL / TLS besteht in der Klarheit der Konfigurationseinstellungen.

Wenn der Client für LDAP beispielsweise ein Apache HTTPD-Server ist (in mod_ldapder Dokumentation wird der Unterschied zwischen SSL und TLS leider auch falsch angegeben), können Sie implizites SSL / TLS mithilfe einer ldaps://URL (z. B. AuthLDAPURL ldaps://127.0.0.1/dc=example,dc=com?uid?one) oder explizites SSL / TLS verwenden. TLS durch Verwendung eines zusätzlichen Parameters (z AuthLDAPURL ldap://127.0.0.1/dc=example,dc=com?uid?one TLS. B. ).

Es ist vielleicht die Regel ein etwas geringeres Risiko sprechen , wenn das Sicherheitsprotokoll in dem URL - Schema spezifiziert ( https, ldaps, ...) , als wenn der Kunden erwartet eine zusätzliche Einstellung zu konfigurieren , SSL / TLS zu aktivieren, weil sie vergessen können. Das ist fraglich. Es kann auch Probleme bei der korrekten Implementierung des einen im Vergleich zum anderen geben (ich denke beispielsweise, dass der Java-LDAP-Client die Überprüfung des Hostnamens nicht unterstützt ldaps://, wenn dies erforderlich ist, während dies mit ldap://+ StartTLS unterstützt wird).

Im Zweifelsfall und um mit mehr Clients kompatibel zu sein, scheint es keinen Schaden zu verursachen, beide Dienste anzubieten, wenn der Server dies unterstützt (Ihr Server überwacht nur zwei Ports gleichzeitig). Viele Serverimplementierungen für Protokolle, die mit beiden Modi verwendet werden können, unterstützen beide.

Es liegt in der Verantwortung des Kunden, sich nicht zu einer Klartextverbindung herabstufen zu lassen. Als Serveradministrator können Sie technisch nichts tun, um Downgrade-Angriffe zu verhindern (abgesehen davon, dass Sie möglicherweise ein Client-Zertifikat benötigen). Der Client muss überprüfen, ob SSL / TLS aktiviert ist, und zwar beim Herstellen einer Verbindung oder nach einem STARTTLSähnlichen Befehl. Auf die gleiche Weise wie ein Browser sollte sich nicht umgeleitet werden lassen aus https://zu http://einem Client für ein Protokoll, dass die Unterstützung STARTTLS sicher , dass die Antwort positiv machen sollte und die SSL / TLS - Verbindung wurde , bevor Sie fortfahren weiter aktiviert. Ein aktiver MITM-Angreifer könnte ansonsten leicht beide Verbindungen herabstufen.

Zum Beispiel hatten ältere Versionen von Thunderbird eine schlechte Option für diese Option namens "Use TLS, sofern verfügbar" , was im Wesentlichen implizierte, dass ein MITM-Angreifer die Servermeldungen so ändern konnte, dass keine Unterstützung für STARTTLS, den Client, angekündigt wurde würde sich stillschweigend auf eine Klartextverbindung herabstufen lassen. (Diese unsichere Option ist in Thunderbird nicht mehr verfügbar.)

Bruno
quelle
3
Vielen Dank, dass Sie nicht nur eine umfassende, sondern auch eine korrekte Antwort mit Quellenangaben gepostet haben. +1 von mir.
13

TLS ist ein neueres Protokoll als SSL (aber AFAIK ist mit SSL v3 kompatibel). Normalerweise gibt es nur einen Unterschied, über den Sie sich Sorgen machen müssen:

Ein SSL-Protokoll hat normalerweise einen separaten Port - beispielsweise 80 für HTTP und 443 für HTTPS (HTTP / SSL). Wenn Sie eine Verbindung zum SSL-Port herstellen, wird die gesamte Sitzung verschlüsselt.

TLS ist neuer als SSL und erfordert keinen separaten Port, sondern muss vom Client ausgehandelt werden. Sie können beispielsweise IMAP auf Port 143 ausführen und den Client, wenn sowohl Mailserver als auch Client TLS unterstützen Sendet einen STARTTLSBefehl und aktiviert erst dann die Verschlüsselung. Auf diese Weise benötigen Sie keinen separaten Nur-SSL-Port, während Sie mit Anwendungen ohne SSL kompatibel bleiben.

Zusammenfassung:
SSL : Etwas älter. Separate Ports für einfache und verschlüsselte Verbindungen. Der gesamte Datenverkehr auf dem SSL-Port wird immer verschlüsselt.
TLS : Ein Port für sowohl einfache als auch verschlüsselte Verbindungen. Die Verschlüsselung wird erst aktiviert, nachdem der Client einen STARTTLSBefehl erteilt hat .

Grawity
quelle
Aber wann soll ich welche verwenden?
Randell
3
Die Tatsache, dass STARTTLSbei einigen Protokollen der Wechsel zu TLS über dieselbe Verbindung möglich ist, ist kein Unterschied zwischen SSL und TLS. Technisch könnten Sie auf die gleiche Weise zu SSLv3 wechseln.
Bruno
9
Diese Antwort ist leider falsch. Auch hier geht es bei TLS vs SSL nicht um einen Port vs separate Ports: security.stackexchange.com/q/5126/2435
Bruno
1
Falsch. -1 Stimme
Tatas
10

TLS ist einfach eine neuere Version von SSL. Verwenden Sie TLS, wenn Sie die Option haben. Mehr wie immer auf Wikipedia .

innaM
quelle
1
Warum TLS verwenden, wenn ich die Option habe?
Randell
8

Aus diesem Knowledge Base- Artikel der Indiana University :

SSL steht für Secure Sockets Layer. Netscape hat dieses Protokoll ursprünglich entwickelt, um Informationen privat zu übertragen, die Nachrichtenintegrität sicherzustellen und die Serveridentität zu gewährleisten. SSL arbeitet hauptsächlich mit der Verschlüsselung von Daten mit öffentlichen / privaten Schlüsseln. Es wird häufig in Webbrowsern verwendet, aber SSL kann auch für E-Mail-Server oder jede Art von Client-Server-Transaktion verwendet werden. Einige Instant Messaging-Server verwenden beispielsweise SSL, um Konversationen zu schützen.

TLS steht für Transport Layer Security. Die Internet Engineering Task Force (IETF) hat TLS als Nachfolger von SSL erstellt. Es wird am häufigsten als Einstellung in E-Mail-Programmen verwendet, aber wie SSL kann TLS bei jeder Client-Server-Transaktion eine Rolle spielen.

Die Unterschiede zwischen den beiden Protokollen sind sehr gering und sehr technisch, aber es handelt sich um unterschiedliche Standards. TLS verwendet stärkere Verschlüsselungsalgorithmen und kann an verschiedenen Ports arbeiten. Außerdem funktioniert TLS Version 1.0 nicht mit SSL Version 3.0.

Rajat
quelle
2
Von hier aus: kb.iu.edu/data/anjv.html
jjnguy
4

TLS ist eine neuere Version von SSL. Obwohl diese Worte an manchen Stellen etwas anderes als nur Protokolle bedeuten können, klären Sie bitte Ihre Frage.

WAR
quelle
Das OP hat bereits festgestellt, dass TLS eine neuere Version von SSL ist. Der Rest Ihres Beitrags ist ein Kommentar. Keine Antwort.
user207421
@EJP: Ist dir aufgefallen, dass die Antwort> 3 Jahre alt ist?
user9517 unterstützt GoFundMonica 29.09.12
(Ich frage mich, ob auch ein ♦ -Mod die Frage eines anderen Benutzers bearbeiten kann, um "Ich weiß das ..." hinzuzufügen, was nicht auf den ursprünglichen Benutzer
zutrifft.
1
@EJP, um fair zu sein, war die Bearbeitung dieser Frage Gegenstand langer Debatten (siehe hier und hier ). Natürlich ist nichts davon sofort sichtbar, ohne durch die Geschichte zu schauen. (Beachten Sie, dass diese Änderung von einem Mod vorgenommen wurde ...)
Bruno