株式会社ジオデータ開発 ロゴ
株式会社ジオデータ開発GEO DATA DEVELOPMENT Inc.
WEB SECURITY / TLS

SSL/TLSとサーバー証明書・クライアント証明書をゼロから理解する

銀行サイトの鍵マークは、何を保証している? 公開鍵は署名に使うの、それとも暗号化に使うの? ひとつの買い物の場面から順番につなげます。

まずは銀行のサイトで考える

スマートフォンで銀行のサイトを開き、残高を確認するとします。ここで心配なのは3つ。①偽の銀行に接続していないか、②残高や暗証情報を盗み見られないか、③送金先を書き換えられないか、です。

①相手は本当に銀行?

サーバー証明書と、その鍵の所有証明などを使って接続先を確認します。

②内容を読まれない?

TLSが導出した共通鍵で通信を暗号化します。

③途中で変更されない?

TLSの認証付き暗号が通信データの改ざんを検出します。

これらをまとめて実現するのがHTTPSで使われるTLSです。証明書が暗号化そのものをするわけではありません。証明書は主に「誰の公開鍵か」を確かめる材料です。

言葉の全体像:何が何を担当するのか

言葉担当たとえ
SSL / TLS通信を安全にするプロトコル。現在はTLSが正式な主役安全な通話ルール
HTTPSHTTPをTLSで保護した通信安全な道で開くWebサイト
サーバー証明書サイト名とサーバー公開鍵を結び付ける店の身分証
クライアント証明書利用者・端末側の公開鍵などを証明する社員証
認証局(CA)証明書を検証・発行・署名する身分証の発行元
電子署名秘密鍵で署名し公開鍵で検証する偽造しにくいサイン
鍵交換通信に使う共通の秘密を両者で導く2人だけの合言葉作り
共通鍵暗号大量の通信を高速に暗号化する会話を暗号で包む
SSLという名前が残っている理由:「SSL証明書」という通称は広く残っていますが、現在のHTTPSではTLSを使います。古いSSLプロトコルを使うという意味ではありません。

鍵には3つの仕事がある

「鍵」とひとことで言っても、登場する鍵は一種類ではありません。ここを分けると急に分かりやすくなります。

A. 署名用の公開鍵・秘密鍵

本人が秘密鍵で署名し、相手が公開鍵で確かめます。TLS 1.3での証明書認証に登場します。

B. 鍵交換用の一時的な鍵

通常はECDHEなどを使います。双方が交換した公開情報と自分だけの秘密から、同じ通信秘密を導きます。

C. 通信用の共通鍵

実際の通信本文の暗号化に使います。通信のたびに使う暗号方式はAES-GCMなどの認証付き暗号です。

たとえばレストランで「店員の身分確認」「お互いの合言葉決め」「合言葉を使った秘密の会話」が別の手順であるのと同じです。

サーバー証明書は「この公開鍵はこのサイトのもの」という説明書

ブラウザが https://bank.example に接続すると、サーバーは自分の証明書を提示します。証明書には、対象のドメイン名(通常はSAN)、公開鍵、発行元、期限、用途などの情報が入っています。秘密鍵は含まれません。

証明書のイメージ(架空の例)
Subject Alt Name: bank.example
Public Key: (公開される値)
Issuer: Example Intermediate CA
Validity: Not Before / Not After
Key Usage: Digital Signature
CA Signature: (認証局による署名)

ここで2種類の署名を区別しましょう。認証局による証明書への署名は「この証明書の内容を発行元が保証した」ことを示します。一方、サーバーの秘密鍵によるハンドシェイク署名は「目の前の通信相手が、証明書の公開鍵に対応する秘密鍵を持っている」と示します。役割が違います。

認証局は何をしている?

誰でも「私は銀行です」と書かれた自称の証明書は作れます。それだけでは信用できません。そこで信頼できる認証局(CA)が、証明書の内容を確認したうえで署名します。ブラウザは信頼するルートCAをあらかじめ保持し、サーバー証明書までの署名のつながりを検証します。

信頼済みルートCA

OSやブラウザの信頼ストア

↓
中間CA

ルート/上位CAによる署名で検証

↓
bank.example のサーバー証明書

中間CAの署名・サイト名・期限などを検証

ただし「CAが署名した」だけで十分ではありません。アクセスしたドメイン名と一致するか、有効期限・鍵用途・失効情報など、適用される検証条件も確認します。鍵マークは銀行の経営の健全性やWebページの内容の安全性まで保証しません。

HTTPSでは実際に何が起こる?

代表例として、証明書でサーバーを認証するTLS 1.3の通常の新規接続を追ってみます。実際には通信の往復や暗号化開始のタイミングなどが細かく定められていますが、ここでは役割ごとに整理します。

1

接続の相談

ブラウザがClientHelloを送信し、対応方式と鍵交換用の一時公開値などを提示します。

2

鍵交換

サーバーがServerHelloなどを返し、双方が(EC)DHEなどからハンドシェイク用の鍵を導きます。

3

サーバー証明書の提示

サーバーが証明書チェーンを提示。ブラウザがサイト名や信頼経路などを確認します。

4

サーバーの署名検証

サーバーが秘密鍵でハンドシェイクに署名(CertificateVerify)。ブラウザは証明書の公開鍵で検証します。

5

通信の開始

Finishedによる検証を経て、導出した共通鍵でHTTPSの本文を認証付き暗号で保護します。

重要:TLS 1.3では、サーバー証明書の公開鍵を使って通信データを直接暗号化する方式ではありません。歴史的なTLS 1.2以前にはRSA鍵輸送などの方式もありましたが、現在のTLS 1.3では採用されていません。

公開鍵は暗号化用?署名用?

答えは「公開鍵暗号技術には両方の用途がある。ただし、同じ鍵・同じ方式を何にでも使うわけではない」です。代表例を区別しましょう。

目的鍵と方式具体例
暗号化受信者の公開鍵で暗号化/秘密鍵で復号(対応する方式の場合)公開鍵暗号・ハイブリッド暗号
署名署名者の秘密鍵で署名/公開鍵で検証電子契約・TLS 1.3のCertificateVerify
鍵合意各自の一時秘密値と交換した公開値から共通秘密を導出TLS 1.3のECDHE
通信暗号化双方で導いた共通鍵による認証付き暗号HTTPSのHTTP本文

ここでの鍵交換は、公開鍵でメッセージを暗号化して渡す操作とは異なります。ECDHEは両者が独立に計算して同じ共有秘密を得る鍵合意です。ECDSAやEd25519は署名方式であり、公開鍵暗号の暗号化方式ではありません。

クライアント証明書は何のため?

ふつうのHTTPSでは、ブラウザが「訪問先のサーバー」を確認します。一方、会社の経費精算システムでは「このアクセス元は会社が認めた端末か」も確認したいことがあります。そこでクライアント証明書を使います。

通常のHTTPS(片方向認証)

ブラウザがサーバー証明書を確認します。ユーザーのログインは、パスワード・パスキー等のアプリ側の仕組みで別に行うことが一般的です。

mTLS(相互TLS認証)

ブラウザやアプリもクライアント証明書を提示し、対応する秘密鍵を持つことを証明。サーバーもクライアントも互いを認証します。

社員証を見せるだけなら写真をコピーできるかもしれません。しかしTLSでは証明書ファイルを持っているだけでなく、対応する秘密鍵で実際に署名できることが必要です。秘密鍵はOSの保護領域やスマートカード、TPMなどに保管されることがあります。

クライアント証明書だけで「誰に何を許可するか」まで決まりません。端末の認証後に、アカウントのログイン、所属部署、操作権限などの確認が必要なシステムもあります。証明書が失効していないかなどの運用も重要です。

操作して確かめる:どの確認が失敗すると止まる?

以下では「サーバー証明書の名前を不一致にする」「認証局を信頼できなくする」「社員PCの証明書をなくす」などを切り替えてみてください。さらに、署名用公開鍵と通信の共通鍵の役割を切り替えると混同しにくくなります。

INTERACTIVE LAB

銀行のHTTPSと社員専用サイトを比べてみよう

「証明書を確認する」「鍵を使って相手を証明する」「通信を暗号化する」は別の役割です。状況を変えて確かめられます。

接続開始

ブラウザが対応するTLSバージョンと鍵交換用の情報などを送信。サーバーが応答します。

モデル上の最終判定:接続できる

公開鍵・秘密鍵・共通鍵の役割も切り替えよう

サーバー証明書には認証用の公開鍵が含まれます。サーバーは対応する秘密鍵でハンドシェイクに署名し、PCは公開鍵で検証します。CAも証明書に電子署名しますが、それは別の署名です。

教育用の判定モデルです。実際のTLSプロトコル、暗号計算、証明書失効検査、OS/ブラウザの細かな振る舞いを再現するものではありません。TLS 1.3の代表的な証明書認証方式を想定しています。

全部の技術を一枚で整理する

電子署名

秘密鍵で署名し、公開鍵で検証。単体では、その公開鍵が誰のものかまでは保証しません。

認証局(CA)

名前と公開鍵の結び付きを含む証明書に署名する主体。TLSの通信本文を直接暗号化する主体ではありません。

サーバー証明書

ブラウザが接続相手の名前・鍵を検証するための証明書。TLS 1.3では公開鍵をサーバーの署名検証に使います。

クライアント証明書

サーバーが接続元の鍵所有者を認証するための証明書。mTLSで使えます。

MAC / HMAC

共通鍵を共有する相手との間でメッセージの真正性・完全性を検証。第三者が署名者を検証する電子署名とは異なります。

TLSの共通鍵

鍵交換で導出し、通信本文を暗号化・認証するために使用。通常、証明書そのものに書かれている鍵ではありません。

ここだけは混同しない

誤解1:証明書があれば通信内容が暗号化される

証明書は主に相手確認の材料です。暗号化を実際に行うのは、TLSが導出した共通鍵と暗号方式です。

誤解2:公開鍵は暗号化に使う鍵である

署名検証にも使われます。TLS 1.3のサーバー証明書では、公開鍵は通常、秘密鍵による署名を確かめる役割です。

誤解3:CAの署名とサーバーの署名は同じ

CAは証明書に署名し、サーバーはハンドシェイクに署名します。検証対象も秘密鍵の持ち主も異なります。

誤解4:HTTPSならWebサイトも絶対安全

通信相手の確認や盗聴・改ざんへの保護を実現しますが、フィッシング、詐欺的な運営、サイト内部の脆弱性を全面的に防ぐものではありません。

誤解5:クライアント証明書=社員の権限

接続元を識別・認証する助けにはなりますが、業務上の権限は別途アプリケーション側で判断します。

まとめ:「相手確認」「合言葉づくり」「秘密の会話」を分ける

認証局は身分証の発行者、証明書は公開鍵つきの身分証、電子署名は秘密鍵の持ち主による証明、鍵交換は通信のための秘密づくり、共通鍵暗号は実際の会話の保護です。HTTPSはこれらを組み合わせる仕組みです。クライアント証明書を追加すると、サーバー側も接続元の鍵所有者を確認できます。

覚える順番

①「誰の公開鍵か」=証明書とCA

②「秘密鍵の持ち主か」=電子署名の検証

③「通信用の秘密を共有」=鍵交換

④「本文を安全に送る」=共通鍵による認証付き暗号