回答:
短い答え:
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を予期するようにクライアントが構成されている場合、どちらのモードを使用しても同等である必要があります。
より長い答え:
私の知る限り、SSLv1はラボを離れることはありません。SSLv2およびSSLv3は、Netscapeが開発したプロトコルです。SSLv2は攻撃をダウングレードする傾向があるため、しばらくの間安全でないと見なされてきました。SSLv3は(3,0)
、バージョン番号として(ClientHello
メッセージ内で)内部的に使用します。
TLSは、IETF内のよりオープンなプロトコルとしての標準化の結果です。(おそらくE. Rescorlaの本のどこかを読んだことがあると思いますが、特定の会社を支持しないように、すべての参加者が等しく不満を抱くような方法で名前が選択されたと思います:これは標準の非常に一般的な慣行ですbody。)移行がどのように行われたかに興味がある人は、SSL-Talk List FAQを読むことができます。このドキュメントには複数のコピーがありますが、ほとんどのリンク(へnetscape.com
)は古くなっています。
TLSは非常によく似たメッセージを使用します(プロトコルを互換性のないものにするために十分に異なりますが、共通バージョンをネゴシエートすることは可能です)。TLS 1.0、1.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をもっと詳細に知りたい人に勧めます。
TLSでは同じポートを使用できますが、SSLではできないという神話があります。それは真実ではありません(そして、この議論のためにポートの統合は省略します)。残念ながら、MS Outlookのような一部のアプリケーションは、実際には暗黙的または明示的なSSL / TLSの選択を意味する場合に、構成オプションでSSLとTLSの選択を提供することがあるという事実によって、この神話はユーザーに広まったようです。(MicrosoftにはSSL / TLSの専門家がいますが、Outlook UIには関与していないようです。)
この混乱が起こるのは、STARTTLS
モードが原因だと思います。これをSTARTTLS
= TLS として理解している人もいますが、そうではありません。キーワードSTARTTLS
は「START」であり、TLSではありません。これが呼び出されなかった理由、STARTSSL
またはSTARTSSLORTLS
これらの拡張機能がIETF内で指定されていたためです。IETFは仕様で使用されている名前のみを使用しました(最終的にはTLS名が唯一のものになると仮定します)。
現在、ほとんどのHTTPSサーバーはTLSを処理できますが、数年前、ほとんどの人がHTTPSにSSLv3を使用していました。HTTPS(厳密には、HTTP over TLSとして標準化)は、通常、TCP接続でSSL / TLS接続を確立し、SSL / TLSレイヤーを介してHTTPメッセージを交換します。間にHTTPプロキシを使用する場合、これには例外があります。この場合、クライアントはHTTPプロキシにクリアで接続し(通常はポート3128で)、CONNECT
HTTPコマンドを発行し、応答が成功した場合、次を送信してSSL / TLSハンドシェイクを開始します。ClientHello
メッセージ。ブラウザとプロキシ間の接続に関する限り、これらはすべて同じポートで発生します(明らかにプロキシとターゲットサーバー間ではなく、同じマシンでもありません)。これはSSLv3でうまく機能します。プロキシの背後にいる私たちの多くは、少なくともTLS 1.0をサポートしていないサーバーに対してこれを使用するでしょう。
これは明らかに仕様から外れていますが、実際にはしばしば機能します。厳密に言えば、仕様は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 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スキームのセキュリティプロトコルを指定する場合、おそらく一般的に(やや小さいリスクを話すがありhttps
、ldaps
彼らは忘れることがあるため、SSL / TLSを有効にするには、追加の設定を構成するには、クライアントを期待する場合よりも、...)。これは議論の余地があります。また、一方の実装と他方の実装の正確さにも問題がある場合があります(たとえば、Java LDAPクライアントは、使用ldaps://
する場合、ホスト名の検証をサポートしていないはずですが、ldap://
+ StartTLSでサポートされています)。
疑いの余地があり、可能であればより多くのクライアントと互換性があるため、サーバーがサポートするときに両方のサービスを提供しても害はないようです(サーバーは同時に2つのポートをリッスンするだけです)。どちらのモードでも使用できるプロトコルの多くのサーバー実装は、両方をサポートします。
クライアントがプレーンテキスト接続にダウングレードされないようにするのは、クライアントの責任です。サーバー管理者として、ダウングレード攻撃を防止するために技術的にできることは何もありません(おそらくクライアント証明書が必要です)。クライアントは、接続時またはSTARTTLS
-likeコマンドの後でSSL / TLSが有効になっていることを確認する必要があります。ブラウザがからhttps://
にリダイレクトされるべきではないのと同じように、http://
サポートするプロトコルのクライアントはSTARTTLS
、応答が肯定的であり、SSL / TLS接続が有効であることを確認してから先に進みます。そうしないと、アクティブなMITM攻撃者がいずれかの接続を簡単にダウングレードする可能性があります。
例えば、サンダーバードの古いバージョンでは、「使用TLS、可能な場合」と呼ばれ、このため不正なオプションだった、本質的にMITM攻撃者は、それがSTARTTLSをサポートすることを通知しないように、サーバーメッセージを変更することができた場合とほのめかし、クライアントを黙ってプレーンテキスト接続にダウングレードされます。(この安全でないオプションは、Thunderbirdでは使用できなくなりました。)
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
コマンドを発行した後にのみ有効になります。
STARTTLS
一部のプロトコルで使用すると、同じ接続でTLSに切り替えることができるという事実は、SSLとTLSの違いではありません。技術的には、同じ方法でSSLv3に切り替えることができます。
このインディアナ大学のナレッジベースの記事から:
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と相互運用しません。
TLSはSSLの新しいバージョンです。一部の場所ではこれらの言葉は単なるプロトコル以外の何かを意味するかもしれないので、質問を明確にしてください。