Mozilla Flux

Mozilla関係の情報に特化したブログです。

なぜFirefoxは自己署名証明書をブロックするのか

FirefoxがWebサイトと暗号通信を行う場合、相手方サイトが保有するSSL証明書(電子的な証明書の一種)は、第三者機関が認証した署名によるものでなければならない。そのサイト独自の署名がつけられているにすぎないとき、Firefoxは警告を発して通信をストップさせる。ユーザーはそのような自己署名証明書を受け入れるかどうか選択することができ、受け入れた場合のみ通信が再開される。

なぜ、こうした仕組みになっているのだろう。日本では「オレオレ証明書」の通称もある自己署名証明書。これを最初から受け入れる設定になっていない理由は何なのか。

Mozilla Foundation所属のセキュリティ研究者であるGervase Markham氏が"Firefox 3 and Self-Signed Certs"の中で強調するのは、「セキュリティ = 暗号化 × 認証」という点だ。これは、通信の過程でいかに強力な暗号を使おうとも、通信の相手方について正しい認証が行われなければ、セキュリティが働かないことを意味する。つまり、認証がゼロであれば、セキュリティは常にゼロになるのだ。

Markham氏によれば、自己署名証明書を認めることには、次の三つの問題がある。

  1. Webサイト運営者が誰なのか確認がとれない
  2. DNSが汚染されていてユーザーが知らない間に危険なWebサイトに飛ばされていても、それに気づく手段がない
  3. 以前接続した相手と再度接続していることの確認が取れない

あるWebサイトにアクセスしたところが、本物のサイトではなく、悪人による「なりすまし」だったとしても、自己署名証明書を一般的に受け入れる設定になっているならば、ユーザーがそのなりすましを見抜くことはまず不可能だ。あとは、ユーザーにIDやパスワードなどを入力させるべくサイトを設計すれば、個人情報を盗み放題になる。第三者が通信内容を盗聴するのではないから、通信に何ビットの暗号を使っているかは関係がない。

あるいは、「中間攻撃」といって、悪意ある者が仕組んだサーバーが、いつのまにか本物のサーバーとの通信に介在して、盗聴や改竄を行っていることもありうる。このとき、ユーザーが直接通信している相手は、悪意あるサーバーになるので、やはり通信の暗号化は役に立たないのだが、通信相手が誰なのかを正しく判別できないため、対処できない。

本来、証明書の仕組みは、こうした問題を防ぐために作られた。認証機関(CA: Certificate Authority)と呼ばれる第三者がSSL証明書の正当性を証明することで、ユーザーはその証明書を信頼することができる。要するに、なりすましや中間攻撃が行われていないと確認できる。具体的には、VeriSignなどの信頼できる認証機関が発行した自己署名証明書を、ルート証明書としてWebブラウザがあらかじめ保持しておく。あるWebサイトにアクセスしたとき、そのSSL証明書の発行機関をチェックし、その発行機関の証明書をさらにチェックする。こうした手順で遡っていった結果、ルート証明書にたどり着いたなら、そのWebサイトの証明書は正当性が証明されたことになる。

では、ルート証明書という名の自己署名証明書の正しさは誰が判定するのか。たとえば、Internet Explorerであれば、「WebTrust for CA」という基準に則った審査をパスした会社だけが、その発行する証明書をルート証明書として搭載してもらえるようになっている。Firefoxでも同様で、Mozillaが信頼できると認めた認証機関の証明書だけをルート証明書として扱っている。

ここでちょっとした思考実験をしてみよう。「信頼できる第三者機関による認証」が鍵になるというのなら、自己署名証明書のホワイトリストを作れないだろうか。いわば「認証済みオレオレ証明書リスト」だ。ユーザーの手では操作不能なホワイトリストが自動的に配信され、Firefoxはそれに従って、認証された自己署名証明書であれば警告を出すことなく、通常のWebサイトと同じように表示する。

お察しのとおり、これは、偽装サイト対策として採用されているアイデアを自己署名証明書にも応用したものだ。たとえば、銀行の偽装Webサイトがあったとして、仮にDNSが汚染されていた結果ユーザーがそこに誘導されたとしても、そのサイトが保有するSSL証明書はホワイトリストに載っていないので、ちゃんと警告が出る。ユーザーは安全が確保されたままうっとうしい警告を目にしなくて済むし、Webサイト側も手間と費用をかけて認証機関の認証を受けなくて済む。

しかし、この案は、これまで築き上げられてきた認証システムに大きな抜け道を認めるものなので、認証システムを崩壊させる危険を孕んでいる。また、いったい誰がコストをかけてホワイトリストを作成し、無料で配布するのか? Google? メリットがない。ホワイトリストを配ることで、Webがより安全になるわけではないのだから。セキュリティ会社ならどうか。一社では無理だ。他社から「あそこは自分でセキュリティに穴を空けている」と非難されるのがオチだろう。この件で多数のセキュリティ会社が連携することも、メリットが乏しすぎて考えにくい。

結局、ホワイトリスト案は、理論的にも実際の運営面でも問題が大きいことがわかる。また、セキュリティに関するトレンドは、EV SSL証明書の普及に向かっている。EV SSL証明書の発行に必要な審査はこれまでよりもはるかに厳格だ。その代わり、EV SSL証明書を保有しているWebサイトは、なりすましや中間攻撃のおそれがないことを示せるだけでなく、サイト所有者が信頼できる存在であることについても、認証機関が一定のお墨付きを与えたと主張できる。ホワイトリスト案は認証機関を軽視するものだから、認証機関の関与を強めるこのトレンドに、明らかに反している。

Firefox 3がEV SSL証明書をサポートしたことからも明らかなように、Firefoxは上記トレンドに乗って開発を進めている。したがって、自己署名証明書は今後もFirefoxからブロックされ続けるだろう。

最後に、ユーザーが自己署名証明書を受け入れた場合の扱いについて、簡単に触れておく。デフォルトの設定では、この証明書について、ユーザーが再度問い合わせを受けることはない。言い換えれば、恒久的な例外とされ、一時的な例外とはされていない。一時的な例外にとどめておいたほうが、安全性が高まるようにも思えるが、Firefoxのスタンスは違う。

Firefoxのセキュリティ責任者であるJohnathan Nightingale氏は、この点について、次のように説明している。自己署名証明書の受け入れを一時的な例外にとどめるとすると、ユーザーはエラーページをより頻繁に目にすることになるが、次第にそのメッセージを無視するようになるだろう。それでは、肝心な場面でユーザーが守られないおそれがある。むしろエラーページは滅多に目にしないものとしておくことで、ユーザーに強く注意を促すことができるというのだ。