証明書とは何で、なぜ必要なのか? 証明書と認証局(CA)の信頼構造
アドレスバー左の鍵マークを押すと、「この接続は安全です」や「証明書は有効です」といった言葉が見えます。ところで、この証明書というものは誰が作ってくれるもので、何を根拠に「安全だ」と言うのでしょうか。そして、サイトを自分で作った人が自分のサイトに向かって「私は安全だ」と書けば済みそうなものなのに、なぜそれは信用してもらえないのでしょうか。
今回の記事では、SSL 証明書とは何でなぜ必要なのか、そしてその証明書を誰が保証するのかを、コードなしで整理します。通信を暗号で閉じる原理そのものが気になる方は、アドレスバーの鍵マークは何を守っているのかを先に読むと役立ちます。
証明書は、「このサイトが本物」だと証明する身分証です #
HTTPS は二つの仕事をします。一つはやり取りする内容を暗号で閉じること、もう一つは今つないだ相手が本当にそのサイトかを確認することです。このうち二つ目、つまり身元を証明する紙が証明書です。
人にたとえると身分証に似ています。身分証に意味があるのは、自分で作った紙ではなく、信頼できる機関が発行してくれたからです。証明書も同じです。サイトが自分で「私は schoolofweb.net だ」と主張するだけでは足りず、信頼できる発行機関がその主張を保証してこそ、ブラウザは受け入れます。
暗号化だけではなぜ足りないのか #
ここでよく生じる誤解があります。「通信さえ暗号で閉じれば安全ではないか」という考えです。しかし暗号化は「誰にものぞかせない」ようにするだけで、「今やり取りしている相手が本物か」は保証しません。
偽サイトが本物そっくりの画面を出し、通信を暗号で閉じたとしましょう。内容はたしかに暗号で守られますが、その暗号の反対側に座っているのは攻撃者です。暗号化だけだと「安全に偽物へパスワードを渡す」ことが起こりえます。だから暗号化とあわせて、相手が本物だと保証する証明書が必ず必要なのです。
誰が保証するのか:認証局(CA) #
この保証をしてくれる機関を認証局、英語で CA(Certificate Authority)と呼びます。CA は、証明書を申請した人が本当にそのドメインの持ち主かを確認したうえで、「このドメインはこの主体で間違いない」と署名した証明書を発行します。
では、なぜ私たちは初めて見る CA を信じてよいのでしょうか。その秘密はブラウザと OS にあります。ブラウザと OS の中には、信頼できると事前に検証された CA の一覧が入っています。この一覧にある CA が署名した証明書なら、ブラウザは別の確認なしに受け入れます。私たちが毎回 CA を一つずつ検証しなくてよい理由はここにあります。
信頼は連鎖でつながります #
証明書はふつう一枚ではなく、鎖のようにつながった複数枚で動きます。いちばん上にもっとも重要なルート証明書があり、その下に中間証明書があり、いちばん下に私たちのサイトの証明書があります。
- ルート証明書: ブラウザと OS にあらかじめ埋め込まれた、信頼の出発点です。重要すぎるので、ふだんは深く保管して直接は使いません。
- 中間証明書: ルートが「この中間機関を信じてよい」と署名した証明書です。実際の発行はこの中間段階で行われます。
- サイト証明書: 中間証明書が「このドメインは本物だ」と署名した、私たちのサイトが実際に使う証明書です。
ブラウザはサイト証明書から出発して中間証明書を経てルート証明書までさかのぼり、連鎖が切れずに、あらかじめ信じているルートに届くかを確認します。この連鎖が一か所でも切れると、ブラウザは証明書を信用できません。だから実務で「中間証明書が抜けている」という問題がしばしば事故につながります。
証明書にも有効期限があります #
身分証に更新期限があるように、証明書にも有効期限があります。最近発行される証明書は有効期限が短めで、期間が終わる前に新しい証明書へ更新しなければなりません。
更新を逃して証明書が期限切れになると、ブラウザは身元をもう保証できないと判断し、「安全ではありません」という警告を大きく出します。サイト自体は生きていても、訪問者は赤い警告画面の前で引き返します。だから最近は、証明書を人が世話するのではなく自動で更新しておく方式が標準になりました。ただし、その自動更新が食い違うと同じ問題がそのまま起きます。
知っておくと何が楽になるか #
- 警告画面を落ち着いて読めます。 「安全ではありません」が出たとき、むやみに無視したり怖がったりせず、証明書の期限切れか名前の不一致か、原因を推し量れます。
- 更新を事故の前に押さえられます。 証明書に有効期限があると知っていれば、自動更新がちゃんと回っているかを前もって確認できます。
- 担当者と会話できます。 「中間証明書が抜けている」「ワイルドカード証明書が必要だ」といった話を理解できます。
まとめ #
今日は、証明書とは何でなぜ必要なのか、そして誰がそれを保証するのかを見てきました。証明書はサイトの身分証であり、認証局(CA)がその身元を保証し、その信頼はルートから中間を経てサイト証明書へつながる連鎖で動きます。暗号化が「のぞかせない」仕事だとすれば、証明書は「相手が本物だと保証する」仕事です。
ここまでが概念だとすれば、実際に証明書を発行してサーバーやクラウドに設置し、自動で更新する方法は、HTTPS 証明書の実践で手を動かしながら扱います。証明書はドメインという名前が先にあってこそ意味を持つので、ドメインとは何で、なぜ必要なのかをまだ読んでいなければ、合わせてご覧になることをおすすめします。