サーバ証明書となりすまし対策
はじめに
以前、「デジタル署名はなりすまし防止策ではない」という記事を投稿しました。
要約すると、デジタル署名は改ざん防止策であって、なりすまし防止には証明書が必要、という内容です。
SSL/TSLの場合はサーバ証明書を検証することでなりすましを防止しています。
今回は、この場合にどのようになりすまし防止対策がされているのかを説明します。
事前知識 - サーバ証明書の内容
SSL/TSLのプロトコルでは、サーバ証明書について以下を確認します。
- 有効期限
- 発行者
- サーバの情報(ドメインなど)
- デジタル署名
(一部抜粋。これ以外にもあります)
そもそもサーバ証明書には何が書いてあるのか、については以下をご参考ください。
X.509
あるWebサイトのサーバ証明書はそのページで右クリック > 検証 > Securityタブ > View certificate で見られます(Google Chromeの場合)
以下はAmazon.comの例です。
考えられるなりすまし方法
なりすまし方法として考えらえるのは主に以下でしょう。
a. 自分で自分の証明書を作成
b. 他の人に発行された証明書を盗んで利用
c. 自分で作ったちゃんとしたサイトに発行された証明書を流用
以下それぞれ対策を説明していきます。
a. 自分で自分の証明書を作成
これについてはサーバ証明書の発行元をチェックすることで防げます。
発行者が、「クライアントが信頼する証明者一覧」にある人物でない場合は警告を発します。
では「クライアントが信頼する証明者一覧」は誰が決めているのでしょうか?自分ではそんな設定した覚えはないですが、、、
それは、WebブラウザまたはOSに保持されており、これらの開発元が設定しています。
例えばwindowsの場合は「プログラム名を指定して実行」でcertmgr.mscを実行すると、マイクロソフトが設定した信頼する証明者が確認できます。
(ブラウザの保持するリストとOSの保持するリストをどう使い分けているのかはまだ分かってないので今後調べたいです)
b. 他の人に発行された証明書を盗んで利用
c. 自分で作ったちゃんとしたサイトに発行された証明書を流用
この2つについては対策は同じです。
サーバ証明書には発行対象のドメイン名が記載されています。
このドメイン名と今実際に接続しているドメインが一致しているかチェックして、異なる場合は警告を出します。
もし証明書のドメイン名を改竄していたら?
証明書にはデジタル署名がなされているので、改竄されていれば検知できます。
最後に
サーバ証明書の正式フォーマットは今回初めて見ました。
かなり細かく説明されているので時間があれば読んでみたいです。
X.509
Discussion