構成手順 4: アプリケーション セキュリティを構成する

投稿者 Keith Newman および Robert McMurray

ASP.NET Web サイトの構築のこのフェーズでは、IIS で使用できるセキュリティ設定を構成します。 以下のセクションでは、ASP.NET アプリケーションの一般的なセキュリティ設定について説明します。

4.1. Web アプリケーションの分離

次の推奨事項を導入し、サーバーで Web サイトと Web アプリケーションを分離します。

  • Web サイトまたは Web アプリケーションごとに 1 つのアプリケーション プールを使用します。
  • サイトのフォルダーとファイルへのアクセスをアプリケーション プール ID に限定します。
  • サイトごとに異なる ASP.NET 一時フォルダーを設定し、アプリケーション プール ID のみにアクセスを許可します。
  • 各サイト ルートで ACL (アクセス制御リスト) を設定し、アプリケーション プール ID にのみアクセスを許可します。

アプリケーション プールごとに複数のアプリケーションが存在する場合、十分なアプリケーション プールを作成し、一部のアプリケーションを新しいプールに移動することを検討してください。

アプリケーション プールを作成するには

  1. IIS マネージャーを開きます。
  2. [接続] ウィンドウで [アプリケーション プール] をクリックします。
  3. [操作] ウィンドウで [アプリケーション プール] をクリックします。
  4. [名前] ボックスに、アプリケーションの一意の名前を入力します。
  5. [.NET Framework バージョン] および [マネージド パイプライン モード] を選択します。
  6. OK をクリックします。

別のアプリケーション プールにアプリケーションを移動するには

  1. IIS マネージャーを開きます。
  2. [接続] ページで、移動する Web サイトまたは Web アプリケーションを選択します。
  3. [操作] ウィンドウで、[基本設定] をクリックします。
  4. [サイトの編集] ダイアログ ボックスで、[選択] をクリックして [アプリケーション プールの選択] ダイアログ ボックスを開きます。次に、[アプリケーション プール] メニューからアプリケーション プールを選択します。
  5. [OK] をクリックして [アプリケーション プールの選択] ダイアログ ボックスを閉じ、[OK] をクリックして [サイトの編集] メニューを閉じます。

アプリケーション プール ID をフォルダーまたはファイルの ACL に追加するには

  1. エクスプローラーを開き、フォルダーまたはファイルに移動します。
  2. フォルダーまたはファイルを右クリックし、[プロパティ] をクリックします。
  3. [セキュリティ] タブを選択し、[編集] をクリックします。
  4. [追加] をクリックし、[場所] をクリックし、検索場所としてサーバーを選択します。
  5. [選択するオブジェクト名を入力してください] ボックスに「IIS APPPOOL\applicationPoolName」と入力します。「applicationPoolName」はアプリケーション プール ID です。
  6. [OK] をクリックし、[OK] をクリックし、再度 [OK] をクリックしてダイアログ ボックスを閉じます。

4.2. .NET 信頼レベル

このセクションでは、IIS マネージャーの UI またはコマンド ラインを使用して、アプリケーションの信頼レベルを設定する方法について説明します。

UI を使用して信頼レベルを設定するには

  1. IIS マネージャーを開き、管理するレベルに移動します。
  2. [機能ビュー] で、[NET 信頼レベル] をダブルクリックします。
  3. [.NET 信頼レベル] ページの [信頼レベル] ドロップダウン リストで信頼レベルを選択し、[操作] ウィンドウで [適用] をクリックします。

コマンド ラインを使用して信頼レベルを設定するには

信頼レベルを設定するには、次の構文を使用します。

appcmd set config /commit:WEBROOT /section:trust /level:Full|High|Medium|Low|Minimal

level 属性では、構成済みの CAS ポリシー ファイルに対応する 5 つの値のいずれかを使用します。 たとえば、Full という信頼レベルを設定するには、コマンド プロンプトで次のように入力し、Enter キーを押します。

appcmd set config /commit:WEBROOT /section:trust /level:Full

Note

Appcmd.exe を使用して、IIS 8 のグローバル レベルで trust 要素を構成する場合は、構成の変更が ApplicationHost.config ではなくルートの Web.config ファイルに対して行われるように、コマンドに /commit:WEBROOT を指定します。

4.3. .NET 認証

IIS での ASP.NET Web サイトの計画」では、アプリケーションに適した認証モードに関して設計上の決定を行いました。

ASP.NET フォーム認証

このセクションでは、IIS マネージャーの UI またはコマンド ラインを使用して、ASP.NET フォーム認証を構成する方法について説明します。

UI を使用してフォーム認証を構成するには

  1. IIS マネージャーを開き、管理するレベルに移動します。
  2. [機能ビュー] で、[認証] をダブルクリックします。
  3. [認証] ページで、[フォーム認証] を選択します。
  4. [操作] ウィンドウで [有効] をクリックして、既定の設定のフォーム認証を使用します。
  5. [操作] ウィンドウで、[編集] をクリックします。
  6. [フォーム認証設定の編集] ダイアログ ボックスの [ログイン URL] テキスト ボックスに、クライアントがログインするページの名前を入力します。
  7. [認証 Cookie のタイムアウト (分)] テキスト ボックスに、タイムアウト値に使用する時間を分単位で入力します。
  8. [モード] の一覧で、使用する Cookie モードを選択します。
  9. [名前] テキスト ボックスに、Cookie の名前を入力します。
  10. [保護モード] の一覧で、使用する保護モードを選択します。
  11. [SSL が必要] チェック ボックスをオンにします。
  12. [要求ごとに Cookie の有効期限を延長する] チェック ボックスをオンにして、[OK] をクリックします。

コマンド ラインを使用してフォーム認証を構成するには

フォーム認証を有効にするには、次の構文を使用します。

appcmd set config /commit:WEBROOT /section:system.web/authentication /mode:None|Windows|Passport|Forms

既定では、IIS 8 は mode 属性を Windows に設定し、フォーム認証は無効になっています。 属性を Forms に設定すると、フォーム認証が有効になります。 たとえば、フォーム認証を有効にするには、コマンド プロンプトで次のように入力し、Enter キーを押します。

appcmd set config /commit:WEBROOT /section:system.web/authentication /mode:Forms

Note

Appcmd.exe を使用して、IIS 8 のグローバル レベルで authentication 要素を構成する場合は、構成の変更が ApplicationHost.config ではなくルートの Web.config ファイルに対して行われるように、コマンドに /commit:WEBROOT を指定します。

フォーム認証のログイン URL を指定するには、次の構文を使用します。

appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.loginURL:string

変数 forms.loginURL:string は、クライアントがログインするページの名前です。 既定値は Login.aspx です。 たとえば、フォーム認証のログイン URL を指定するには、コマンド プロンプトで次のように入力し、Enter キーを押します。

appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.loginURL:login.aspx

Note

Appcmd.exe を使用して、IIS 8 のグローバル レベルで authentication 要素を構成する場合は、構成の変更が ApplicationHost.config ではなくルートの Web.config ファイルに対して行われるように、コマンドに /commit:WEBROOT を指定します。

フォーム認証の認証タイムアウトを指定するには、次の構文を使用します。

appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.timeout:TimeSpan

変数 forms.timeout:TimeSpan は、認証に使用される Cookie が期限切れになる時間 (分) です。 既定値は 30 分です。 たとえば、フォーム認証の認証タイムアウトを指定するには、コマンド プロンプトで次のように入力し、Enter キーを押します。

appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.timeout:30

Note

Appcmd.exe を使用して、IIS 8 のグローバル レベルで authentication 要素を構成する場合は、構成の変更が ApplicationHost.config ではなくルートの Web.config ファイルに対して行われるように、コマンドに /commit:WEBROOT を指定する必要があります。

フォーム認証の Cookie 名を構成するには、次の構文を使用します。

appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.name:string

変数 forms.name:string は、フォーム認証に使用する Cookie の名前です。 既定値は ASPXAUTH です。 たとえば、フォーム認証の Cookie 名を構成するには、コマンド プロンプトで次のように入力し、Enter キーを押します。

appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.name:.ASPXUTH

フォーム認証の Cookie モードを構成するには、次の構文を使用します。

appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.cookieless:UseUri|UseCookies|AutoDetect|UseDeviceProfile

forms.cookieless の既定値は UseDeviceProfile です。 たとえば、フォーム認証の Cookie モードで "デバイス プロファイルを使用する" 設定を使用するように構成するには、コマンド プロンプトで次のように入力し、Enter キーを押します。

appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.cookieless:UseDeviceProfile

フォーム認証の Cookie 保護モードを構成するには、次の構文を使用します。

appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.protection:All|None|Encryption|Validation

forms.protection の既定値は All です。 たとえば、フォーム認証の Cookie 保護モードで暗号化と検証の設定を使用するように構成するには、コマンド プロンプトで次のように入力し、Enter キーを押します。

appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.protection:All

認証 Cookie 用に SSL を要求するには、次の構文を使用します。

appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.requireSSL:true|false

forms.requireSSL の既定値は false です。 この属性を true に設定すると、SSL が要求されます。 たとえば、認証 Cookie 用に SSL を要求するには、コマンド プロンプトで次のように入力し、Enter キーを押します。

appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.requireSSL:true

頻繁に要求されるコンテンツをキャッシュするには、次の構文を使用します。

appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.slidingExpiration:true|false

forms.slidingExpiration の既定値は true です。 たとえば、頻繁に要求されるコンテンツをキャッシュするには、コマンド プロンプトで次のように入力し、Enter キーを押します。

appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.slidingExpiration:true

ASP.NET 偽装認証

UI を使用して偽装認証を構成するには

  1. IIS マネージャーを開き、管理するレベルに移動します。
  2. [機能ビュー] で、[認証] をダブルクリックします。
  3. [認証] ページで、[ASP.NET 偽装] を選択します。
  4. [操作] ウィンドウで [有効] をクリックして、既定の設定の ASP.NET 偽装認証を使用します。
  5. 必要に応じて、[操作] ウィンドウで [編集] をクリックして、セキュリティ プリンシパルを設定します。
  6. [ASP.NET 偽装設定の編集] ダイアログ ボックスで、[特定のユーザー] または [認証されたユーザー] を選択します。 どちらを選択しても、ASP.NET アプリケーションのセキュリティ コンテキストには、この ID が使用されます。 既定では、IIS 8 は、認証されたユーザーを偽装するように設定されます。
  7. [OK] をクリックして終了するか、または次のオプションの手順に進んで偽装する ID を変更します。
  8. 必要に応じて、[設定] をクリックし、[特定のユーザー] の ID を変更します。
  9. [資格情報の設定] ダイアログ ボックスで、匿名アクセス用に IIS が使用する必要がある新しいアカウント向けに、既存のユーザー アカウントの名前を [ユーザー名] に、そのユーザー アカウントに関連付けられているパスワードを [パスワード] に、それと完全に同じ値を [パスワードの確認] に入力します。
  10. [OK] をクリックして、[資格情報の設定] ダイアログ ボックスを閉じます。
  11. [OK] をクリックして、[ASP.NET 偽装設定の編集] ダイアログ ボックスを閉じます。

コマンド ラインを使用して偽装認証を構成するには

ASP.NET 偽装を有効または無効にするには、次の構文を使用します。

appcmd set config /commit:WEBROOT /section:identity /impersonate:true|false

既定では、IIS は impersonate 属性を false に設定し、ASP.NET 偽装認証は無効になっています。 この属性を true に設定すると、ASP.NET 偽装認証が有効になります。 たとえば、ASP.NET 偽装認証を有効にするには、コマンド プロンプトで次のように入力し、Enter キーを押します。

appcmd set config /commit:WEBROOT /section:identity /impersonate:true

必要に応じて、次の構文を使用して、偽装する IIS のアカウントを設定できます。

appcmd set config /commit:WEBROOT /section:identity /userName:string /password:string

変数 userName:string は IIS が偽装に使用するアカウント、変数 password:string はパスワードです。 たとえば、IIS で Moe というアカウントを偽装に使用するには、コマンド プロンプトで次のように入力し、Enter キーを押します。

appcmd set config /commit:WEBROOT /section:identity /userName: Moe /password:pass@word1

Note

Appcmd.exe を使用して、IIS 8 のグローバル レベルで ID 要素を構成する場合は、構成の変更が ApplicationHost.config ではなくルートの Web.config ファイルに対して行われるように、コマンドに /commit:WEBROOT を指定します。

4.4. コンピューター キーの設定

このセクションでは、IIS マネージャーの UI を使用して ASP.NET アプリケーション用のコンピューター キーを生成する方法について説明します。

UI を使用してコンピューター キーを生成するには

  1. IIS マネージャーを開き、管理するレベルに移動します。
  2. [機能ビュー] で、[コンピューター キー] をダブルクリックします。
  3. [コンピューター キー] ページの [検証方法] の一覧で、検証方法を選択します。 既定の検証方法は [SHA1] です。
  4. [暗号化の方法] の一覧で、暗号化の方法を選択します。 既定の暗号化の方法は [自動] です。
  5. 必要に応じて、検証および解読の各キーの設定を構成します。
  6. [操作] ウィンドウで [キーの生成] をクリックし、[適用] をクリックします。

4.5. TLS/SSL 通信

このセクションでは、アプリケーションに TLS/SSL セキュリティを構成する方法について説明します。

証明機関 (CA) からサーバー証明書を取得した後、以下のセクションに示す手順に従います。

  1. SSL バインド
  2. サイトで SSL を必須にする
  3. クライアント証明書

SSL バインド

このセクションでは、IIS マネージャーの UI またはコマンド ラインを使用して、SSL バインドをサイトに追加する方法について説明します。

UI を使用して SSL バインドをサイトに追加するには

  1. IIS マネージャーを開きます。
  2. [接続] ウィンドウで、ツリーの [サイト] ノードを展開し、バインドを追加するサイトをクリックして選択します。
  3. [操作] ウィンドウで、 [バインド]をクリックします。
  4. [サイト バインド] ダイアログ ボックスの [追加]をクリックします。
  5. [サイト バインドの追加] ダイアログ ボックスの [種類] の一覧で、[https] を選択します。
  6. [IP アドレス] の一覧で、[未使用の IP アドレスすべて] を選択します (特定の IP アドレスを使用しない場合)。
  7. [ポート] ボックスに、ポートの番号を入力します (既定値は 443)。
  8. [ホスト名] ボックスに、ホストの名前を入力します。
  9. 同じ IP アドレスを使用して複数のセキュリティで保護された Web サイトを提供する場合は、[Server Name Indication が必要] チェック ボックスをオンにします。
  10. [SSL 証明書] の一覧で、Web サイトの証明書を選択します。 証明書が一覧に表示されない場合は、[選択] をクリックし、[証明書の選択] ダイアログ ボックスを使用して証明書を検索します。
  11. OK をクリックします。

コマンド ラインを使用して SSL バインドをサイトに追加するには

サイトにバインドを追加するには、次の構文を使用します。

appcmd set site /site.name:string /+bindings.[protocol='string', bindingInformation='string']

変数 site.name:string は、バインドを追加するサイトの名前です。 変数 protocol='string' は使用するプロトコル、変数 bindingInformation='string' は IP アドレス、ポート、およびホスト ヘッダーの組み合わせです。

たとえば、ポート 443 上で、ホスト ヘッダーなしのすべての IP アドレスに対する HTTPS バインドを持つように contoso という名前のサイトを構成するには、コマンド プロンプトで次のように入力し、Enter キーを押します。

appcmd set site /site.name:contoso /+bindings.[protocol='https', bindingInformation='*:443:']

サイトで SSL を必須にする

このセクションでは、IIS マネージャーの UI またはコマンド ラインを使用して、Web サイトに SSL を要求する方法について説明します。

UI を使用して SSL を要求するには

  1. IIS マネージャーを開き、管理するレベルに移動します。 サイト、アプリケーション、またはディレクトリのレベルにいることを確認します。[SSL 設定] はサーバー レベルでは使用できません。

    Note

    ファイル レベルで SSL を構成するには、[コンテンツ ビュー] でファイルに移動し、[操作] ウィンドウで [機能ビューに切り替え] をクリックします。

  2. [機能ビュー][SSL 設定] をダブルクリックします。

  3. [SSL 設定] ページで、[SSL が必要] を選択します。

  4. [操作] ウィンドウで、[適用] をクリックします。

コマンド ラインを使用して SSL を要求するには

SSL を要求するには、次の構文を使用します。

appcmd set config "site|URL" /section:access /sslFlags:Ssl /commit:APPHOST

変数 site|URL は、IIS 8 で SSL を要求するサイト、アプリケーション、仮想ディレクトリ、またはファイルです。 たとえば、Default Web Site の SSL を要求するには、コマンド プロンプトで次のように入力し、Enter キーを押します。

appcmd set config "Default Web Site" /section:access /sslFlags:Ssl /commit:APPHOST

Default Web Site 上の iisstart.htm ファイルの SSL を要求するには、コマンド プロンプトで次のように入力し、Enter キーを押します。

appcmd set config "http://localhost/iisstart.htm" /section:access /sslFlags:Ssl /commit:APPHOST

クライアント証明書

UI を使用してクライアント証明書を指定するには

  1. IIS マネージャーを開き、管理するレベルに移動します。 サイト、アプリケーション、またはディレクトリのレベルにいることを確認します。[SSL 設定] はサーバー レベルでは使用できません。

    Note

    ファイル レベルで SSL を構成するには、[コンテンツ ビュー] でファイルに移動し、[操作] ウィンドウで [機能ビューに切り替え] をクリックします。

  2. [機能ビュー][SSL 設定] をダブルクリックします。

  3. [SSL 設定] ページで、必要に応じて [SSL が必要] を選択します。 クライアント証明書について [無視] または [受理] を選択する場合は、SSL は必要ありません。

  4. [SSL 設定] ページの [クライアント証明書] 領域で、次のいずれかの手順に従います。

    • クライアントから提供されてもクライアント証明書を受理しない場合は、[無視] を選択します。
    • クライアント証明書を受理する場合は、[受理] を選択します。
    • クライアント証明書を要求する場合は、[必要] を選択します。 [クライアント証明書が必要] を使用するには、[SSL が必要] を有効にする必要があります。
  5. [操作] ウィンドウで、[適用] をクリックします。

コマンド ラインを使用してクライアント証明書を指定するには

クライアント証明書を使用するかどうかを指定するには、次の構文を使用します。

appcmd set config "site|URL" /section:access /sslFlags:Ssl|SslNegotiateCert|SslRequireCert /commit:APPHOST

変数 site|URL は、IIS でクライアント証明書を有効にするサイト、アプリケーション、仮想ディレクトリ、またはファイルです。 たとえば、Default Web Site のクライアント証明書を受理するには、コマンド プロンプトで次のように入力し、Enter キーを押します。

appcmd set config "Default Web Site" /section:access /sslFlags:SslNegotiateCert /commit:APPHOST

Default Web Site 上の iisstart.htm ファイルのクライアント証明書を受理するには、コマンド プロンプトで次のように入力し、Enter キーを押します。

appcmd set config "http://localhost/iisstart.htm" /section:access /sslFlags:SslNegotiateCert /commit:APPHOST

sslFlags 属性には、値を 1 つ以上指定できます。 複数の値を指定する場合は、各値をコンマ (,) で区切って入力します。 たとえば、Default Web Site で SSL とクライアント証明書の両方が必要であることを指定するには、コマンド プロンプトで次のように入力し、Enter キーを押します。

appcmd set config "Default Web Site" /section:access /sslFlags:Ssl,SslRequireCert /commit:APPHOST