Frage Funktionale Auswirkungen von Unterschieden in SSL und TLS


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

Was ich nicht verstehe, ist, warum TLS für einen IT-Experten wichtig ist und warum ich angesichts der Wahl eines vor dem anderen wählen würde. Ist TLS wirklich nur eine neuere Version, und wenn ja, ist es ein kompatibles Protokoll?

Als IT-Profi: Wann verwende ich welchen? Wann benutze ich nicht welche?


30
2017-09-11 13:10


Ursprung




Antworten:


Kurze Antwort:

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

Im Gegensatz zu einer relativ weit verbreiteten Meinung, geht es dabei nicht darum, einen Dienst auf einem bestimmten Port mit SSL zu betreiben und auf demselben Port wie die Klartext-Variante mit TLS zu haben. Sowohl SSL als auch TLS können für beide Ansätze verwendet werden. Dies ist der Unterschied zwischen SSL / TLS bei der Verbindung (manchmal als "implizites SSL / TLS" bezeichnet) und SSL / TLS, nachdem ein Befehl typischerweise auf Protokollebene erteilt wurde STARTTLS (manchmal auch als "explizites SSL / TLS" bezeichnet). Das Schlüsselwort in STARTTLS ist "START", nicht TLS. Es ist eine Nachricht auf Anwendungsprotokoll-Ebene, die angibt, dass ein Wechsel zu SSL / TLS erforderlich ist, wenn es nicht vor dem Austausch eines Anwendungsprotokolls initiiert wurde.

Die Verwendung beider Modi sollte gleichwertig sein, vorausgesetzt, der Client ist so konfiguriert, dass er SSL / TLS auf die eine oder andere Weise erwartet, um nicht zu einer Klartextverbindung herabgestuft zu werden.

Längere Antwort:

SSL vs. TLS

Soweit ich weiß, hat SSLv1 nie die Labors verlassen. SSLv2 und SSLv3 wurden Protokolle entwickelt von Netscape. SSLv2 wird seit einiger Zeit als unsicher angesehen, da es anfällig für Downgrade-Angriffe ist. SSLv3 verwendet intern (3,0) als Versionsnummer (innerhalb der ClientHello Botschaft).

TLS ist das Ergebnis der Standardisierung als ein offeneres Protokoll innerhalb der IETF. (Ich glaube, ich habe irgendwo gelesen, vielleicht in E. Rescorlas Buch, dass der Name in solchen gewählt wurde eine Art, dass alle Teilnehmer gleichermaßen damit unzufrieden waren, um ein bestimmtes Unternehmen nicht zu bevorzugen: Dies ist in der Standardisierungsgremium ziemlich üblich.) Diejenigen, die daran interessiert sind, wie der Übergang gemacht wurde, können die SSL-Gespräch Liste FAQ; Es gibt mehrere Kopien dieses Dokuments, aber die meisten Links (to 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). Das TLS 1.0, 1.1 und 1.2  ClientHello Nachrichten verwenden (3,1), (3,2), (3,3) um die Versionsnummer anzugeben, die die Fortsetzung von SSL deutlich zeigt.

Es gibt weitere Details zu den Protokollunterschieden in diese Antwort.

Wann verwende ich welche? Wann benutze ich nicht welche?

Verwenden Sie möglichst die höchste Version. In der Praxis wird dies als Dienstleister erforderlich sein Ihre Benutzer haben Clients, die diese Versionen unterstützen. Wie immer ist es immer eine Risikobewertung (vorzugsweise mit einem Business Case, falls zutreffend). Davon abgesehen, schneiden Sie SSLv2 trotzdem ab.

Beachten Sie außerdem, dass die von SSL / TLS bereitgestellte Sicherheit nicht nur die von Ihnen verwendete Version ist, sondern auch die richtige Konfiguration: Es ist sicherlich vorzuziehen, SSLv3 mit einer starken Verschlüsselungssuite als TLSv1.0 mit einem schwachen (oder anonymous / null-encryption) Verschlüsselungssuite. Einige Cipher-Suites, die als zu schwach angesehen werden, wurden von neueren Versionen von TLS ausdrücklich verboten. Die Tabellen im Java 7 SunJSSE-Anbieter (und ihre Fußnoten) kann von Interesse sein, wenn Sie mehr Details wünschen.

Es wäre vorzuziehen, mindestens TLS 1.1 zu verwenden, aber leider unterstützen noch nicht alle Clients diese leider (z. B. Java 6). Wenn Sie eine Version unter 1.1 verwenden, lohnt es sich, etwas genauer zu betrachten Abschwächung der BEAST-Schwachstelle.

Ich würde es generell empfehlen Eric Rescorlas Buch - SSL und TLS: Entwerfen und Bauen von sicheren Systemen, Addison-Wesley, 2001 ISBN 0-201-61598-3 für Leute, die wirklich mehr Details wünschen.

Implizite vs. Explizites SSL / TLS

Es gibt den Mythos, dass TLS den gleichen Port verwenden kann, SSL dagegen nicht. Das ist einfach nicht wahr (und ich werde gehen Hafenvereinigung für diese Diskussion). Leider wurde dieser Mythos den Benutzern anscheinend dadurch vermittelt, dass einige Anwendungen wie MS Outlook in ihren Konfigurationsoptionen manchmal die Wahl zwischen SSL und TLS haben, wenn sie tatsächlich die Wahl zwischen implizitem und explizitem SSL / TLS haben. (Es gibt SSL / TLS-Experten bei Microsoft, aber anscheinend waren sie nicht an der Outlook-Benutzeroberfläche beteiligt.)

Ich denke der Grund, warum diese Verwirrung passiert, ist wegen der STARTTLS Modus. Manche Leute scheinen das als verstanden zu haben STARTTLS = TLS, aber das ist nicht der Fall. Das Schlüsselwort in STARTTLS ist "START", nicht TLS. Warum wurde das nicht genannt? STARTSSL oder STARTSSLORTLS liegt daran, dass diese Erweiterungen innerhalb der IETF spezifiziert wurden, die nur die in ihren Spezifikationen verwendeten Namen verwendeten (angenommen, dass der TLS-Name schließlich der einzige stehende wäre, denke ich).

  • SSL am selben Port wie der Klartextdienst: HTTPS-Proxy.

Heutzutage können die meisten HTTPS-Server TLS verarbeiten, aber vor ein paar Jahren verwendeten die meisten Leute SSLv3 für HTTPS. HTTPS (streng genommen standardisiert als HTTP über TLS) stellt normalerweise die SSL / TLS-Verbindung bei einer TCP-Verbindung her und tauscht anschließend die HTTP-Nachricht über die SSL / TLS-Schicht aus. Es gibt eine Ausnahme, wenn Sie einen HTTP-Proxy dazwischen verwenden. In diesem Fall stellt der Client eine Verbindung mit dem HTTP-Proxy in clear (in der Regel auf Port 3128) her und gibt dann den Befehl aus CONNECT HTTP - Befehl und initiiert, sofern die Antwort erfolgreich war, den SSL / TLS - Handshake durch Senden von a ClientHelloBotschaft. All dies geschieht auf demselben Port, soweit es die Verbindung zwischen Browser und Proxy betrifft (offensichtlich nicht zwischen Proxy und Zielserver: es ist nicht einmal derselbe Rechner). Dies funktioniert gut mit SSLv3. Viele von uns, die sich in Situationen hinter einem Proxy befinden, haben dies gegen Server verwendet, die mindestens TLS 1.0 nicht unterstützt haben.

  • SSL am selben Port wie der Klartextdienst: E-Mail.

Dieses ist eindeutig außerhalb der Spezifikationen, aber in der Praxis funktioniert es oft. Genau genommen sprechen die Spezifikationen davon, nach der Verwendung des Befehls STARTTLS zu TLS (nicht SSL) zu wechseln. In der Praxis funktioniert SSL oft auch (genau wie die Spezifikation "HTTP over TLS") Verwenden von SSL anstelle von TLS auch). Sie können es selbst ausprobieren. Angenommen, Sie haben einen SMTP- oder IMAP-Server, der STARTTLS unterstützt, Verwenden Sie Thunderbird, gehen Sie in die Einstellungen, erweiterte Optionen, Konfigurationseditor und deaktivieren Sie security.enable_tls. Viele Server akzeptieren die Verbindung dennoch, weil ihre Implementierungen die SSL / TLS-Schicht an eine SSL / TLS-Bibliothek delegieren, die normalerweise SSL und TLS auf dieselbe Weise verarbeiten kann, sofern sie nicht dafür konfiguriert sind. Als die OpenLDAP FAQ sagt es "Während der Mechanismus für die Verwendung mit TLSv1 ausgelegt ist, werden die meisten Implementierungen bei Bedarf auf SSLv3 (und SSLv2) zurückgreifen. ". Wenn Sie nicht sicher sind, überprüfen Sie mit einem Werkzeug 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 an 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 verwende ich welche? Wann benutze ich nicht welche?

Zwischen explizitem und implizitem SSL / TLS spielt es keine Rolle. Was zählt ist, dass Ihr Kunde weiß, was zu erwarten ist und entsprechend konfiguriert ist. Noch wichtiger ist, dass es so konfiguriert werden sollte, dass es Klartextverbindungen ablehnt, wenn es eine SSL / TLS-Verbindung erwartet, sei es implizit oder explizit.

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

Für LDAP zum Beispiel, wenn der Client ein Apache Httpd-Server ist (mod_ldap - Die Dokumentation unterscheidet leider auch den Unterschied zwischen SSL und TLS. Sie können implizites SSL / TLS verwenden, indem Sie ein ldaps:// URL (z.B. AuthLDAPURL ldaps://127.0.0.1/dc=example,dc=com?uid?one) oder verwenden Sie explizite SSL / TLS mit einem zusätzlichen Parameter (z. AuthLDAPURL ldap://127.0.0.1/dc=example,dc=com?uid?one TLS).

Es gibt vielleicht ein etwas geringeres Risiko bei der Angabe des Sicherheitsprotokolls im URL-Schema (https, ldaps, ...) als erwartet, dass der Client eine zusätzliche Einstellung für die Aktivierung von SSL / TLS konfiguriert, da sie dies möglicherweise vergessen. Das ist strittig. Es kann auch Probleme bei der Korrektheit der Implementierung der einen gegen die anderen geben (zum Beispiel glaube ich, dass der Java LDAP Client die Verifizierung des Hostnamens bei der Verwendung nicht unterstützt ldaps://, wenn es sollte, während es mit unterstützt wird ldap:// + StartTLS).

Im Zweifelsfall scheint es nicht schädlich zu sein, beide Dienste anzubieten, wenn der Server dies unterstützt (Ihr Server wird nur zwei Ports gleichzeitig abhören). 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 Server-Administrator können Sie technisch nichts tun, um Downgrade-Angriffe zu verhindern (abgesehen vielleicht von einem Client-Zertifikat). Der Client muss sicherstellen, dass SSL / TLS aktiviert ist, unabhängig davon, ob es sich um eine Verbindung oder um eine Verbindung handelt STARTTLSähnlich wie Befehl. Genauso wie sich ein Browser nicht umleiten lassen sollte https:// zu http://ein Client für ein Protokoll, das unterstützt STARTTLS Stellen Sie sicher, dass die Antwort positiv war und die SSL / TLS-Verbindung aktiviert wurde, bevor Sie fortfahren. Ein aktiver MITM-Angreifer könnte andernfalls beide Verbindungen leicht herabstufen.

Zum Beispiel, Ältere Versionen von Thunderbird hatten dafür eine schlechte Option namens "TLS verwenden, falls verfügbar"Dies bedeutet im Wesentlichen, dass, wenn ein MITM-Angreifer in der Lage war, die Servernachrichten so zu ändern, dass er keine Unterstützung für STARTTLS ankündigte, der Client sich stillschweigend zu einer Nur-Text-Verbindung herabstufen ließ. (Diese unsichere Option ist in Thunderbird nicht mehr verfügbar.)


43
2018-03-11 17:49



Danke, dass Sie nicht nur eine umfassende Antwort, sondern auch eine korrekte Antwort mit Quellen gepostet haben. +1 von mir. - kce


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

Ein SSL-Protokoll hat normalerweise einen separaten Port, z. B. 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. Stattdessen muss es vom Client ausgehandelt werden. Beispielsweise können Sie IMAP auf Port 143 ausführen und wenn Mail-Server und Client TLS unterstützen, den Client wird senden STARTTLS Befehl und nur dann aktivieren Sie die Verschlüsselung. Auf diese Weise benötigen Sie keinen separaten SSL-Port, während Sie mit SSL-freien Anwendungen kompatibel bleiben.

Zusammenfassung:
SSL: Ein wenig älter. Separate Ports für einfache und verschlüsselte Verbindungen. Der gesamte Datenverkehr am SSL-Port ist immer verschlüsselt.
TLS: Einzelner Port für einfache und verschlüsselte Verbindungen. Die Verschlüsselung wird erst aktiviert, nachdem der Client ein Problem behoben hat STARTTLS Befehl.


12
2017-09-11 17:04



Aber wann sollte ich welche verwenden? - Randell
Die Tatsache, dass mit STARTTLS In einigen Protokollen ermöglicht der Wechsel zu TLS auf der gleichen Verbindung keinen Unterschied zwischen SSL und TLS. Technisch könnten Sie auf dieselbe Weise zu SSLv3 wechseln. - Bruno
Diese Antwort ist leider falsch. Noch einmal, TLS vs. SSL ist nicht über einen Port vs.s. separate Ports: security.stackexchange.com/q/5126/2435 - Bruno
Falsch. -1 Stimme - Tatas


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


9
2017-09-11 13:19



Warum TLS verwenden, wenn ich die Option habe? - Randell


Davon Indiana University Knowledge Base Artikel:

SSL steht für Secure Sockets Layer.   Netscape hat dies ursprünglich entwickelt   Protokoll zur Übertragung von Informationen   Vertraulichkeit der Nachrichtenintegrität,   und garantiere die Serveridentität. SSL   funktioniert hauptsächlich durch Verwendung   Verschlüsselung öffentlicher / privater Schlüssel für Daten   Es wird häufig in Webbrowsern verwendet,   aber SSL kann auch mit E-Mail verwendet werden   Server oder irgendeine Art von Client-Server   Transaktion. Zum Beispiel, einige Augenblicke   Nachrichtenserver verwenden SSL zum Schutz   Gespräche.

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

Die Unterschiede zwischen den beiden   Protokolle sind sehr gering und sehr   technisch, aber sie sind anders   Standards. TLS verwendet stärker   Verschlüsselungsalgorithmen und hat die   Fähigkeit, an verschiedenen Ports zu arbeiten.   Darüber hinaus TLS Version 1.0 nicht   Interoperabilität mit SSL Version 3.0.


7
2017-09-11 15:26



Von hier: kb.iu.edu/data/anjv.html - jjnguy


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


3
2017-09-11 13:20



Das OP hat bereits festgestellt, dass TLS eine neuere Version von SSL ist. Der Rest Ihres Posts ist ein Kommentar. Keine Antwort. - user207421
@EJP: Hast du bemerkt, dass die Antwort> 3 Jahre alt ist? - Iain
(Ich frage mich, ob sogar ein -Mod die Frage eines anderen Benutzers bearbeiten kann, um "Ich weiß das ..." hinzuzufügen, was nicht für den ursprünglichen Benutzer gilt) - wRAR
@EJP, um fair zu sein, wurde die Bearbeitung dieser Frage Gegenstand langer Debatten (siehe Hier und Hier). Natürlich ist nichts davon sofort sichtbar, ohne durch die Geschichte zu schauen. (Beachte, dass diese Bearbeitung von einem Mod gemacht wurde ...) - Bruno