
TLSとは?「証明書を確認してから暗号通信を始める」仕組みをやさしく解説
Webサイトを開いた時、URLが「https://」で始まっていれば、通信にはTLSが使われています。しかし、「証明書」「公開鍵」「秘密鍵」「共通鍵」が一度に登場するため、仕組みが分かりにくく感じます。
結論から言うと、TLSは次の三つを実現する仕組みです。
通信相手が正しいサーバか確認する
通信内容を暗号化して盗み見を防ぐ
データの書き換えを検知する
HTTPSは「HTTPをTLSで保護した通信」と考えると分かりやすいです。
TLS通信は三段階で始まる
例として、ブラウザからWebサーバへ接続する流れを見てみます。
1.使用する暗号方式を決める
最初にブラウザは、対応できるTLSのバージョンや暗号方式などをサーバへ伝えます。サーバは、その中から利用する方式を選んで応答します。
この時点では、まだ本格的な暗号通信は始まっていません。安全な通信を始めるための準備段階です。
2.サーバ証明書を確認する
次にサーバは、サーバ証明書をブラウザへ提示します。証明書には、サイトのドメイン名、公開鍵、有効期限、発行者などが記録されています。
ブラウザは主に次の点を確認します。
信頼できる認証局が発行した証明書か
接続先のドメイン名と証明書の名前が一致するか
有効期限が切れていないか
証明書が改ざんされていないか
この確認には、端末やブラウザが持つ「信頼できる認証局の一覧」が使われます。Javaアプリケーションから外部のHTTPS APIへ接続する場合は、Javaのトラストストアが同じような役割を担います。
証明書を見れば公開鍵は入手できますが、サーバだけが持つ秘密鍵は外部へ送られません。サーバは秘密鍵を使って通信開始時の情報に署名し、「この証明書の正当な所有者である」ことを証明します。
3.共通鍵を作って暗号通信を始める
相手を確認した後、ブラウザとサーバは、やり取りした情報から同じ「共通鍵」を作ります。現在主流のTLSでは、共通鍵そのものをネットワークへ送るのではなく、双方が鍵交換用の情報を出し合って同じ秘密を計算します。
その後のWebページ、パスワード、APIのデータなどは、この共通鍵を使って暗号化されます。
なぜ公開鍵方式を通信全体に使わないのでしょうか。公開鍵暗号は本人確認や鍵交換に向いていますが、大量のデータ処理には負荷がかかります。一方、共通鍵暗号は高速です。そのためTLSでは、それぞれの長所を組み合わせています。

公開鍵と秘密鍵の役割を整理する
混乱しやすい点を、ひと言で整理すると次のようになります。
サーバ証明書:サーバの身分証明書
公開鍵:証明書に含まれ、利用者にも公開される鍵
秘密鍵:サーバだけが厳重に保管する鍵
共通鍵:接続ごとに作り、実際のデータ暗号化に使う鍵
トラストストア:信頼する認証局の証明書を保管する場所
「サーバの秘密鍵でWebページ全体を暗号化している」と覚えるのは正確ではありません。少なくとも現在主流のTLSでは、秘密鍵は主にサーバの本人確認に使われ、実際の通信データは接続ごとに作られた共通鍵で守られます。

まとめ
TLSの流れは、「相手を確認する→安全に共通鍵を作る→共通鍵でデータを守る」の順番です。
鍵や証明書を別々に暗記するより、「誰を信頼するのか」「どの鍵を何に使うのか」を通信の順番に沿って考えると、TLSの全体像が見えやすくなります。
あわせて読みたい関連記事
HTTPSについて記事にしておりますので、こちらもご覧いただければ幸いです。