証明書は「サーバーの公開鍵が本物である」と言い切るための仕組みだが、その“言い切り”をサーバー自身がしてしまうと、自作自演になってしまう。そこで登場するのが 認証局(CA) であり、CAは第三者として「この公開鍵はこの名前(ドメイン)のもの」と保証する役割を持つ。
このページでは、CAの基本に加えて、実務でつまずきやすい 中間証明書(Intermediate) の意味と役割を丁寧に整理する。
CA(Certificate Authority / 認証局)とは、証明書を発行し、証明書に含まれる情報(対象名など)と公開鍵が正しいことを第三者として保証する組織(または仕組み)である。
公開鍵を配られただけでは、それが本物のサーバーの鍵なのか、攻撃者が用意した鍵なのかが分からない。もし「自分で自分に証明書を発行」できる世界だと、攻撃者も同じことができてしまう。
CAは「第三者の署名」を使って、公開鍵と名前(ドメイン名)の結び付きを保証する。これによりブラウザは「本物のサーバーに暗号化しようとしている」と判断できる。
CAは大きく2種類に分けると理解しやすい。
ここが一番大事。証明書は「3つの立場」に分かれる。
「ルートCAが直接サーバ証明書を発行すればいいのでは?」となりやすいが、現実には中間CAを挟むのが一般的。理由は次の通り。
ルートCAの秘密鍵が漏れたり、ルートCAが壊れたりすると、信頼の根っこが崩れる。だからルートCAはできるだけ使わず、厳重に保管する(オフライン運用など)。
証明書の発行や失効は日常業務なので、オンラインで動く中間CAが担当する方が現実的。
中間CAに問題が起きた場合でも、ルートCAまで巻き込まずに差し替えがしやすい。
HTTPS接続のとき、サーバーが「サーバー証明書だけ」を返してしまうと、ブラウザが中間証明書を見つけられず、検証に失敗することがある。これが「中間証明書が足りない」典型事故。
SSLCertificateFileSSLCertificateKeyFileSSLCertificateChainFile(環境によっては SSLCertificateFile に連結する運用もある)※ ここは「設定手順」ではなく「意味の説明」なので、具体パスや設定例は別ページにまとめると管理しやすい。
ブラウザは証明書を受け取った後、次の観点で検証する。
証明書は期限が切れなくても「失効」することがある。たとえば秘密鍵が漏れた可能性が出た場合、証明書は取り消される必要がある。CAは失効情報の提供も役割に含む。
公開認証局が発行する証明書は、証明書タイプによって「何を確認したか」が異なる。一般的には次の分類で語られる。
次は「信頼チェーン(中間証明書をなぜサーバに置くのか)」をさらに掘るか、実装ページでApacheの証明書設定(チェーンの置き方)に繋げると理解が固まる。