Transport Layer Security
TLSは多くの場合、コネクション型のトランスポート層プロトコル(通常はTCP)とアプリケーション層の間で使われる。特にHTTPでの利用を意識して設計されているが、アプリケーション層の特定のプロトコルには依存せず、様々なアプリケーションにおいて使われている。TLS 1.1以降を元にしたプロトコルが、UDPやDCCPといったデータグラム型プロトコル上でも実装されており、こちらはDatagram Transport Layer Security (DTLS) として独立して標準化されている。
TLSはHTTPなどのアプリケーション層のプロトコルと組み合わせることで、HTTPSなどセキュアな通信プロトコルを実現している。そのようなプロトコルとして以下のものがある。
1 2 3 chrome://flagsより設定可能 (最低バージョンの指定による範囲指定、最高バージョンは起動オプションより指定可能)
1 2 3 4 5 6 7 8 9 ホストがRC4以外のアルゴリズムを用いたCipher Suiteに対応していない場合に限り、RC4を用いたCipher Suiteがフォールバックとして利用される。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 RC4を用いたCipher Suiteのすべてが既定で無効化される
↑ TLSの実装はNSSによる。Firefox 22以前では、同梱のNSSがTLS 1.1に対応していたもののブラウザとしてはTLS 1.0まで対応。Firefox 23でTLS 1.1に、Firefox 24でTLS 1.2に対応したが既定では無効。Firefox 27よりTLS 1.1およびTLS 1.2が既定で有効。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 about:configあるいはアドオンより設定可能 (最高および最低バージョンの指定による範囲指定)
↑ バージョン34.0、ESR 31.3でSSL 3.0を既定で無効化。バージョン34.0ではSSL 3.0へのフォールバック無効化を追加。ESR 31.3およびバージョン35ではTLS_FALLBACK_SCSVを実装。
1 2 3 4 IEのTLSへの対応はWindowsに同梱のSChannelによる。IE 11においてTLS 1.1および1.2が既定で有効。
1 2 3 Windows NT 3.
第三フェーズではクライアントからサーバに対して鍵共有に必要な情報を送る。具体的にはクライアントはCertificate、ClientKeyExchange、CertificateVerifyをサーバに送る。
Certificateは鍵共有で用いるクライアントの公開鍵とその証明書である。証明書はサーバから送られてきたCertificateRequestの条件を満たさねばならない。
ClientKeyExchangeは鍵共有プロトコルに依存して送るデータが異なるが、DH_anonであれば、g mod pという形のデータを送る。ここでyはクライアントの秘密の乱数である。
ここまでのプロトコルにより、サーバとクライアントの間でpremaster secretが共有された事になる。DH_anonであればpremaster secretはg mod pである。premaster secretを鍵にした擬似ランダム関数にServerHelloとClientHelloの乱数などを並べたものを入力した結果得られたものがmaster secretである。
CertificateVerifyはクライアントが署名能力を持っていることを証明するためにこれまでTLSハンドシェイクプロトコルで送受信された全メッセージに対し、共有されたmaster secret で署名したものである。
TLSは特定のアプリケーション層プロトコルに依存しないため、HTTP以外にも多くのプロトコルにおいて採用され、クレジットカード情報や個人情報、その他の機密情報を通信する際の手段として活用されている。
既存のアプリケーション層プロトコルでTLSを利用する場合、大きく2つの適用方式が考えられる。まずひとつは、下位層(通常はTCP)の接続を確立したらすぐにTLSのネゴシエーションを開始し、TLS接続が確立してからアプリケーション層プロトコルの通信を開始する方式である。もうひとつは、まず既存のアプリケーション層プロトコルで通信を開始し、その中でTLSへの切り替えを指示する方式である。切り替えコマンドとしてSTARTTLSが広まっているため、この方式自体をSTARTTLSと呼ぶこともある。
前者はアプリケーション層のプロトコルをまったく変更しなくてすむことが利点である。その反面、平文で接続を開始する実装と共存できなくなるため、既存のポート番号とは別にTLS対応用のポート番号が必要となる。実態としては、SSL/TLSの最初の適用例であるHTTPSをはじめとして、前者の方式を使うことが多い。ただし、この方式はバーチャルホストを構成する際に問題となる可能性がある。詳細は#バーチャルホストの節を参照。
なお、ポート番号を分ける方式をSSL、同一ポート番号で切替える方式(STARTTLS方式)をTLSと呼んでいる実装もある。TLS/SSLという用語の区別がプロトコルのバージョンを指しているか、アプリケーション層プロトコルへの適用方式を指しているかは、文脈で判断する必要がある。