SSLとTLSの違いの機能的意味


31

TLSは本質的にSSLの新しいバージョンであり、一般に(通常はSTARTTLSコマンドを使用して)セキュアでない接続からセキュアな接続への移行をサポートすることを知っています。

私が理解していないのは、TLSがITプロフェッショナルにとって重要である理由と、なぜ選択するかを選択することです。TLSは本当に新しいバージョンですか、もしそうなら互換性のあるプロトコルですか?

ITプロフェッショナルとして:いつどちらを使用しますか?どちらを使用しないのですか?

回答:


44

短い答え:

SSLはTLSの前身です。SSLは、Netscape Communicationsによって開発された独自のプロトコルで、後にIETFで標準化され、TLSに名前が変更されました。つまり、バージョンは、SSLv2、SSLv3、TLSv1.0、TLSv1.1、TLSv1.2の順になります。

比較的広く信じられていることとは反対に、これはSSLを使用して別個のポートでサービスを実行する必要がなく、TLSを使用したプレーンテキストバリアントと同じポートで実行できることではありません。SSLとTLSの両方を2つのアプローチに使用できます。これは、接続時のSSL / TLS(「暗黙的なSSL / TLS」と呼ばれることもあります)と、通常はプロトコルレベルでコマンドが発行された後のSSL / TLS STARTTLS(「明示的なSSL / TLS」と呼ばれることもあります)の違いに関するものです。のキーワードSTARTTLSは「START」であり、TLSではありません。アプリケーションプロトコルレベルでのメッセージであり、アプリケーションプロトコル交換の前にSSL / TLSが開始されていない場合は、SSL / TLSに切り替える必要があることを示します。

クライアントがプレーンテキスト接続にダウングレードされないように、何らかの方法でSSL / TLSを予期するようにクライアントが構成されている場合、どちらのモードを使用しても同等である必要があります。

より長い答え:

SSL vs TLS

私の知る限り、SSLv1はラボを離れることはありません。SSLv2およびSSLv3は、Netscapeが開発したプロトコルです。SSLv2は攻撃をダウングレードする傾向があるため、しばらくの間安全でないと見なされてきました。SSLv3は(3,0)、バージョン番号として(ClientHelloメッセージ内で)内部的に使用します。

TLSは、IETF内のよりオープンなプロトコルとしての標準化の結果です。(おそらくE. Rescorlaの本のどこかを読んだことがあると思いますが、特定の会社を支持しないように、すべての参加者が等しく不満を抱くような方法で名前が選択されたと思います:これは標準の非常に一般的な慣行ですbody。)移行がどのように行われたかに興味がある人は、SSL-Talk List FAQを読むことができます。このドキュメントには複数のコピーがありますが、ほとんどのリンク(へnetscape.com)は古くなっています。

TLSは非常によく似たメッセージを使用します(プロトコルを互換性のないものにするために十分に異なりますが、共通バージョンをネゴシエートすることは可能です)。TLS 1.01.1および1.2 ClientHelloのメッセージが使用(3,1)(3,2)(3,3)明確にSSLからの続きを示すバージョン番号を示すために。

この答えにプロトコルの違いについての詳細があります

いつどれを使用しますか?どちらを使用しないのですか?

可能であれば、可能な限り最高のバージョンを使用してください。実際には、サービスプロバイダーとして、これらのバージョンをサポートするクライアントがユーザーに必要になります。いつものように、それは常にリスク評価の演習です(適切な場合はビジネスケースに裏打ちされることが望ましい)。とはいえ、とにかくSSLv2を遮断してください。

さらに、SSL / TLSが提供するセキュリティは、使用するバージョンだけでなく、適切な構成でもあることに注意してください:TLSv1.0が弱い(または匿名/ヌル暗号化)暗号スイート。弱すぎると考えられる一部の暗号スイートは、TLSの新しいバージョンによって明示的に禁止されています。Java 7 SunJSSEプロバイダーのテーブル(およびその脚注)は、詳細が必要な場合に役立ちます

少なくともTLS 1.1を使用することをお勧めしますが、残念ながらまだすべてのクライアントがそれらをサポートしているわけではありません(例:Java 6)。1.1未満のバージョンを使用する場合、BEASTの脆弱性緩和することを検討する価値があります

私は通常、Eric Rescorlaの本-SSL and TLS:Designing and Building Secure Systems、Addison-Wesley、2001 ISBN 0-201-61598-3をもっと詳細に知りたい人に勧めます。

暗黙的と明示的なSSL / TLS

TLSでは同じポートを使用できますが、SSLではできないという神話があります。それは真実ではありません(そして、この議論のためにポートの統合は省略します)。残念ながら、MS Outlookのような一部のアプリケーションは、実際には暗黙的または明示的なSSL / TLSの選択を意味する場合に、構成オプションでSSLとTLSの選択を提供することがあるという事実によって、この神話はユーザーに広まったようです。(MicrosoftにはSSL / TLSの専門家がいますが、Outlook UIには関与していないようです。)

この混乱が起こるのは、STARTTLSモードが原因だと思います。これをSTARTTLS= TLS として理解している人もいますが、そうではありません。キーワードSTARTTLSは「START」であり、TLSではありません。これが呼び出されなかった理由、STARTSSLまたはSTARTSSLORTLSこれらの拡張機能がIETF内で指定されていたためです。IETFは仕様で使用されている名前のみを使用しました(最終的にはTLS名が唯一のものになると仮定します)。

  • 平文サービスと同じポートでのSSL:HTTPSプロキシ。

現在、ほとんどのHTTPSサーバーはTLSを処理できますが、数年前、ほとんどの人がHTTPSにSSLv3を使用していました。HTTPS(厳密には、HTTP over TLSとして標準化)は、通常、TCP接続でSSL / TLS接続を確立し、SSL / TLSレイヤーを介してHTTPメッセージを交換します。間にHTTPプロキシを使用する場合、これには例外があります。この場合、クライアントはHTTPプロキシにクリアで接続し(通常はポート3128で)、CONNECTHTTPコマンドを発行し、応答が成功した場合、次を送信してSSL / TLSハンドシェイクを開始します。ClientHelloメッセージ。ブラウザとプロキシ間の接続に関する限り、これらはすべて同じポートで発生します(明らかにプロキシとターゲットサーバー間ではなく、同じマシンでもありません)。これはSSLv3でうまく機能します。プロキシの背後にいる私たちの多くは、少なくともTLS 1.0をサポートしていないサーバーに対してこれを使用するでしょう。

  • プレーンテキストサービスと同じポートでのSSL:電子メール。

これは明らかに仕様から外れていますが、実際にはしばしば機能します。厳密に言えば、仕様はSTARTTLSコマンドを使用した後のTLS(SSLではない)への切り替えについて説明しています。実際には、SSLもよく機能します(「HTTP over TLS」仕様がTLSの代わりにSSLを使用することも含むように)。自分で試すことができます。STARTTLSをサポートするSMTPまたはIMAPサーバーがあると仮定して、Thunderbirdを使用し、設定、詳細オプション、設定エディターに移動してをオフにしsecurity.enable_tlsます。多くのサーバーは、SSL / TLSレイヤーをSSL / TLSライブラリに委任するため、多くのサーバーは接続を受け入れます。SSL/ TLSライブラリは、そうしないように設定されていない限り、通常はSSLとTLSを同じ方法で処理できます。OpenLDAPのFAQはそれを置きます、 "このメカニズムはTLSv1で使用するように設計されていますが、ほとんどの実装は必要に応じてSSLv3(およびSSLv2)にフォールバックします。「。わからない場合は、Wiresharkなどのツールで確認してください。

  • 個別のポートでのTLS。

多くのクライアントは、セキュリティで保護された亜種が別のポートにあるプロトコルに(少なくとも)TLS 1.0を使用できます。明らかに、HTTPSのTLS 1.0(またはそれ以上)をサポートする多くのブラウザーとWebサーバーがあります。同様に、SMTPS、IMAPS、POPS、およびLDAPSもTLSを使用できます。SSLに限定されません。

いつどれを使用しますか?どちらを使用しないのですか?

明示的なSSL / TLSと暗黙的なSSL / TLSの間では、実際には問題ではありません。重要なのは、クライアントが何を期待しているのかを知っており、そのために適切に構成されていることです。さらに重要なことは、暗黙的であれ明示的であれ、SSL / TLS接続を予期している場合にプレーンテキスト接続を拒否するように構成する必要があることです。

明示的なSSL / TLSと暗黙的なSSL / TLSの主な違いは、構成設定が明確であることです。

たとえば、LDAPの場合、クライアントがApache Httpdサーバーである場合(mod_ldap-残念ながらそのドキュメントではSSLとTLSの違いを誤ってラベル付けしていldaps://ますAuthLDAPURL ldaps://127.0.0.1/dc=example,dc=com?uid?one)、URL を使用して暗黙的なSSL / TLSを使用するか(たとえば)または明示的なSSL /追加のパラメーター(例:)を使用したTLS AuthLDAPURL ldap://127.0.0.1/dc=example,dc=com?uid?one TLS

URLスキームのセキュリティプロトコルを指定する場合、おそらく一般的に(やや小さいリスクを話すがありhttpsldaps彼らは忘れることがあるため、SSL / TLSを有効にするには、追加の設定を構成するには、クライアントを期待する場合よりも、...)。これは議論の余地があります。また、一方の実装と他方の実装の正確さにも問題がある場合があります(たとえば、Java LDAPクライアントは、使用ldaps://する場合、ホスト名の検証をサポートしていないはずですが、ldap://+ StartTLSでサポートされています)。

疑いの余地があり、可能であればより多くのクライアントと互換性があるため、サーバーがサポートするときに両方のサービスを提供しても害はないようです(サーバーは同時に2つのポートをリッスンするだけです)。どちらのモードでも使用できるプロトコルの多くのサーバー実装は、両方をサポートします。

クライアントがプレーンテキスト接続にダウングレードされないようにするのは、クライアントの責任です。サーバー管理者として、ダウングレード攻撃を防止するために技術的にできることは何もありません(おそらくクライアント証明書が必要です)。クライアントは、接続時またはSTARTTLS-likeコマンドの後でSSL / TLSが有効になっていることを確認する必要があります。ブラウザがからhttps://にリダイレクトされるべきではないのと同じように、http://サポートするプロトコルのクライアントはSTARTTLS 、応答が肯定的であり、SSL / TLS接続が有効であることを確認してから先に進みます。そうしないと、アクティブなMITM攻撃者がいずれかの接続を簡単にダウングレードする可能性があります。

例えば、サンダーバードの古いバージョンでは、「使用TLS、可能な場合」と呼ばれ、このため不正なオプションだった、本質的にMITM攻撃者は、それがSTARTTLSをサポートすることを通知しないように、サーバーメッセージを変更することができた場合とほのめかし、クライアントを黙ってプレーンテキスト接続にダウングレードされます。(この安全でないオプションは、Thunderbirdでは使用できなくなりました。)


3
包括的な回答だけでなく、ソースを含む正しい回答を投稿していただきありがとうございます。私から+1。

13

TLSはSSLよりも新しいプロトコルです(ただし、知る限り、SSL v3と互換性があります)。通常、心配する必要がある違いは1つだけです。

SSLされたプロトコルには通常、個別のポートがあります。たとえば、HTTPの場合は80、HTTPSの場合は443(HTTP / SSL)です。SSLポートに接続すると、セッション全体が暗号化されます。

TLSはSSLよりも新しく、個別のポートを必要としません。代わりにクライアントがネゴシエートする必要があります。たとえば、ポート143でIMAPを実行できます。メールサーバーとクライアントの両方がTLSをサポートする場合、クライアントSTARTTLSコマンドを送信してから暗号化を有効にします。この方法では、SSLなしのアプリケーションとの互換性を維持しながら、別個のSSL専用ポートを必要としません。

要約:
SSL:やや古い。プレーン接続と暗号化接続用に別々のポート。SSLポート上のすべてのトラフィックは常に暗号化されます。
TLS:プレーン接続と暗号化接続の両方の単一ポート。暗号化は、クライアントがSTARTTLSコマンドを発行した後にのみ有効になります。


しかし、いつどれを使うべきですか?
ランデル

3
STARTTLS一部のプロトコルで使用すると、同じ接続でTLSに切り替えることができるという事実は、SSLとTLSの違いではありません。技術的には、同じ方法でSSLv3に切り替えることができます。
ブルーノ

9
残念ながら、この答えは間違っています。繰り返しますが、TLSとSSLは1つのポートと個別のポートではありませんsecurity.stackexchange.com/q/5126/2435
ブルーノ

1
間違っています。-1投票
Tatas

10

TLSは、単にSSLの新しいバージョンです。オプションがある場合は、TLSを使用します。もっと、いつものように、ウィキペディアで


1
オプションがあるのに、なぜTLSを使用するのですか?
ランデル

8

このインディアナ大学のナレッジベースの記事から:

SSLはSecure Sockets Layerの略です。Netscapeはもともと、このプロトコルを開発して、個人的に情報を送信し、メッセージの整合性を確保し、サーバーIDを保証しました。SSLは、主にデータの公開/秘密キー暗号化を使用して機能します。これは一般にWebブラウザーで使用されますが、SSLは電子メールサーバーまたはあらゆる種類のクライアントサーバートランザクションでも使用できます。たとえば、一部のインスタントメッセージングサーバーはSSLを使用して会話を保護します。

TLSはTransport Layer Securityの略です。インターネット技術特別調査委員会(IETF)は、SSLの後継としてTLSを作成しました。ほとんどの場合、電子メールプログラムの設定として使用されますが、SSLと同様に、TLSは任意のクライアントサーバートランザクションで役割を持つことができます。

2つのプロトコルの違いは非常に小さく、非常に技術的ですが、異なる標準です。TLSはより強力な暗号化アルゴリズムを使用し、さまざまなポートで動作する機能を備えています。さらに、TLSバージョン1.0はSSLバージョン3.0と相互運用しません。


2
ここから:kb.iu.edu/data/anjv.html
jjnguy

4

TLSはSSLの新しいバージョンです。一部の場所ではこれらの言葉は単なるプロトコル以外の何かを意味するかもしれないので、質問を明確にしてください。


OPは、TLSはSSLの新しいバージョンであると既に述べています。投稿の残りはコメントです。答えではありません。
user207421

@EJP:答えが3歳以上であることに気づきましたか?
user9517はGoFundMonicaを

(♦-modでも他のユーザーの質問を編集して、元のユーザーには当てはまらない「I know that ...」を追加できるのではないかと思います)
wRAR

1
@ EJP、wRARに公平を期すため、この質問の編集は長い議論の対象となっています(こちらこちらをご覧ください)。もちろん、履歴を見ることなく、これらのどれもすぐには見えません。(この編集はmodによって行われたことに注意してください...)
ブルーノ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.