公開鍵基盤(PKI)と証明書
公開鍵が「確かに本人のものか」を第三者の認証局が保証する仕組みです。証明書チェーンと失効の管理で成り立ち、TLS の土台になっています。
- 1.PKI は「この公開鍵は確かにこの相手のもの」を信頼できる第三者(認証局=CA)が証明書で保証する仕組みで、TLS/HTTPS の土台です。
- 2.信頼はルート CA を頂点に証明書チェーンで橋渡しされます。ブラウザや OS が持つルート証明書が、最終的な信頼の起点になります。
- 3.鍵漏洩などで途中から信頼を取り消すのが失効(CRL / OCSP)。有効期間内でも無効化できる仕組みが安全性を支えます。
なぜ PKI が必要なのか
公開鍵暗号 を使えば、相手の公開鍵で暗号化したり、相手の署名を公開鍵で検証したりできます。しかしここには落とし穴があります。「その公開鍵が、本当に通信したい相手のものだと、どうやって確かめるのか」という問題です。
たとえば bank.example の公開鍵だと思って受け取ったものが、実は途中で攻撃者がすり替えた攻撃者の公開鍵だったら――暗号化した内容は攻撃者に読まれ、署名検証もすり抜けてしまいます。公開鍵そのものは誰でも作れるため、鍵と持ち主の結びつきを保証する仕組みがなければ、公開鍵暗号は中間者攻撃に対して無力です。
この「公開鍵と持ち主を、信頼できる形で結びつける」ための仕組み全体が **PKI(Public Key Infrastructure/公開鍵基盤)**です。中心にいるのが、その結びつきを保証する第三者=**認証局(CA)**です。
証明書と認証局(CA)
デジタル証明書は、ざっくり言えば「この公開鍵は、確かにこのドメイン(または組織)のものです」という、CA が電子署名で保証した身分証明書です。中身には主に次が入ります。
| 項目 | 内容 |
|---|---|
| 主体者(Subject) | 証明される対象(例 bank.example) |
| 公開鍵 | その主体者の公開鍵 |
| 発行者(Issuer) | 署名した CA の名前 |
| 有効期間 | この証明書がいつまで有効か |
| CA の署名 | 上記内容を CA の秘密鍵で署名したもの |
ポイントは末尾のCA の署名です。証明書の内容は、CA の秘密鍵で署名されています。利用者はCA の公開鍵でその署名を検証することで、「この証明書は確かにその CA が発行し、中身が改ざんされていない」と確認できます。
GET /index.html HTTP/1.1
Host: bank.example
# ↑ 接続時、サーバは自分の証明書を提示する。
# ブラウザは証明書の署名を CA の公開鍵で検証し、
# 公開鍵が確かに bank.example のものだと確認してから通信を始める。
つまり信頼は「相手を直接信じる」のではなく、「自分が信頼している CA が保証しているから信じる」という形に置き換わります。
信頼の連鎖:証明書チェーン
では「その CA は誰が保証するのか」という疑問が湧きます。答えが証明書チェーン(信頼の連鎖)です。証明書は何段にも連なって、最終的に信頼の起点にたどり着きます。
| 階層 | 役割 |
|---|---|
| ルート CA | 信頼の頂点。自己署名。OS / ブラウザに最初から組み込まれている |
| 中間 CA | ルートに署名してもらい、実際の発行を担う緩衝材 |
| サーバ証明書 | 中間 CA が発行する、各サイトの証明書 |
検証は下から上へ橋渡しされます。サーバ証明書は中間 CA が署名し、その中間 CA の証明書はルート CA が署名し、ルート CA の証明書は OS やブラウザにあらかじめ組み込まれている(信頼済みとして同梱されている)。この鎖が一本につながって初めて「信頼できる」と判定されます。
[サーバ証明書] ← 署名 ─ [中間 CA] ← 署名 ─ [ルート CA](端末に同梱済み)
最終的な信頼の根っこは、**端末にあらかじめ入っているルート証明書の集合(トラストストア)**です。ここに含まれない CA が発行した証明書は「信頼できない」と警告されます。
ルート CA の秘密鍵は PKI 全体の信頼の根であり、漏れれば壊滅的です。そこで普段の発行は中間 CAに任せ、ルートの秘密鍵は厳重にオフライン保管します。中間 CA が侵害されても、その中間証明書だけを失効させれば被害を切り離せます。サーバ側は、サーバ証明書だけでなく中間証明書も一緒に送る必要があります。これを忘れると、チェーンがつながらず「証明書が信頼できない」エラーになる典型的な設定ミスが起きます。
失効:途中で信頼を取り消す
証明書には有効期間がありますが、期間内でも無効にしたい場面があります。サーバの秘密鍵が漏れた、CA が誤発行した、といったケースです。漏れた秘密鍵に対応する証明書をそのまま放置すれば、攻撃者がなりすませてしまいます。これを取り消すのが**失効(Revocation)**です。
| 方式 | 仕組み | 特徴 |
|---|---|---|
| CRL | 失効した証明書の一覧を CA が配布 | 一覧が肥大化し、反映に時間差が出る |
| OCSP | 証明書ごとに「まだ有効か」を CA に問い合わせ | リアルタイム性が高いが、毎回の問い合わせが負担 |
| OCSP ステープリング | サーバが OCSP の応答を取得し提示 | クライアントの問い合わせを省き、効率と privacy を両立 |
失効確認は地味ですが重要です。失効した証明書を有効と誤認すれば、漏洩した鍵を使った攻撃を見抜けません。近年は、証明書の有効期間そのものを短くすることで失効への依存を減らす流れもあります。期間が短ければ、漏れても影響する時間が限られるからです。
かつて証明書は手作業で年単位の更新をしていましたが、現在は Let's Encrypt などの登場で、短い有効期間の証明書を自動で発行・更新するのが一般的です。ACME という protocol を使い、ドメインの所有確認から発行・更新までを自動化します。短命+自動更新により、「うっかり失効を見落とす」「期限切れでサイトが落ちる」といった事故を減らせます。
まとめ
PKI は、「この公開鍵は確かにこの相手のもの」を信頼できる第三者(CA)が証明書で保証する仕組みです。信頼はルート CA を頂点とする証明書チェーンで橋渡しされ、端末に組み込まれたルート証明書が最終的な起点になります。鍵漏洩などに備え、有効期間内でも取り消せる**失効(CRL / OCSP)**の仕組みが安全性を支えます。
この基盤の最大の応用が TLS / HTTPS です。ブラウザがサイトの証明書を検証して安全な通信を確立する一連の流れは、まさに PKI の上に成り立っています。土台となる鍵と署名の考え方は 暗号の基礎、なりすまし防止の文脈は 認証と認可 と合わせて押さえると理解が深まります。
セキュリティ Article
公開鍵基盤(PKI)と証明書を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
PKI
比較で見る軸
難易度: intermediate / カテゴリ: セキュリティ / タグ数: 3
導入後に効く点
信頼はルート CA を頂点に証明書チェーンで橋渡しされます。ブラウザや OS が持つルート証明書が、最終的な信頼の起点になります。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- intermediate
- カテゴリ
- セキュリティ
- タグ数
- 3
判断チェックリスト
- 自社の用途が「PKI / 証明書」に近いか確認する。
- 強みである「PKI は「この公開鍵は確かにこの相手のもの」を信頼できる第三者(認証局=CA)が証明書で保証する仕組みで、TLS/HTTPS の土台です。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。