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 STARTTLS
ist "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 ClientHello
Nachricht) 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 STARTTLS
Modus. Einige Leute scheinen das als STARTTLS
= TLS verstanden zu haben , aber das ist nicht der Fall. Das Schlüsselwort in STARTTLS
ist "START", nicht TLS. Warum dies nicht aufgerufen wurde STARTSSL
oder STARTSSLORTLS
weil 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 CONNECT
HTTP-Befehl aus und initiiert, sofern die Antwort erfolgreich war, den SSL / TLS-Handshake durch Senden von aClientHello
Botschaft. 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_ldap
der 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.)