次の方法で共有


IIS 7 以降で SSL を設定する方法

投稿者 : Saad Ladki

はじめに

サイトで Secure Sockets Layer (SSL) を構成する手順は、IIS 7 以降と IIS 6.0 で同じであり、次のものが含まれます。

  • 適切な証明書を取得します。
  • サイトで HTTPS バインドを作成します。
  • サイトに要求を行ってテストします。
  • 必要に応じて、SSL オプションを構成します。つまり、SSL が要求されるようにします。

このドキュメントでは、SSL に関する基本的な情報をいくつか提供してから、次の手段で SSL を有効にする方法を示します。

  • IIS マネージャーの使用。
  • AppCmd.exe コマンド ライン ツールの使用。
  • プログラムでの Microsoft.Web.Administration の使用。
  • WMI スクリプトの使用。

この記事は、次のセクションで構成されています。

SSL の構成

独自のサーバーで Web サイトを実行している場合でも、クラウド内の場合でも、多くの Web サイトがユーザーのプライバシーを保護することに取り組んでおり、SSL を使ってサイトをセキュリティで保護することは、おそらく非常に重要なことです。 サーバーで SSL を構成する必要がある場合、IIS 6.0 と IIS 7 以降では SSL の実装が変わっていることを理解しておくことが重要です。 Windows Server 2003 上の IIS 6.0 では、SSL のすべての構成は IIS メタベースに格納され、暗号化と解読はユーザー モードで行われていました (カーネル モードとユーザー モードの多くの切り替えが必要)。 IIS 7 以降では、SSL の暗号化と解読は HTTP.sys によってカーネル モードで処理されるため、セキュリティで保護された接続のパフォーマンスは IIS 7 以降の方が IIS 6.0 より最大で 20% 向上しています。

カーネル モードで SSL を使うには、SSL バインドの情報を 2 か所に格納する必要があります。 1 つ目として、バインドが、サイトの %windir%\System32\inetsrv\config\applicationHost.config に格納されます。 サイトの起動時に、IIS はバインドを HTTP.sys に送信し、HTTP.sys は指定された IP:Port で要求のリッスンを開始します (これはすべてのバインドで機能します)。 2 つ目として、バインドに関連付けられている SSL 構成が、HTTP.sys の構成に格納されます。 HTTP.sys に格納されている SSL のバインド構成を表示するには、次の例のように、コマンド プロンプトで netsh コマンドを使います。

netsh http show sslcert

クライアントが接続して SSL ネゴシエーションを開始すると、HTTP.sys は、その SSL 構成で、クライアントが接続した IP:Port ペアを探します。 SSL のネゴシエーションが成功するには、その前に、HTTP.sys の SSL 構成に、証明書ハッシュと証明書ストアの名前が含まれている必要があります。

トラブルシューティングのヒント: SSL バインドで問題が発生する場合は、バインドが ApplicationHost.config で構成されていること、および HTTP.sys ストアにバインドの有効な証明書ハッシュとストア名が含まれていることを確認します。

証明書の選択

証明書を選ぶときは、次の点を考慮します。エンド ユーザーが証明書を使用してサーバーの ID を検証できるようにしますか。 そうであれば、証明書要求を作成し、その要求を VeriSign や GeoTrust などの既知の証明機関 (CA) に送信するか、イントラネット ドメインのオンライン CA から証明書を取得します。 ブラウザーでは、通常、次の 3 つのことがサーバー証明書で検証されます。

  1. 現在の日付と時刻が、証明書の "有効期間の開始日" と"有効期間の終了日" の日付範囲内である。
  2. 証明書の "共通名" (CN) が、要求のホスト ヘッダーと一致する。 たとえば、クライアントが https://www.contoso.com/ に要求を送信する場合、CN は www.contoso.com である必要があります。
  3. 証明書の発行者が既知の信頼できる CA である。

これらのチェックが 1 つでも失敗した場合、ブラウザーはユーザーに警告を表示します。 個人的に知らないエンド ユーザーがいるインターネット サイトまたはイントラネット サイトの場合、これら 3 つのパラメーターが有効であることを常に確認する必要があります。

自己署名証明書は、ユーザー自身のコンピューター上で作成された証明書です。 テスト環境など、エンド ユーザーがサーバーを信頼することが重要ではない環境で役立ちます。

AppCmd の使用

AppCmd.exe を使って証明書を要求または作成することはできません。 また、AppCmd.exe を使って SSL バインドを作成することもできません。

SSL の設定を構成する

AppCmd.exe を使って、Access セクションの sslFlags 属性を変更することで、サーバーの HTTPS 接続のみを受け入れるようにサイトを構成できます。 たとえば、次のコマンドを使うと、ApplicationHost.config ファイル (commitPath:APPHOST など) の "Default Web Site" に対してこの設定を構成できます。

%windir%\system32\inetsrv>AppCmd set config "Default Web Site" -commitPath:APPHOST -section:access -sslFlags:Ssl

成功した場合、次のメッセージが表示されます。

Applied configuration changes to section "system.webServer/security/access" for "MACHINE/WEBROOT/APPHOST/Default Web Site" at configuration commit path "MACHINE/WEBROOT/APPHOST"

Note

128 ビット SSL を要求するには、sslFlags の値を Ssl128 に変更します。

次の例では、Default Web Site の <access/> セクションの設定を表示する方法を示します。 sslFlags 属性が正常に設定されています。

%windir%\system32\inetsrv>AppCmd list config "Default Web Site" -section:access

このコマンドを実行すると、ApplicationHost.config ファイルに次のエントリが作成されます。

<system.webServer>
  <security>
    <access flags="Script, Read" sslFlags="Ssl" />
  </security>
</system.webServer>

WMI の使用

WebAdministration WMI 名前空間を使って証明書を要求または作成することはできません。

SSL バインドを作成する

次のスクリプトでは、新しい SSL バインドを作成する方法と、HTTP.sys と IIS の両方に適切な構成を追加する方法を示します。

Set oIIS = GetObject("winmgmts:root\WebAdministration")
'''''''''''''''''''''''''''''''''''''''''''''
' CREATE SSL BINDING
'''''''''''''''''''''''''''''''''''''''''''''

oIIS.Get("SSLBinding").Create _ 
   "*", 443, "4dc67e0ca1d9ac7dd4efb3daaeb15d708c9184f8", "MY"
'''''''''''''''''''''''''''''''''''''''''''''
' ADD SSL BINDING TO SITE
'''''''''''''''''''''''''''''''''''''''''''''

Set oBinding = oIIS.Get("BindingElement").SpawnInstance_
oBinding.BindingInformation = "*:443:"
oBinding.Protocol = "https"

Set oSite = oIIS.Get("Site.Name='Default Web Site'")
arrBindings = oSite.Bindings

ReDim Preserve arrBindings(UBound(arrBindings) + 1)
Set arrBindings(UBound(arrBindings)) = oBinding

oSite.Bindings = arrBindings
Set oPath = oSite.Put_

Note

証明書のハッシュとストアでは、サーバー上の実際の機能している証明書が参照されている必要があります。 証明書ハッシュやストア名が正しくない場合は、エラーが返されます。

SSL の設定を構成する

次のスクリプトでは、IIS の WMI プロバイダーを使って SSL を設定する方法を示します。 この値は、IIS_Schema.xml ファイルで確認できます。

CONST SSL = 8  
Set oIIS = GetObject("winmgmts:root\WebAdministration")  
Set oSection = oIIS.Get(\_  
 "AccessSection.Path='MACHINE/WEBROOT/APPHOST',Location='Default Web Site'")  
oSection.SslFlags = oSection.SslFlags OR SSL  
oSection.Put\_ <a id="IISManager"></a>

IIS マネージャー

証明書を取得する

ツリー ビューでサーバー ノードを選び、リスト ビューで [Server Certificates] (サーバー証明書) 機能をダブルクリックします。
[サーバー証明書] が選択されている ALEXIS E 3 L H サーバー ノード Home のスクリーンショット。

[アクション] ペインで、[自己署名証明書の作成...] をクリックします。
[SelfSigned 証明書の作成] が強調されている [サーバー証明書の操作] ウィンドウのスクリーンショット。

新しい証明書のフレンドリ名を入力して、[OK] をクリックします。

これで、自己署名証明書が作成されます。 証明書は、"サーバー認証" 用としてマークされています。つまり、HTTP SSL 暗号化とサーバーの ID の認証で、サーバー側証明書として使われます。

SSL バインドを作成する

ツリー ビューでサイトを選び、[アクション] ペインで [バインド...] をクリックします。 これによりバインド エディターが表示され、Web サイトのバインドを作成、編集、削除できます。 新しい SSL バインドをサイトに追加するには、[追加...] をクリックします。

既定のサイト バインドを 1 つ含む [サイト バインド] ダイアログのスクリーンショット。

新しいバインドの既定の設定では、ポート 80 の HTTP に設定されます。 [種類] ドロップダウン リストで [HTTPS] を選びます。 前のセクションで作成した自己署名証明書を [SSL 証明書] ドロップダウン リストから選択して、[OK] をクリックします。

[種類] が [H T P S] に設定され、[S S L] 証明書が [テスト証明書] に設定されている [サイト バインドの追加] ダイアログのスクリーンショット。

これでサイトに新しい SSL バインドが作成されました。残っているのは、それが機能するのを確認することです。
H T T P と H T T P S の両方のバインドを含む [サイト バインド] ダイアログのスクリーンショット。

SSL バインドを確認する

[アクション] ペインの [Browse Web Site] (Web サイトの参照) で、作成したバインドに関連付けられているリンクをクリックします。
[操作] ウィンドウの [Web サイトの参照] セクションのスクリーンショット。[参照] アスタリスク コロン 443 または H T T P S が強調されています。

Internet Explorer (IE) 7 以降では、自己署名証明書が信頼された証明機関 (CA) ではなく自分のコンピューターによって発行されたものであるため、エラー ページが表示されます。 ローカル コンピューターの証明書ストアまたはドメインのグループ ポリシーの、信頼されたルート証明機関の一覧に証明書を追加すると、IE 7 以降でそれが信頼されるようになります。 [このサイトの閲覧を続行する (推奨されません)]をクリックします。
セキュリティ証明書エラーが表示されている Internet Explorer のスクリーンショット。この Web サイトに進む (推奨されません) 点が強調されています。

SSL の設定を構成する

サイトで SSL を要求する場合、またはクライアント証明書を使って特定の方法で対話する場合は、SSL の設定を構成します。 ツリー ビューでサイト ノードをクリックして、サイトのホーム ページに戻ります。 中央のペインで、[SSL 設定] 機能をダブルクリックします。

S S L を必要とし、クライアント証明書を無視する S S L 設定ペインのスクリーンショット。

まとめ

このチュートリアルでは、コマンド ライン ツール AppCmd.exe、スクリプト プロバイダー WMI、IIS マネージャーを使って、IIS で SSL を設定することに成功しました。