公開鍵・秘密鍵・証明書の関係をやさしく図解(PKI入門)

SSL証明書や .pem を触っていると、「秘密鍵」「公開鍵」「証明書」「認証局(CA)」「中間証明書」と言葉が次々出てきて、結局それぞれどういう関係なのか分からなくなりがちです。

この記事は、コマンドの前に知っておくとラクになる「鍵と証明書の関係」を、図を使ってかみ砕いて説明します。

1. 公開鍵暗号 — ペアになった2つの鍵

すべての出発点は、ペアになった2つの鍵です。

  • 秘密鍵(private key) … 自分だけが持つ鍵。他人には渡しません。
  • 公開鍵(public key) … 誰に配ってもいい鍵。秘密鍵から作られます。

この2つには、数学的に次の便利な性質があります。

公開鍵と秘密鍵はペア。公開鍵で暗号化し秘密鍵で復号、秘密鍵で署名し公開鍵で検証する

ポイントは、公開鍵から秘密鍵を計算で求められないことです。だから公開鍵はばらまいて構いません。 鍵の正体は大きな数(RSA)や楕円曲線上の点(EC)で、実体は 秘密鍵ファイル(.key)や pem の中 に Base64 で入っています。

「鍵が証明書になったり鍵になったり」と混乱する原因の多くは、ここを飛ばしているせいです。鍵(key)と証明書(certificate)は別物で、証明書は鍵を包む“身分証”だと思ってください(次の章)。

2. 「公開鍵だけ」だと困ること — なりすまし

公開鍵暗号で安全に通信できそうですが、1つ穴があります。 あなたが受け取った公開鍵が、本当に相手のものか分からないのです。 悪い人が「これが ◯◯銀行の公開鍵ですよ」と偽の公開鍵を渡してきたら、あなたはそれを信じて暗号化してしまい、中身を読まれてしまいます(中間者攻撃)。

受け取った公開鍵が本物か区別できない中間者攻撃の図

つまり、「この公開鍵は確かに ◯◯のものだ」と保証してくれる仕組みが要ります。 それが証明書と認証局(CA)です。

3. 証明書 — 公開鍵につけた“身分証”

証明書(certificate)は、ざっくり言うと

「この公開鍵は、確かに www.example.com のものです」という情報に、信頼できる第三者がデジタル署名をつけたもの

です。中身はおおよそ次の要素でできています。

  証明書(X.509)= 公開鍵につけた“身分証”
    ├─ Subject   (持ち主)   : www.example.com、会社名、所在地 など
    ├─ PublicKey (公開鍵)   : 持ち主の公開鍵
    ├─ Validity  (有効期間) : 2026-06-24 〜 2027-06-24 など
    ├─ Issuer    (発行者)   : 誰が保証したか(CAの名前)
    └─ Signature (CAの署名) : 上の内容が改ざんされていないことの証明

「持ち主の情報」と「発行者の署名」がセットになっているので、証明書を見れば「この公開鍵は誰のもので、誰が保証しているか」が分かります。

証明書の中身(有効期限・発行者・フィンガープリントなど)を実際に見るコマンドは opensslコマンド総まとめpem ファイルとは? にあります。

4. 認証局(CA)と「信頼の連鎖」

では、その「信頼できる第三者」とは誰でしょう。これが認証局(CA: Certificate Authority)です。 有名どころでは Let’s Encrypt、DigiCert、Sectigo など。

ただ、CAも1段ではありません。実際はこんなチェーン(連鎖)になっています。

ルートCA・中間CA・サーバ証明書がつながる証明書チェーン

ブラウザは、サーバ証明書 → 中間証明書 → ルート証明書とたどり、最後に「自分が最初から信頼しているルート」に行き着けば「信頼OK」と判断します。これを信頼の連鎖(チェーン)と呼びます。

サーバに証明書を入れたのに「証明書チェーンが不完全」と怒られるのは、たいてい中間証明書の設置漏れです。サーバ証明書だけでなく、CAがくれた中間証明書も一緒に設置(連結)する必要があります。これが pem に証明書を複数連結する理由のひとつです。

5. 証明書ができるまで(CSR の出番)

サーバ証明書は次の流れで手に入ります。ここで .csr(証明書署名要求)が登場します。

鍵ペア作成からCSR送付・CA署名・証明書発行・設置までの流れ
  • 秘密鍵は一度も外に出ません。CSR に入るのは公開鍵だけです。
  • 最近は Let’s Encrypt のように、この一連を自動化(ACME / certbot)してくれる仕組みが主流です。

CSR の中身を確認するコマンドは pem ファイルとは?コマンド総まとめ にあります。

6. ぜんぶ pem の中に入っている

ここまで来ると、最初の混乱「pem って鍵なの証明書なの?」が解けます。

  • 秘密鍵も、公開鍵も、証明書も、CSRも、正体はただのデータです。
  • それを Base64 でテキスト化して -----BEGIN ...----- で挟んだ入れ物が PEM です。
  • だから pem は中身が鍵のことも証明書のこともあり、両方と中間証明書をまとめて入れることもあります。
  server.pem(1つのファイルに全部入れる例。サーバによってはこの形)
  ┌──────────────────────────────────
  │ -----BEGIN PRIVATE KEY-----        ← あなたの秘密鍵
  │   ...(Base64)...
  │ -----END PRIVATE KEY-----
  │ -----BEGIN CERTIFICATE-----        ← サーバ証明書
  │   ...(Base64)...
  │ -----END CERTIFICATE-----
  │ -----BEGIN CERTIFICATE-----        ← 中間証明書
  │   ...(Base64)...
  │ -----END CERTIFICATE-----
  └──────────────────────────────────

ファイル形式の違い(PEM/DER/PFX など)は 証明書ファイルの形式まとめ を、 実際に中身を見る・操作するコマンドは opensslコマンド総まとめ をどうぞ。

さいごに

  • 秘密鍵は自分だけの鍵、公開鍵は配る鍵。ペアで動きます。
  • 証明書は公開鍵につけた身分証で、CAが署名して「本物」を保証します。
  • CAはチェーンになっていて、ルートまでたどれれば信頼OK。中間証明書の設置漏れに注意。
  • これらは全部、PEM という入れ物に入って配られます。

ここがわかると、openssl のコマンドが「何をしているか」を読み解きやすくなります。