証明書の話で多くの人がつまずくのが「中間証明書」「チェーンが切れる」「なぜルートをサーバーが返さないのか」あたり。ここを一度整理すると、Apache設定やLet’s Encrypt/ADCSの運用が急に読みやすくなる。
このページでは、信頼チェーンの意味と、ブラウザが何を確認しているのか、そしてサーバー側の“よくあるミス”を図中心で整理する。
信頼チェーンとは、サーバー証明書から出発して、最終的に信頼できるルート証明書(信頼の根っこ)まで辿れる状態を指す。
ブラウザは「サーバー証明書だけ」を信じているわけではなく、署名のつながりを辿って「信頼できる根っこまで到達できるか」を見ている。
信頼チェーンを理解するコツは、役割を3つに分けること。
「ルートCAが直接サーバー証明書に署名すればいい」と思いやすいが、現実には中間CAを挟むのが一般的。理由は大きく3つ。
ルートの秘密鍵は信頼の根っこ。ここが漏れたら世界が終わる。だからルートはできるだけ使わず、厳重に守る(オフライン運用など)。
証明書の発行や失効は日常業務。オンラインで動く中間CAが担当した方が運用しやすい。
中間CAに問題が起きても、ルートまで巻き込まずに差し替えがしやすい。
ブラウザは証明書を受け取ったら、だいたい次をチェックする。
ここが実務で一番多い事故ポイント。
理由は、ルートは信頼ストアにあるべきもので、サーバーが送ってきたルートは“信頼の根っこ”にならないから。
ここは「いま何が返ってきているか」を事実として掴むための最低セット。
openssl s_client -connect example.com:443 -servername example.com -showcerts
openssl x509 -noout -subject -issuer -dates -in server.crt
openssl verify -untrusted intermediate.crt -CAfile root.crt server.crt
※ 実務では「root.crt はOSの信頼ストアにある前提」も多いので、検証方法は環境に合わせて調整する。