SSL証明書チェーンとは?仕組みを解説

SSL証明書チェーンとは?
SSL証明書チェーン(信頼の連鎖、認証パスとも呼ばれる)は、ウェブサイトのSSL/TLS証明書を信頼されたルート認証局(CA)に接続するデジタル証明書の順序付きリストです。チェーン内の各証明書はその上位の証明書によってデジタル署名されており、サーバーからブラウザがすでに信頼しているルートCAまでの検証可能な信頼パスを作成します。
これは推薦の連鎖のようなものです。サーバー証明書は「私はexample.comです」と言います。中間CAは「example.comの証明書を保証します」と言います。ルートCAは「その中間CAを保証します」と言います。ブラウザはすでにルートCAを信頼しているため、署名のチェーンをたどることで、サーバーも信頼します。
HTTPS ウェブサイトにアクセスすると、ブラウザはこのチェーンをミリ秒単位で静かにたどります。すべてのリンクが正しければ、鍵アイコンが表示されます。リンクが欠落、期限切れ、または無効な場合は、セキュリティ警告が表示されます。
証明書チェーンの3つのリンク
ほとんどのSSL証明書チェーンには正確に3つのレベルがあります。それぞれを理解することは、HTTPSの問題をトラブルシューティングする上で不可欠です。
| ルート証明書 | 中間証明書 | サーバー証明書(Leaf) | |
|---|---|---|---|
| 署名者 | 自身(自己署名) | ルートCA | 中間CA |
| 保管場所 | ブラウザ/OSのトラストストア | サーバーが送信 | サーバーが送信 |
| 一般的な有効期間 | 20〜25年 | 5〜10年 | 90日〜1年 |
| 侵害された場合 | 全証明書無効 — 壊滅的 | 中間証明書のみ失効 | 失効して再発行 |
| おおよその数 | 世界で約150の信頼されたルート | 数千 | 数億 |
ルート証明書
ルート証明書はチェーンの最上位にある信頼のアンカーです。自己署名されており、認証局が自身の証明書に署名したことを意味します。ルート証明書はブラウザとオペレーティングシステムにプリインストールされており、このコレクションはトラストストアと呼ばれます。
主要なブラウザがデフォルトで信頼するルートCAは約150あります。DigiCert、Let's Encrypt(ISRG)、Sectigo、GlobalSignなどの組織がルート証明書を運用しています。ルート鍵は非常に重要であるため、CAはそれらをエアギャップされた物理的に安全な金庫内のハードウェアセキュリティモジュール(HSM)に保管しています。
中間証明書
中間証明書は、ルート証明書とサーバー証明書の間に位置します。ルートCAが中間証明書に署名し、中間CAがエンドエンティティ(サーバー)証明書に署名します。ほとんどのCAは1つまたは2つの中間証明書を使用します。
ウェブサーバーはTLSハンドシェイク中にサーバー証明書とともに中間証明書を送信する必要があります。ルート証明書とは異なり、中間証明書はブラウザにプリインストールされていません。サーバーがそれらを送信しないと、チェーンが壊れます。
サーバー証明書(Leaf証明書)
サーバー証明書(エンドエンティティ証明書またはLeaf証明書とも呼ばれる)は、ウェブサーバーにインストールされている証明書です。ドメイン名、公開鍵、有効期間、発行者情報(署名した中間CA)が含まれています。
これはTLSハンドシェイク中にブラウザが最初に受け取る証明書です。ブラウザはその後、チェーンを上にたどり、信頼されたルートに到達するまで各署名を検証します。
信頼の連鎖の仕組み
ブラウザがHTTPS経由でウェブサイトに接続すると、TLSハンドシェイクがミリ秒で行われるチェーン検証プロセスを開始します:
サーバーが証明書を送信 — ウェブサーバーがサーバー証明書とすべての中間証明書をブラウザに送信します。
ブラウザがチェーンを構築 — ブラウザは証明書をサーバー → 中間 → ルートの順に並べます。トラストストアを確認してルートを特定します。
署名の検証 — サーバー証明書から開始して、各証明書のデジタル署名がチェーン内の次の証明書の秘密鍵で作成されたことを確認します。
ルートの照合 — ブラウザはチェーンの最上位にあるルート証明書が組み込みのトラストストアに存在することを確認します。ルートが認識されない場合、検証は失敗します。
有効性の確認 — チェーン内のすべての証明書について、期限切れでないこと、失効していないこと(CRLまたはOCSP経由)、サーバー証明書のドメインがURLと一致することを確認します。
検証後に何が起こるか
すべてのチェックに合格すると、ブラウザは暗号化された接続を確立し、鍵アイコンを表示します。1つでもチェックに失敗すると(中間証明書であっても)、ブラウザは「この接続ではプライバシーが保護されません」や「NET::ERR_CERT_AUTHORITY_INVALID」などの警告を表示します。
これが、サーバー証明書だけでなくチェーン全体が重要な理由です。期限切れの中間証明書は、期限切れのサーバー証明書と同様にHTTPSを完全に壊します。
中間証明書が存在する理由
ルートCAは理論的にはすべてのサーバー証明書を直接署名し、中間証明書を完全にスキップできます。しかし、そうしない3つの重要な理由があります:
セキュリティの分離 — ルートCAの秘密鍵は物理的に安全な金庫内のHSMでオフラインに保管されます。数百万の個別サーバー証明書ではなく、中間証明書の署名にのみ使用されます。これにより、ルート鍵が侵害されるリスクが大幅に低減されます。
被害の封じ込め — 中間CAが侵害された場合、その中間CAの証明書のみが影響を受けます。ルートCAは侵害された中間を失効させ、新しいものを発行できます。これまでに発行したすべての証明書を無効にすることなく対応できます。
運用の柔軟性 — CAは異なる目的に異なる中間証明書を使用します:DV証明書用、EV用、異なる地域や鍵アルゴリズム(RSA vs ECDSA)用に別々のものを使います。
SSL証明書チェーンの確認方法
ウェブサイトの証明書チェーンを検査する方法は3つあります。コマンドラインツールからブラウザベースのチェックまで。
方法1:OpenSSL(コマンドライン)
opensslコマンドは、証明書チェーンを検査する最も詳細な方法です。ターミナルで次のコマンドを実行してください:
openssl s_client -connect example.com:443 -showcerts 2>/dev/null | grep -E 's:|i:'方法2:ブラウザの証明書ビューア
すべての主要なブラウザで、特別なツールなしで証明書チェーンを検査できます:
ブラウザのアドレスバーにある鍵アイコンをクリック
「この接続は保護されています」 → 「証明書は有効です」を選択
「証明のパス」タブ(Chrome/Edge)または「詳細」タブ(Firefox)を開く
ルート(上部)からサーバー証明書(下部)までの完全なチェーンが表示されます
方法3:DNS Robot SSLチェッカー
ウェブサイトの証明書チェーンを確認する最も速い方法は、オンラインツールを使用することです。当社のSSLチェッカーは、完全なチェーン、発行者の詳細、有効期限、検証ステータスをワンクリックで表示します。任意のドメインを入力して、完全なチェーンを即座に確認できます。
よくある証明書チェーンエラーと修正方法
証明書チェーンの問題は、HTTPSエラーの最も頻繁な原因の1つです。遭遇する可能性が最も高いエラーとその解決方法を紹介します。
中間証明書の欠落
エラーメッセージ: 「unable to verify the first certificate」または「incomplete certificate chain」
原因: サーバーが中間証明書なしでサーバー証明書のみを送信しています。デスクトップブラウザは以前の訪問からキャッシュされた中間証明書で回避することがありますが、モバイルブラウザやAPIクライアントはほぼ常に失敗します。
修正方法: CAのドキュメントから中間証明書をダウンロードし、サーバーの証明書ファイルに追加します。Nginxでは、1つのファイルに連結します:
cat your-domain.crt intermediate.crt > fullchain.crtチェーン内の自己署名証明書
エラーメッセージ: 「self-signed certificate in certificate chain」
原因: サーバーが送信するチェーンにルート証明書が不必要に含まれているか、証明書が本当に自己署名であり信頼されたCAからのものではありません。
修正方法: サーバーのチェーンファイルからルート証明書を削除します。サーバーはサーバー証明書と中間証明書のみを送信する必要があります。ブラウザはすでにトラストストアにルートを持っています。送信は不要であり、このエラーの原因となる可能性があります。
証明書の順序が間違っている
エラーメッセージ: チェーンの検証がサイレントに失敗するか、「証明書が信頼されていない」という警告が表示されます。
原因: チェーンファイル内の証明書の順序が間違っています。
修正方法: 正しい順序は常に:サーバー証明書が最初、次にサーバー証明書に最も近いものからルートに最も近いものの順で中間証明書を配置します。ルート証明書は含めないでください。
チェーン内の期限切れ証明書
エラーメッセージ: 「certificate has expired」 — しかし、サーバー証明書の有効期限は問題ないように見えます。
原因: チェーン内の中間証明書が期限切れになっています。これはあまり一般的ではありませんが、CAが中間証明書をローテーションする際に発生する可能性があります。
修正方法: CAから最新の中間証明書をダウンロードし、古いものを置き換えます。その後、当社のSSLチェッカーを使用して、更新されたチェーンを確認してください。
証明書チェーンのベストプラクティス
常に中間証明書をインストール — ブラウザが自動的に解決してくれるとは思わないでください。サーバーが完全なチェーン(サーバー証明書+中間証明書)を送信するよう常に設定してください。
ルートは送信しない — ブラウザにはすでにルート証明書があります。ルートを含めると帯域幅を無駄にし、一部のクライアントでエラーを引き起こす可能性があります。
正しい順序を維持 — サーバー証明書が最初、次に中間証明書、ルートなし。一部のサーバーは順序に厳格です。他のサーバーは許容しますが、検証が遅くなる場合があります。
有効期限を監視 — 中間証明書も期限切れになります。アラートを設定するか、自動証明書管理(Let's EncryptのcertbotなAど)を使用してください。
変更後に確認 — 証明書の更新やホスティングの変更後は、当社のSSLチェッカーなどのツールで常にチェーンを確認してください。更新前に機能していたものが、CAが中間証明書を変更した場合、更新後に機能しないことがあります。
OCSPステープリングを使用 — サーバーでOCSPステープリングを有効にして、ブラウザがCAに直接問い合わせることなく、証明書の失効ステータスをより速く確認できるようにします。
Frequently Asked Questions
SSL証明書チェーンは、ウェブサイトのSSL証明書を信頼されたルート認証局(CA)に結びつけるデジタル証明書の順序付きリストです。通常3つのレベルがあります:サーバー証明書(leaf)、1つ以上の中間証明書、ブラウザがすでに信頼しているルート証明書です。