拡張保護ポリシー

この記事では ExtendedProtection サンプルについて説明します。

拡張保護は、man-in-the-middle (MITM) 攻撃に対するセキュリティ イニシアチブです。 MITM 攻撃はセキュリティの脅威です。MITM は、クライアントの資格情報を取得し、その資格情報をサーバーに転送します。

ディスカッション

アプリケーションが HTTPS で Kerberos、Digest または NTLM を使用して認証を実行する場合、最初にトランスポート レベルのセキュリティ (TLS) チャネルが構築され、その後セキュリティ チャネルを使用して認証が行われます。 しかし、SSL によって生成されるセッション キーと認証時に生成されるセッション キーはバインドされていません。 サーバーはセキュリティ チャネルがクライアントまたは MITM のどちらで確立されたものであるか知ることができないため、トランスポート チャネルそのものはセキュリティで保護されていても、MITM がクライアントとサーバーの間に自身を構築し、クライアントからの要求の転送を開始する可能性があります。 このシナリオの解決策として、外部の TLS チャネルを内部の認証チャネルにバインドする方法があります。この方法により、サーバーは、MITM が存在するかどうかを検出できます。

Note

このサンプルは、IIS でホストされた場合にのみ機能します。

Note

次の手順は、Windows 7 でのみ実行できます。

サンプルをセットアップ、ビルド、および実行するには

  1. [コントロール パネル][プログラムの追加と削除][Windows の機能] から、インターネット インフォメーション サービスをインストールします。

  2. [Windows の機能][インターネット インフォメーション サービス][World Wide Web サービス][セキュリティ][Windows 認証] で、Windows 認証をインストールします。

  3. [Windows の機能][Microsoft .NET Framework 3.5.1][Windows Communication Foundation HTTP Activation] で、Windows Communication Foundation HTTP Activation をインストールします。

  4. このサンプルを実行するには、サーバーとの安全なチャネルを確立する必要のあるクライアントが必要なので、インターネット インフォメーション サービス (IIS) マネージャーからインストールすることのできるサーバー証明書が存在する必要があります。

    1. IIS マネージャーを開きます。 [サーバー証明書] を開きます。これは、ルート ノード (コンピューター名) を選択すると、 [機能表示] タブに表示されます。

    2. このサンプルをテストする目的で、自己署名証明書を作成します。 ブラウザーで証明書の安全性に関するプロンプトが表示されないようにする場合は、信頼されたルート証明機関ストアに証明書をインストールします。

  5. 既定の Web サイトの [操作] ウィンドウを開きます。 [サイトの編集][バインド] の順にクリックします。 HTTPS が存在しない場合は、ポート番号を 443 に指定して HTTPS を追加します。 前の手順で作成した SSL 証明書を割り当てます。

  6. サービスをビルドします。 これにより、仮想ディレクトリが IIS に作成され、サービスを Web ホストにするために必要な .dll ファイル、.svc ファイルおよび .config ファイルがコピーされます。

  7. IIS マネージャーを開きます。 前の手順で作成した仮想ディレクトリ (ExtendedProtection) を右クリックします。 [アプリケーションへの変換] を選択します。

  8. この仮想ディレクトリの認証モジュールを IIS マネージャーで開き、Windows 認証を有効にします。

  9. この仮想ディレクトリの [Windows 認証] の下にある [詳細設定] を開き、 [必須] に設定します。

  10. ブラウザー ウィンドウから HTTPS URL にアクセスして (完全修飾ドメイン名を指定します) サービスをテストできます。 リモート コンピューターからこの URL にアクセスする場合は、すべての受信 HTTP および HTTPS 通信に対してファイアウォールが開かれていることを確認してください。

  11. クライアント構成ファイルを開き、クライアントの完全修飾ドメイン名、または <<full_machine_name>> を置き換えるエンドポイント アドレス属性を指定します。

  12. クライアントを実行します。 クライアントはサービスと通信します。これで、安全なチャネルが確立され、拡張保護が使用されます。