web-dev-qa-db-ja.com

SSLサーバーはどのようにしてその身元を証明しますか?

このドキュメント は、チャレンジレスポンス認証によってサーバーのIDが証明されることを示しています。しかし、クライアントがドメイン名を検証しない場合でも、中間者攻撃は可能ですか?これを理解してください。

11
user1157

SSLハンドシェイクは、証明書の使用を意味します。サーバーには、クライアントが検証する証明書があります(既知のトラストアンカー(別名「ルートCA」)に関して)。証明書には、SSLで使用される公開鍵と暗号化アルゴリズムが含まれており、接続は次のように安全です。

  1. クライアントは、送受信するデータはすべて、(証明書内で)受信した公開鍵に関連付けられた秘密鍵を所有するサーバーだけが使用できることを知っています。

  2. 証明書は、その秘密鍵が証明書に名前が書かれているエンティティによって所有(制御)されていることをクライアントに証明します。 SSLの場合、名前は「www.example.com」などのDNS名です。

証明書の名前が、クライアントが最初に接続しようとしたサーバーの名前であることを確認するのは、クライアント次第です。

類推:あなたは彼の名前がボブであるとあなたに言う誰かに会います。あなたは彼にあなたにIDカードを見せてくれるよう頼みます。 IDカードが本物のIDカードであることを確認するだけでは不十分です。あなたまたは IDカードの名前が「Bob」であることを確認する必要があります。それ以外の場合、チャーリーは「私はボブです」と言って、「チャーリー」という名前の彼のIDカードを見せることができます。

20
Thomas Pornin

トーマスの答えはそれに関しては素晴らしいです。システムにはまだ穴が開いているので、注意してください。

最大の穴は、デフォルトでおそらく「信頼された」ルート証明書が多数あり、どれでもそこにあるDNS名を認証できることです。実際にそれらすべてを信頼しない理由があると思います。

たとえば、2009年に、Etisalat(アラブ首長国連邦政府が60%所有)は、RIMデバイスにスパイウェアを挿入する無害に見えるBlackBerryパッチを展開し、電子メールの監視を可能にしたため、信頼できるとは言えません。しかし、それは多くの信頼できるCAリストにあります: http://arstechnica.com/business/news/2009/07/mobile-carrier-rolls-out-spyware-as-a-3g-update.ars

多くのCAがドメイン名を所有していることを検証するために使用するメカニズムは、さまざまな攻撃に対して脆弱であるため、ユーザーは本来持っていないはずの資格情報を取得できます。

また、stuxnet開発者によって2回行われたように、人々は証明書を盗むことができます。

公開/秘密鍵パズルのポリシー関連の部分は、暗号自体よりもはるかに困難です。

更新:Freedom to Tinkerの危険なCAインフラストラクチャの修正に関する素晴らしい投稿もご覧ください: Building a better CA Infrastructure

7
nealmcb

サーバーは、ブラウザーが信頼するルート(または中間)認証局によって署名されることにより、その身元を証明します。

ルートCA(Verisignなど)は、サイトの証明書要求にデジタル署名します。デジタル署名は、元のWebサイトの身元を証明するベリサインの方法です。 Verisignには、私のような誰かがebayの証明書を生成できないようにする方法があります。通常、本人による登録か、身元証明の組み合わせを使用します。

ルートCAのリストは更新され、時間が経過すると取り消されます。Windowsの更新でこれに気付く場合があります。

そうは言っても、誰かがマシンに物理的にアクセスできる場合、彼らはいつでも偽のルート証明書をインストールすることができます...これにより、警告なしで中間者が再び可能になります。

1
oreoshake