ITの教科書検索
入門読了 約12分

SSL/TLSとは ― SSLとTLSの違いとハンドシェイクの流れ

SSLは廃止された旧規格で、いま動いているのはTLSです。SSLとTLSの違いや暗号化が始まる位置、TLS 1.2と1.3の違い、証明書エラーの原因が分かります。

目次
  1. SSL/TLSとは
  2. SSLとTLSの違い
  3. TLSが守る3つのこと
  4. TLSハンドシェイクの流れ
  5. TLS 1.2と1.3の違い
  6. 証明書エラーの主な原因
  7. HTTPS以外のTLS
  8. 練習問題
  9. 参考にした資料

SSL/TLSとは、通信を暗号化して相手を確かめるプロトコル

SSL/TLSは、通信を暗号化するプロトコルです。相手が本物かを確かめ、途中の改ざんも見つけます。SSLは昔の規格の名前で、いま実際に動いているのはTLSです。

「SSL証明書を入れてください」「サイトをSSL化しましょう」と言われたら、中身はほぼTLSの話です。取引先から「TLS 1.0/1.1は廃止するので、1.2以上に対応してください」と連絡が来ることもあります。相手が古いバージョンを止めると、対応していない機器はその日から接続できなくなります。

SSLとTLSの関係から、暗号化が始まる位置やTLS 1.2と1.3の違い、証明書エラーの原因まで順に説明します。

SSLとTLSの違い:SSLは使用が禁止された旧規格

SSLは、Netscape社が作った暗号化のプロトコルです。SSL 3.0をもとに、IETFが標準として定めたものがTLSです。IETFは、インターネットの技術を標準化する団体です。名前が変わっただけではなく、SSLはすでに使用が禁止され、いま使えるのはTLS 1.2と1.3です。

バージョン公開規格いまの扱い
SSL 2.01995年RFCなし使用禁止。RFC 6176(2011年)
SSL 3.01996年RFC 6101使用禁止。RFC 7568(2015年)
TLS 1.01999年RFC 2246廃止。RFC 8996(2021年)
TLS 1.12006年RFC 4346廃止。RFC 8996(2021年)
TLS 1.22008年RFC 5246使える。機能の追加は止まっている
TLS 1.32018年RFC 8446。2026年にRFC 9846へ改訂使える。両者が対応していれば優先する

SSLという語は、製品名や設定画面にいまも残っています。「SSL証明書」の実体は、TLSで使うサーバ証明書です。そのため「SSL」と書かれていても、SSL 3.0以前で通信しているとは限りません。

「TLS 1.2以上に対応してください」と言われたら

TLS 1.0と1.1は、2021年のRFC 8996で廃止されました。いまの強い暗号方式を選べないことと、古いハッシュ関数のSHA-1に頼っていることが理由です。

確かめる場所は、接続の両端です。片方が新しくても、共通のバージョンがなければ接続できません。古いOSやライブラリ、長年動かしている機器は、とくに確認が必要です。

サーバがTLS 1.2で接続できるかは、OpenSSLのコマンドで確かめられます。-tls1_2は、TLS 1.2だけを使う指定です。-servernameは、接続先のサイト名を渡す指定です。

openssl s_clientTLS 1.2でサーバに接続する
$ openssl s_client \
    -connect example.com:443 \
    -servername example.com \
    -tls1_2 -brief
CONNECTION ESTABLISHED
Protocol version: TLSv1.2
Ciphersuite: ECDHE-ECDSA-CHACHA20-POLY1305
Peer certificate: CN=example.com
Verification: OK
# 主な行だけを抜き出しています

Protocol versionの行に指定したバージョンが出れば、そのバージョンで通信できています。Verificationの行は、証明書の検証の結果です。

TLSが守る3つのこと:盗聴・なりすまし・改ざん

TLSは、通信の途中で起きる3つの被害を防ぎます。HTTPに足りないものをTLSがどう補うかは、HTTPとHTTPSの記事を読むと分かります。

防ぐものTLSがすること使う仕組み
盗聴中身を暗号化し、途中で見られても読めなくする共通鍵暗号
なりすまし相手が証明書の持ち主であることを確かめる電子証明書とデジタル署名
改ざん書き換えられたデータを受信側で見つける認証付き暗号の認証タグ

TLS 1.3の暗号は、すべて認証付き暗号(AEAD)です。暗号化と同時に、データの検査用の値を作ります。この値を認証タグと呼びます。受信側は認証タグを確かめ、合わなければ接続を切ります。鍵を使って検査用の値を作る考え方は、メッセージ認証符号の記事で説明しています。

経路上で読める暗号化されて読めないIPヘッダ宛先IPアドレスTCPヘッダ宛先ポート 443TLSヘッダ種類・長さHTTPのデータURL・Cookie・本文認証タグ検査用の値書き換えると検知できるIPヘッダ宛先IPアドレスTCPヘッダ宛先ポート 443TLSヘッダ種類・長さHTTPのデータURL・Cookie・本文認証タグ検査用の値読める読めない点線の範囲は書き換えを検知
TLSは、HTTPのデータを暗号化し、認証タグを付けます。IPヘッダとTCPヘッダは、相手に届けるために必要なので暗号化しません。TLSヘッダの種類と長さは平文ですが、認証タグの検証の対象に入ります。

TLSが守るのは、通信の途中だけです。IPアドレスとポート番号は経路上で読めますし、データのおおよその長さも分かります。サーバに保存したデータや、端末の中のデータには別の対策が必要です。

TLSハンドシェイクの流れ:暗号化はどこから始まるのか

TLSハンドシェイクは、暗号化した通信を始める前の準備です。使う暗号方式を決めること、証明書を確かめること、共通鍵を共有することの3つをします。HTTPSでは、TCPの3ウェイハンドシェイクのあとに始まります。

TLS 1.3の暗号化は、サーバの最初の返事であるServerHelloの次から始まります。最初の1往復で鍵の材料を交換し終えるからです。TLS 1.2では、ハンドシェイクの終わりのFinishedから暗号化が始まります。

鍵の共有に公開鍵暗号の仕組みを使い、本文を共通鍵暗号で送るのは、それぞれの弱点を補うためです。理由はハイブリッド暗号の説明にあります。実際のメッセージを1通ずつ追うと、次のようになります。

バージョンを選び、「次へ」で1通ずつ進めます。「第三者から見えるもの」は、同じ経路を盗み見ている人に読めるかどうかです。サイト名の欄は、ECHを使わない場合の表示です。

STEP 1 / 5
準備の1往復目
クライアント → サーバ
ClientHello
平文
ステップ1:クライアントが条件と鍵の材料を送る
使えるTLSのバージョンと暗号方式の一覧を送ります。鍵の材料も、この時点で一緒に送ります。接続先のサイト名も平文で入ります。このサイト名の欄をSNIと呼びます。
第三者から見えるもの
  • 宛先のIPアドレス・ポート番号見える
  • 接続先のサイト名見える
  • サーバの証明書未送信
  • URL・Cookie・本文未送信

TLS 1.3でも、接続先のサイト名は暗号化されないまま(平文で)流れます。1つのIPアドレスで複数のサイトを動かすサーバが、返す証明書を選ぶのに使うからです。ClientHelloを暗号化するEncrypted Client Hello(ECH)は、2026年にRFC 9849になりました。使えるかどうかは、ブラウザとサーバの対応で決まります。

TLS 1.3の鍵交換と署名の確認の順序は、HTTPSの記事の図でも確かめられます。証明書をルートまでたどる手順は、証明書チェーンの説明を読むと分かります。

TLS 1.2と1.3の違い:準備が1往復減り、古い暗号方式が外れた

最初の接続の準備は、TLS 1.2が2往復、TLS 1.3が1往復です。たとえば、往復に50ミリ秒かかる回線で考えます。TCPの1往復を足すと、本文を送り始めるまでが150ミリ秒から100ミリ秒に縮みます。

TLS 1.2:準備は2往復クライアントサーバ1往復目2往復目本文ClientHelloServerHello・証明書鍵の材料鍵の材料FinishedFinishedリクエスト・レスポンスTLS 1.3:準備は1往復クライアントサーバ1往復目本文ClientHello・鍵の材料ServerHello・鍵の材料証明書・署名・FinishedFinishedリクエスト・レスポンス平文暗号化平文暗号化TLS 1.2:準備は2往復クライアントサーバ1往復目2往復目本文ClientHelloServerHello・証明書鍵の材料鍵の材料FinishedFinishedリクエスト・レスポンスTLS 1.3:準備は1往復クライアントサーバ1往復目本文ClientHello・鍵の材料ServerHello・鍵の材料証明書・署名・FinishedFinishedリクエスト・レスポンス
TLS 1.3は、最初の送信で鍵の材料を渡すので、準備が1往復で済みます。証明書も暗号化されます。TLS 1.2では、証明書が平文で流れ、暗号化はFinishedから始まります。
比べる点TLS 1.2TLS 1.3
最初の接続の準備2往復1往復
暗号化の始まりFinishedから。証明書は平文で流れるServerHelloの次から。証明書も暗号化する
鍵の共有ECDHEのほかにRSA鍵交換も定義されているECDHEなどの鍵交換か、事前共有鍵。RSA鍵交換は削除
本文の暗号認証付き暗号のほかに古い方式も定義されている認証付き暗号だけ
再接続の準備1往復1往復。0-RTTなら最初の送信に本文を載せられる

RSA鍵交換が消えた理由:過去の通信を守るため

TLS 1.2のRSA鍵交換では、共通鍵のもとをサーバの公開鍵で暗号化して送ります。サーバの秘密鍵が後で漏れると、記録されていた過去の通信まで復号されてしまいます。

ECDHEは、接続ごとに使い捨ての鍵の組を作ります。証明書の秘密鍵は署名に使うだけです。そのため、秘密鍵が後で漏れても、過去の通信の共通鍵は計算できません。この性質を前方秘匿性と呼びます。TLS 1.3では、公開鍵暗号を使う鍵交換のすべてがこの性質を持ちます。2026年のRFC 10015は、TLS 1.2でもRSA鍵交換を使わないよう定めました。

0-RTTは再接続を速くするが、再送に弱い

TLS 1.3では、前に接続したサーバが対応していれば、最初の送信に本文を載せられます。この機能を0-RTTと呼びます。ただし、この本文は攻撃者に記録され、別の接続で送り直されることがあります。TLSの仕様は、接続をまたいだ再送を防ぐ保証をしていません。注文のように2回実行されると困る処理には向きません。

TLS 1.2はまだ使えるのか

TLS 1.2は使えます。2022年のRFC 9325は、推奨どおりに設定すれば、すぐにTLS 1.3だけへ移る必要はないとしています。対応している場合はTLS 1.3を優先します。

一方で、TLS 1.2の機能の追加は止まりました。2026年のRFC 9851は、緊急のセキュリティ修正などを除いて変更を認めないと定めています。同じ年のRFC 9852は、TLSを使う新しいプロトコルにTLS 1.3を必須としました。新しく作るシステムは、TLS 1.3を使える構成にしておくと、この先の移行で困りません。

証明書エラーの主な原因:期限切れ・ドメイン不一致・中間証明書の不足

証明書の検証に失敗すると、ブラウザは接続を止めて警告を出します。設定ミスでも、中間者攻撃でも、同じような警告になります。利用者の側からは区別できないので、自分が管理していないサイトでは先へ進まないでください。

Chromeは、警告の画面にエラーの名前を出します。Firefoxなど別のブラウザでは、名前が異なります。

Chromeの表示主な原因確かめること
NET::ERR_CERT_DATE_INVALID証明書の期限切れ。端末の時計のずれ証明書の有効期間と、端末の日時
NET::ERR_CERT_COMMON_NAME_INVALID証明書の名前と、開いたドメイン名の不一致証明書に、開いたURLのドメイン名が書かれているか
NET::ERR_CERT_AUTHORITY_INVALID信頼できるCAまでたどれない。自己署名証明書、中間CA証明書の不足など発行者と、サーバが中間CA証明書も送っているか
NET::ERR_CERT_REVOKED有効期間の途中で証明書が失効した失効の理由と、新しい証明書への入れ替え
ERR_SSL_VERSION_OR_CIPHER_MISMATCH共通のバージョンか暗号方式がない。サーバがTLS 1.1以下にしか対応していないなどサーバのTLSの設定

ドメイン名の不一致で多いのは、wwwの有無です。ブラウザは、証明書の subjectAltName という欄に書かれた名前と、開いたドメイン名を比べます。www.example.comだけの証明書でexample.comを開くと、別の名前として不一致になります。

中間CA証明書の不足は、サーバの設定で起きます。サーバは、サーバ証明書と一緒に中間CA証明書も送る必要があります。Chromeには、証明書に書かれた取得先から足りない証明書を取りに行く処理があります。そのため、Chromeでは開けるのに、この処理を持たない別のプログラムでは失敗することがあります。

TLS 1.1以下にしか対応していないサーバをChromeで開くと、証明書の警告ではなく接続エラーになります。表の最後の行の表示です。

HTTPS以外のTLS:メール・VPN・DNS

TLSは、上で動くプロトコルを選びません。そのため、HTTPのほかにメールやVPN、DNSの通信も暗号化できます。

用途始め方ポート番号
Web(HTTPS)最初からTLSTCP 443
Web(HTTP/3)QUICの中でTLS 1.3の手順を使うURLで番号を省くとUDP 443。別の番号も使える
メールの送信最初からTLS(SMTPS)TCP 465
メールの送信平文で始めてSTARTTLSで切り替えるTCP 587
メールの受信最初からTLS(IMAPS・POP3S)TCP 993・995
サーバ間のメール配送平文で始めてSTARTTLSで切り替えるTCP 25
SSL-VPNTLSの接続の中に社内向けの通信を通す製品による。TCP 443など
DNS(DoT)最初からTLSTCP 853

始め方は2通りあります。1つは、接続した直後からTLSを使う方式です。もう1つは、平文で始めてからSTARTTLSというコマンドで暗号化に切り替える方式です。メールの方式の違いは、メールが届く仕組みの記事にあります。

練習問題(全6問)

Q1SSLとTLSの関係として正しいものは?
Q2TLS 1.3で、ハンドシェイクのメッセージが暗号化され始めるのはどこから?
Q3往復に40ミリ秒かかる回線で、TCPの接続のあとに行うTLSをTLS 1.2から1.3に変える。最初の接続で本文を送り始めるまでの時間はどれだけ縮む?
Q4TLS 1.3のHTTPSで https://example.com/mypage を開いたとき、経路上の第三者に読めるものは?ECHは使っていないものとする。
Q5証明書に www.example.com しか書かれていないサーバを、https://example.com/ で開いた。起きやすいエラーはどれ?
Q6ECDHEで鍵を共有する接続の性質として正しいものは?

選んでから「採点する」を押すと、解説つきで答え合わせができます。

参考にした資料

関連記事

おすすめの本 PR

セキュリティとデータベースは、基本情報技術者試験の対策本でまとめて学べます。

目的別の本の選び方を見る

セキュリティの記事を続けて読む

セキュリティ 全37本中15本目