SSL中間証明書とは|役割と必要性
目次
この記事でわかること
- SSL の証明書チェーン(ルート・中間・サーバ証明書の連なり)の中で中間証明書が果たす役割
- なぜ認証局がサーバ証明書を直接ルートで署名せず、中間証明書を挟むのか
- サーバが中間証明書を配信しないと「特定のブラウザやスマホだけ鍵マークが出ない」状態になる仕組み
「自分の環境では鍵マークが出るのに、お客様から見えないと言われる」
SSL 証明書(サイトの暗号化と身元証明をする電子証明書)を入れたのに、特定のお客様や端末からだけ「保護されていない通信」「この接続ではプライバシーが保護されません」と表示される、というご相談はよくあります。社内の PC やいつものブラウザでは問題なく鍵マークが出ているため、原因がつかみにくいのが厄介な点です。
このすれ違いの多くは、証明書そのものの不備ではなく、中間証明書(intermediate certificate、ルートとサーバ証明書をつなぐ中継証明書)がサーバから正しく配信されていないことが原因です。本記事では証明書チェーンの構造から、なぜ一部の環境だけで失敗するのかを仕組みで解説します。鍵マークそのものの意味はSSL の鍵マークが表す仕組みを、SSL の前提知識は中小企業のための SSL 基礎をあわせてご覧ください。
SSL 証明書チェーンの 3 つの階層
ブラウザがサイトの SSL 証明書を信頼するとき、1 枚の証明書を単独で見ているわけではありません。証明書は「信頼の連鎖(チェーン)」をたどって検証されます。
チェーンは次の 3 階層で構成されます。
ルート証明書(root certificate)
信頼の起点です。主要なブラウザや OS にあらかじめ組み込まれており、これを格納している領域を「トラストストア(信頼済み証明書の保管庫)」と呼びます。ルート証明書の秘密鍵は事故時の影響が極めて大きいため、認証局はこれを通常はネットワークから切り離して厳重に保管します。
中間証明書(intermediate certificate)
ルートとサーバ証明書の間をつなぐ中継役です。ルート証明書で署名され、そのうえで日々発行されるサーバ証明書に署名します。後述のとおり、ルートを直接使わずこの中間を挟むことには明確な理由があります。
サーバ証明書(server certificate / leaf)
実際にあなたのドメインに対して発行される証明書で、チェーンの末端にあたるため「リーフ(葉)」とも呼ばれます。ブラウザがアクセス時に最初に受け取るのがこの証明書です。
なぜ中間証明書が必要なのか
「ルートで直接サーバ証明書を署名すれば中間はいらないのでは」と思うかもしれません。しかし認証局は、ルート証明書を日常の発行業務に使いません。ルートの秘密鍵はオフラインで厳重に保管され、日々のサーバ証明書の発行には中間証明書を使います。これは Let's Encrypt をはじめ主要な認証局に共通する運用です。
中間を挟む利点は主に 2 つあります。
- ルート秘密鍵を守れる: ルートを直接使わないため、万一の漏えいリスクを日常運用から切り離せます
- 被害を局所化できる: ある中間証明書に問題が起きても、その中間を失効させればよく、トラストストアに組み込まれたルートを差し替える必要がありません。ルートの差し替えは全端末への再配布が必要で、現実的には数年単位の移行になります
中間証明書には、新しいルートをまだ信頼していない古い端末に対応するための「クロス署名(cross-signing、別の広く信頼されたルートからも署名を受ける手法)」という応用もあります。これは古い端末でも検証が通る代替経路を用意する仕組みで、認証局が互換性のために維持しています。
サーバが中間証明書を配信しないと何が起きるか
ここが「自分には見えるのにお客様には見えない」の核心です。
検証の役割分担はこうなっています。ルート証明書は端末側のトラストストアに最初から入っているため、サーバは送りません。一方で、サーバ証明書と中間証明書はサーバが送る必要があります。リーフからルートまでの間(=中間証明書)を埋めるのはサーバの責任です。
ところがサーバの設定で中間証明書が抜けていると、ブラウザは「サーバ証明書」と「手元のルート」の間に空白を抱えたまま検証することになります。このとき端末の挙動は 2 つに割れます。
AIA 取得をする環境(だから自分には見える)
一部のブラウザは、サーバ証明書に書かれた発行元情報(AIA、Authority Information Access という拡張情報)をたどって、足りない中間証明書を自分で取りに行きます。デスクトップ版 Chrome や Safari などがこれにあたります。さらに一度取得した中間証明書はキャッシュ(一時保存)されるため、二度目以降は何事もなく鍵マークが出ます。社内 PC で問題なく見えてしまうのは、このためです。
AIA 取得をしない環境(だからお客様には見えない)
一方で、足りない中間証明書を取りに行かない環境も少なくありません。Firefox や Android、各種モバイル環境、curl や wget、プログラムからの API 接続、外部の監視ツールなどが該当します。これらは中間証明書が見つからないと、その場で「信頼できない証明書」として検証に失敗します。
結果として、設定した本人や社内では正常に見えるのに、特定のブラウザやスマホ、外部システムからだけ鍵マークが出ない/接続が弾かれるという、原因の見えにくい状態になります。ビジネスへの影響は小さくありません。スマホからの問い合わせや決済が途中で止まったり、外部サービスとの API 連携が突然エラーになったりと、機会損失や障害として表面化します。
中間証明書が原因かどうかを確かめるには
「自分の環境では見えてしまう」性質上、いつものブラウザでの目視確認はあてになりません。確認のポイントは次のとおりです。
- サーバがサーバ証明書と中間証明書をセットで配信しているかを、外部のチェックツールで第三者の視点から確認する
- 多くの認証局は、サーバ証明書と中間証明書を結合した「チェーンファイル」を配布しています。Let's Encrypt なら
fullchain.pemがこれにあたり、これを正しく設定すれば中間証明書の欠落を防げます
具体的なエラーの読み解き方と直し方は、姉妹記事のSSL のチェーンが不完全なときの直し方に手順をまとめています。本記事は「なぜそうなるか」の仕組み編、直し方はそちらをご参照ください。
よくある質問
自分のブラウザでは鍵マークが出るのに設定ミスなのですか
その可能性は十分にあります。デスクトップ版 Chrome や Safari は足りない中間証明書を自動で取りに行き、一度取得すると一時保存するため、設定が不完全でも正常に見えてしまいます。Firefox やスマホで確認すると違う結果になることがあります。
中間証明書はどこで入手しますか
通常はサーバ証明書を発行した認証局が配布しています。サーバ証明書と中間証明書を結合したチェーンファイル(Let's Encrypt なら fullchain.pem)を使うのが確実です。推測で別の証明書を当てはめないでください。
ルート証明書もサーバに置く必要がありますか
不要です。ルート証明書は端末のトラストストアにあらかじめ入っているため、サーバが送るのはサーバ証明書と中間証明書までで十分です。
まとめ
- SSL 証明書はルート・中間・サーバ証明書の連鎖(チェーン)で検証される
- 認証局はルート秘密鍵をオフラインで守るため、日々の発行には中間証明書を使う
- ルートは端末側に最初から入っており、サーバはサーバ証明書と中間証明書を配信する必要がある
- 中間証明書が抜けると、AIA 取得をする環境では見えても、Firefox やスマホ、API 接続などでは検証に失敗する
- 「自分には見えるのにお客様には見えない」状態の典型的な原因がこれにあたる
自社の証明書チェーンが正しく配信されているか確認しませんか
中間証明書の欠落は、設定した本人の環境では気づきにくいのが最大の落とし穴です。自社サイトがサーバ証明書と中間証明書を正しくセットで配信できているかは、ドメイン番人の無料診断で第三者の視点から確認できます。エラーの直し方や設定で迷う場合は、お問い合わせフォームから状況をお知らせください。専門家がわかりやすく整理いたします。