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 つのことがサーバー証明書で検証されます。
- 現在の日付と時刻が、証明書の "有効期間の開始日" と"有効期間の終了日" の日付範囲内である。
- 証明書の "共通名" (CN) が、要求のホスト ヘッダーと一致する。 たとえば、クライアントが
https://www.contoso.com/
に要求を送信する場合、CN はwww.contoso.com
である必要があります。 - 証明書の発行者が既知の信頼できる 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] (サーバー証明書) 機能をダブルクリックします。
[アクション] ペインで、[自己署名証明書の作成...] をクリックします。
新しい証明書のフレンドリ名を入力して、[OK] をクリックします。
これで、自己署名証明書が作成されます。 証明書は、"サーバー認証" 用としてマークされています。つまり、HTTP SSL 暗号化とサーバーの ID の認証で、サーバー側証明書として使われます。
SSL バインドを作成する
ツリー ビューでサイトを選び、[アクション] ペインで [バインド...] をクリックします。 これによりバインド エディターが表示され、Web サイトのバインドを作成、編集、削除できます。 新しい SSL バインドをサイトに追加するには、[追加...] をクリックします。
新しいバインドの既定の設定では、ポート 80 の HTTP に設定されます。 [種類] ドロップダウン リストで [HTTPS] を選びます。 前のセクションで作成した自己署名証明書を [SSL 証明書] ドロップダウン リストから選択して、[OK] をクリックします。
これでサイトに新しい SSL バインドが作成されました。残っているのは、それが機能するのを確認することです。
SSL バインドを確認する
[アクション] ペインの [Browse Web Site] (Web サイトの参照) で、作成したバインドに関連付けられているリンクをクリックします。
Internet Explorer (IE) 7 以降では、自己署名証明書が信頼された証明機関 (CA) ではなく自分のコンピューターによって発行されたものであるため、エラー ページが表示されます。 ローカル コンピューターの証明書ストアまたはドメインのグループ ポリシーの、信頼されたルート証明機関の一覧に証明書を追加すると、IE 7 以降でそれが信頼されるようになります。
[このサイトの閲覧を続行する (推奨されません)]をクリックします。
SSL の設定を構成する
サイトで SSL を要求する場合、またはクライアント証明書を使って特定の方法で対話する場合は、SSL の設定を構成します。 ツリー ビューでサイト ノードをクリックして、サイトのホーム ページに戻ります。 中央のペインで、[SSL 設定] 機能をダブルクリックします。
まとめ
このチュートリアルでは、コマンド ライン ツール AppCmd.exe、スクリプト プロバイダー WMI、IIS マネージャーを使って、IIS で SSL を設定することに成功しました。