TLSは、インターネット通信でプライバシーとデータの完全性を提供するセキュリティプロトコルです。TLSの実装は、セキュアなWebアプリケーションの開発における標準的な慣行です。
この記事を読み終えると、以下のことができるようになります。
関連コンテンツ
是非、Cloudflareが毎月お届けする「theNET」を購読して、インターネットで最も人気のある洞察をまとめた情報を入手してください!
記事のリンクをコピーする
Transport Layer Security(TLS)は広く採用されているセキュリティプロトコルで、インターネット上の通信のプライバシーとデータセキュリティを推進するために設計されました。TLSの第一のユースケースは、Webアプリケーションとサーバーの間の通信(たとえばWebブラウザーによるWebサイト読み込みなど)の暗号化です。TLSはまた、メールやメッセージ、VoIPなど他の通信の暗号化にも使うことができます。この記事では、WebアプリケーションセキュリティにおけるTLSの役割に焦点を絞ります。
TLSは、国際標準の策定機関であるインターネット技術タスクフォース(IETF)が考案したもので、プロトコルの最初のバージョンは1999年に発表されました。最新バージョンはTLS 1.3で、2018年に発表されています。
TLSは、Secure Sockets Layer(SSL)と呼ばれるそれまでの暗号化プロトコル(Netscapeが開発)から進化したものです。TLSのバージョン1.0は実際、SSLのバージョン3.1として開発が始まりましたが、Netscapeとの関連性がなくなったことを示すために発表前にプロトコル名が変更されました。そうした経緯から、TLSとSSLという用語が互換的に使われることもあります。
HTTPSはHTTPプロトコルに加えてTLS暗号化を実装するもので、すべてのWebサイトと一部の他のWebサービスに使われています。したがって、HTTPSを使っているWebサイトはすべてTLS暗号化を採用しているということになります。
TLS暗号化は、Webアプリケーションをデータ漏えいやその他の攻撃から保護するのに役立ちます。現在では、TLSで保護されたHTTPSがWebサイトの標準的な慣行となっています。Google Chromeブラウザは徐々に非HTTPSのサイトを取り締まり、他のブラウザもこれに追随しています。日常的にインターネットを使うユーザーは、HTTPSの錠前のアイコンがないWebサイトに対して慎重です。
TLSプロトコルが実現するものは、主に3つの要素で構成されています。暗号化、認証、完全性です。
WebサイトやアプリケーションでTLSを使うには、オリジンサーバー(配信元サーバー)にTLS証明書をインストールしておかなければなりません。(この証明書は上述した命名時の経緯から「SSL証明書」とも呼ばれます。)TLS証明書は、認証局からドメインを所有する個人または企業に対して発行されます。証明書には、ドメイン所有者に関する重要情報とサーバーのパブリック鍵が記載されています。どちらもサーバーのIDの確認に欠かせない情報です。
TLS接続は、TLSハンドシェイクというシーケンスを使って開始します。ユーザーがTLSを使っているWebサイトまで来ると、ユーザーのデバイス(クライアントデバイスともいいます)とWebサーバーの間でTLSハンドシェイクが始まります。
TLSハンドシェイク中は、ユーザーデバイスとWebサーバーが以下を行います。
TLSハンドシェイクは、各通信セッションのための暗号スイートを決定します。暗号スイートは、どの共有暗号化鍵またはセッション鍵が特定セッションに用いられるかなどの詳細を指定する一連のアルゴリズムをいいます。パブリック鍵 クリプトグラフィ(公開鍵暗号化)という技術のおかげで、TLSは非暗号化チャネルで一致するセッション鍵を設定することができます。
ハンドシェイクは認証も行います。認証は通常、サーバーがそのIDをクライアントに対して証明するプロセスで、パブリック鍵を使います。パブリック鍵は、片方向暗号化方式の暗号化鍵です。つまり、パブリック鍵を持っている人であれば誰でも、真正性確保のためにサーバーの秘密鍵で暗号化されたデータを解読できますが、秘密鍵でデータを暗号化できるのは本来の送信元だけなのです。サーバーのパブリック鍵はTLS証明書の一部です。
データが暗号化および認証されると、メッセージ認証コード(MAC)で署名されます。次に、受信者はMACを検証して、データの整合性を確認できます。これは、薬の瓶に改ざん防止フィルムがついているようなものです。消費者は、購入時にフィルムに異常がないことから、薬が改ざんされていないことがわかります。
TLSの最新バージョンは、Webアプリケーションのパフォーマンスにはほとんど影響を及ぼしません。
TLS接続のセットアップには複雑なプロセスが含まれるため、読み込み時間がある程度かかりますし、一定の計算能力も費やします。データ転送の前に、クライアントとサーバーの間で往復通信が数回行われなくてはならず、それがWebアプリケーション読み込み時間の貴重な数ミリ秒を食い、クライアントとサーバーの双方で一定のメモリーが使われるのです。
ただ、TLSハンドシェイクによる潜在的遅延(レイテンシー)の低減に役立つ技術があります。1つはTLS False Startで、TLSハンドシェイクが完了する前にサーバーとクライアントがデータ送信を開始できるようにします。TLSをスピードアップするもう1つの技術はTLS Session Resumptionで、通信歴のあるクライアントとサーバーが略式ハンドシェイクを使うことを許可します。
こうした改良によってTLSはきわめて高速のプロトコルになっているため、読み込み時間に目立った影響はありません。TLS関連の計算能力についても、今日の基準に照らせば概ね無視できる範囲です。
2018年にリリースされたTLS 1.3によって、TLSはさらに高速化しました。TLS 1.3のTLSハンドシェイクは2往復でなく1往復の通信(行き来)で済むため、このプロセスの所要時間が数ミリ秒短縮されます。ユーザーが以前接続したことがあるWebサイトであれば0往復でよく、さらに高速化されます。
Cloudflareは、すべてのユーザーにTLS/SSL証明書を無料提供しています。Cloudflareをご利用でない方は認証局からSSL証明書を入手し(通常は有料)、それをオリジンサーバー(配信元サーバー)にインストールしなければなりません。
TLS/SSL証明書の仕組みについて、詳しくは SSL証明書とは?をご覧ください。
利用開始
SSL/TLSについて
HTTPSについて
暗号化について
SSL用語集
ラーニングセンターナビゲーション