インターネットを安心して使うためには、通信の安全性が不可欠です。
たとえば、ネットショッピングやオンラインバンキングでは、個人情報やクレジットカード番号など、重要なデータが行き来します。
TLS(Transport Layer Security)は、こうした通信を守るための仕組みであり、私たちが日々何気なく使っているWebサイトやアプリケーションの裏側で活躍しています。
TLSは、データを暗号化し、改ざんを防ぎ、相手が本物かどうかを確認することで、安全な通信を実現しています。

今回はそんなTLSについてじっくりと学習していきましょう。
TLS(Transport Layer Security)とは
TLS(Transport Layer Security)は、インターネット上でデータを安全に送受信するための暗号化プロトコルです。
ウェブサイトのアドレスが「https://」で始まる場合、TLSが利用されています。



最近のウェブサイトはhttps://で始まるものが多いですね。



暗号化通信が一般的になってきたのですね。
TLSはSSL(Secure Sockets Layer)を発展させたもので、SSL1.0→2→3→TLS1→1.1→1.2→1.3と進化してきました。
TLSはインターネットの重要なセキュリティ技術として、トランスポート層に属しますが、アプリケーション層との関わりも深く、HTTP、FTP、SMTP、POP3などの多くのアプリケーション層プロトコルを保護します。
特にHTTP通信では、URLがhttp://ではなくhttps://となることでTLS通信が行われ、データの盗聴や改ざんを防止します。



http://がhttps://に変わって何が変化したのかと思っていましたが、通信の安全性がぐっと向上したのですね。
ブラウザ上でTLSが有効になると、ユーザーは安心して個人情報や機密情報を送信できるようになり、オンライン取引や電子決済が安心して行えるようになります。
また、TLSは単に暗号化するだけでなく、データの完全性を保証し、改ざん検知を実現する役割も持ちます。



TLSはインターネット通信の信頼性とセキュリティを支える基盤技術として、今後ますます重要性を増していくと考えられます。
なお、各プロトコルでの代表的なポート番号は以下のとおりです。
プロトコル | 通常のポート番号 | TLS使用時のポート番号 |
---|---|---|
HTTP | 80 | 443 |
FTP | 21 | 990 |
SMTP | 25 | 465(SMTPS) |
POP3 | 110 | 995 |
TLSの機能
TLSの主な機能は以下の4つです。
- 暗号化:送信するデータを暗号化し、パスワードや個人情報が漏えいしないように保護します。TLSは強力な暗号アルゴリズムを用いてデータを守ります。
- サーバ認証:サーバの正当性を証明し、ユーザーが偽装されたサーバに接続しないようにする仕組みです。証明書を用いてユーザーが安心して通信できるようにします。
- クライアント認証:クライアントの正当性も証明し、場合によっては企業のイントラネットなどで双方向の信頼性を確立します。安全な通信だけでなく、アクセス制御にも役立ちます。
- 改ざん検出機能:データが送信中に改ざんされないように、メッセージ認証コード(MAC)などを使用して完全性を保証します。
これらの機能により、ユーザーとウェブサーバの間で安全かつ信頼性の高い通信が実現し、プライバシー保護やデータセキュリティの向上が図られます。
TLSの通信の流れ(ハンドシェイク)
TLSは、通信開始時に「ハンドシェイク」と呼ばれるやり取りを行い、セキュアな通信経路を確立します。
以下は代表的な流れです。
- クライアントHello:クライアントがサーバにTLSバージョンや暗号スイート(利用可能な暗号化方式)を送信。
- サーバHello:サーバがTLSバージョン、暗号スイート、サーバ証明書をクライアントに送信。
- 証明書検証:クライアントはサーバ証明書を検証し、サーバが正当なものか確認。
- 鍵交換:共有鍵(セッション鍵)を生成するための仕組み(Diffie-Hellman鍵交換など)を使って、暗号化の準備を行う。
- Finishedメッセージ:通信路が安全に確立されたことを確認し、アプリケーションデータのやり取りが始まる。



ざっくりと全体の流れをまずは見ていきましたが、TLSのバージョンによってもハンドシェイクの流れが変わります。それぞれのバージョンでのハンドシェイクの流れを見ていきましょう。
TLS1.2ハンドシェイクの流れ
TLS1.2では、通信を始める前にTCPの3Wayハンドシェイクで接続を確立した後、以下のステップでTLSハンドシェイクが行われ、セキュアな通信路を確立します。
- ClientHello(C→S):TLSバージョン、サポートしている暗号スイート、圧縮方式、拡張情報(例えばSNIやセッションチケット)など、クライアントが利用できる機能や希望するセッションの詳細を送信します。さらにセッションIDやランダム値を含め、サーバとのセッション確立に必要なパラメータを網羅的に提示し、セキュリティのための鍵交換を行う準備を始めるリクエストを送ります。


- ServerHello(S→C):サーバは使用する暗号スイートを選択し、TLSバージョン、圧縮方式、拡張情報(セッションID、ランダム値、拡張拡張など)を決定し、さらにセッション管理情報、暗号スイート選択の理由、推奨される安全な暗号化方式、その他の追加情報も含めて、クライアントに返答します。
- ServerCertificate(S→C):サーバの公開鍵を含む証明書が送られ、証明書のチェーン構造や署名アルゴリズム、証明書失効リスト(CRL)情報、OCSP(Online Certificate Status Protocol)レスポンスや拡張キー使用法(EKU)などの追加情報も含めて送られ、これによってサーバの正当性が多角的に検証できます。
- ServerKeyExchange(S→C):一部の暗号スイートでは、追加の鍵交換情報(Diffie-Hellmanパラメータ、ECDHEパラメータ、RSA鍵交換用パラメータ、さらに楕円曲線など)やサーバのデジタル署名アルゴリズム(例えばSHA-256やSHA-384)、署名値、鍵交換のバリエーション、暗号スイートの柔軟な対応、クライアントとの互換性確保のための付加情報なども送られ、鍵共有と検証が多角的に行われます。


- CertificateRequest(S→C・任意):クライアント認証が必要な場合、サーバはクライアント証明書を要求します。具体的には、要求する証明書の種類(例えばRSA、DSA、ECDSA)や証明書のパス(PKIパス)、サポートする署名アルゴリズム、証明書の利用用途(Client Authentication)などの追加情報が含まれます。
- ServerHelloDone(S→C):サーバ側の送信が一旦完了したことを示します。TLS1.2では、このメッセージは必須であり、これ以降クライアント側のレスポンス(鍵交換や暗号化切り替え)が行われます。ServerHelloDoneには署名が含まれないが、後続のメッセージで改ざん検証が行われることにより安全性を確保しています。


- ClientCertificate(C→S・任意):要求があった場合、クライアントは自分の証明書を送信します(オプション)。さらに、証明書のチェーンや署名アルゴリズム、証明書の拡張属性、OCSPステータス、クライアントのID情報、証明書の有効期限、発行者情報、サブジェクト情報、EKU(拡張キー使用法)なども含まれ、多角的かつ詳細に認証が行われます。
- ClientKeyExchange(C→S):クライアントはサーバの公開鍵を使ってプリマスターシークレットを暗号化して送信します。さらに、このメッセージにはサポートしている鍵交換アルゴリズム(例えばRSA、DHE、ECDHEなど)や関連するパラメータが含まれる場合があり、暗号スイートに応じて異なる処理が行われます。TLS1.2では、サーバとクライアントが共通の鍵を共有し、安全な通信を確立するために重要な役割を果たします。
- CertificateVerify(C→S・任意):デジタル署名で、クライアントが提示した証明書の所有者であることを証明します。また、このメッセージにはクライアント証明書チェーン、署名アルゴリズム、TLSセッションIDなども含まれ、証明書の改ざんチェック、署名検証、クライアントIDの確認などを多角的に行い、信頼性を高める役割も果たします。


- ChangeCipherSpec(C→S):これ以降、クライアントは暗号化通信を使用することを通知します。ここから暗号化通信が開始されることをサーバに通知します。さらに、このメッセージはハンドシェイクメッセージの終わりを示し、TLS1.2では必須のメッセージです。これにより、クライアントが選択した暗号方式で実際のアプリケーションデータ通信が安全に行われるようになります。また、このChangeCipherSpecメッセージの送信後は、Finishedメッセージやアプリケーションデータが暗号化されるため、セキュリティが格段に向上します。
- Finished(C→S):ハンドシェイク全体の整合性を確認するために、すべてのメッセージのハッシュを送ります。このメッセージには、これまでのすべてのハンドシェイクメッセージをまとめて検証するためのデータや、ハンドシェイク全体の完了を示す暗号化データも含まれ、通信の整合性とセキュリティがさらに強化されます。また、Finishedメッセージには、クライアントが選択した暗号方式、ハッシュ関数、TLSセッションIDなどの情報も含まれており、暗号化通信の一貫性や安全性をさらに高めます。


- ChangeCipherSpec(S→C):以降、暗号化通信に切り替えることを通知します。このメッセージは、TLSプロトコルにおいて暗号化通信の開始を示す重要な役割を持ち、TLS1.2におけるハンドシェイクの流れにおいて必須のステップとなっています。サーバは、これにより選択した暗号スイートを使い、以後の通信が暗号化されることをクライアントに示します。
- Finished(S→C):サーバ側もすべてのメッセージのハッシュを送って、暗号化通信が確立されます。このメッセージにはサーバが選んだ暗号方式、セッションID、署名アルゴリズムなどの情報が含まれ、通信の整合性と安全性が強化されます。さらに、Finishedメッセージの送信後、サーバ側でもアプリケーションデータが安全に暗号化されて送信されるようになります。


このように、TLS1.2では複雑なやり取りを経て、安全な通信路を確立してからデータの送受信が始まります。
さらに、各ステップの間でのセッションID管理、再ネゴシエーション、セッションチケット管理、拡張機能のネゴシエーション、中間証明書の検証、クライアント証明書の連携、さらにレコード分割や圧縮、暗号スイートの優先度などの手順も加わり、よりセキュアで多層的な通信が実現されています。
TLS1.3ハンドシェイクの流れ
TLS1.3では、従来のTLS1.2に比べてハンドシェイクの手順が大幅に簡略化されました。
特にChangeCipherSpecメッセージが省略され、暗号化や証明書のやり取りがよりシンプルかつ高速に行われます。
さらにTLS1.3では暗号化通信の確立が早くなり、0-RTT再送信などの新しい機能も導入され、レイテンシが削減されています。
※レイテンシ(latency)とは、コンピュータネットワークや通信システムにおいて、データが送信されてから受信されるまでの遅延時間のことを指します。たとえば、あなたがスマートフォンでウェブサイトを開こうとしたとき、リクエストを送信してからそのページが表示されるまでの待ち時間がレイテンシです。
以下はTLS1.3のハンドシェイクの基本的な流れです。
- TCP 3Wayハンドシェイク:TLSハンドシェイクの前に、まずTCP接続が確立されます。
- ClientHello(C→S):クライアントが対応している暗号スイートやTLSバージョン、サポートする拡張機能(例:SNIやALPN)などをサーバに送信します。


- ServerHello(S→C):サーバが採用する暗号スイートを選択し、クライアントに応答します。この時点で、以降のメッセージは暗号化されます。
- EncryptedExtensions(S→C):サーバから追加の情報(例:ALPN、サーバ名)を送信します。
- Certificate(S→C):サーバ証明書(公開鍵含む)を送信し、サーバの正当性を証明します。


- CertificateVerify(S→C):サーバ証明書の正当性を示すためのデジタル署名を送信します。
- Finished(S→C):サーバ側のハンドシェイク完了を示すハッシュ値(MAC)を送ります。


- Certificate(C→S・任意):クライアント証明書が必要な場合、クライアントが送信します。
- CertificateVerify(C→S・任意):クライアント証明書が正しいことを示すデジタル署名を送ります。
- Finished(C→S):クライアント側のハンドシェイク完了を示すハッシュ値(MAC)を送信します。


このように、TLS1.3のハンドシェイクではステップが簡略化され、より迅速かつ安全に通信を開始できるようになりました。
さらに、TLS1.3ハンドシェイクは、クライアントとサーバ間の暗号スイートの合意、証明書検証、証明書要求、暗号鍵生成、そして暗号化通信の開始までの流れを含み、TLS1.2に比べて手順が少なく、より高速化されています。
サーバ認証
TLSの機能の一つに「サーバ認証」があります。
サーバ認証とは、通信相手が本当に信頼できるサーバであることを確認するための仕組みです。
これにより、ユーザーはなりすましや中間者攻撃を防ぐことができます。
サーバ認証には「サーバ証明書」と呼ばれるデジタル証明書が必要です。
この証明書にはサーバの公開鍵やドメイン名、証明書を発行した認証局(CA)の署名などが含まれています。
サーバ証明書には主に以下の3つの種類があります。
- DV(Domain Validation) ドメイン所有権を確認するだけの簡易的な認証で、個人や小規模サイトでも取得しやすいです。ただし、組織情報までは保証されないため、信頼性はやや低めです。
- OV(Organization Validation) ドメイン所有権に加え、運営組織の実在性も認証します。中小企業や商用サイトでよく利用されます。ブラウザ上で組織名が表示され、ユーザーは安心感を得られます。
- EV(Extended Validation) 最も厳格な審査が行われる証明書で、企業の実在性や法的存在も厳しく確認されます。ブラウザ上で企業名がグリーンバーなどで目立って表示されるため、特にフィッシング詐欺対策として高い信頼性があります。



DVは以下の手順で確認することができます。








このようにTLSのサーバ認証は、インターネット通信において安全性と信頼性を高める重要な役割を果たしています。
まとめ
TLSはインターネット通信の安全を支える重要なプロトコルです。
ウェブサイトだけでなく、メール、VPN、チャットアプリなどさまざまな通信で利用され、特に暗号化、サーバ認証、クライアント認証、改ざん検出機能といった多機能な側面が、現代のインターネットにおけるプライバシー保護と安全性を支える基盤となっています。
また、TLSは様々な業界標準やセキュリティ規格にも組み込まれており、金融、医療、公共インフラ、そしてIoTデバイスなどでも広く利用されています。
TLSの普及により、世界中のユーザーが安心してデジタルサービスを利用できるようになりました。



皆さんもTLSを有効活用して、安全な通信を利用してくださいね。