IIS 7.0 で SSL を設定する方法
発行日 : 2007 年 11 月 22 日 (作業者 : saad(英語))
更新日 : 2008 年 3 月 13 日 (作業者 : saad(英語))
はじめに
SSL を構成するための手順の大筋は、IIS 7.0 と IIS 6.0 で同じです。
- 適切な証明書の取得
- サイトでの HTTPS バインドの作成
- サイトへの実際の要求によるテスト
- オプションでの SSL オプションの構成 (SSL を必要条件にするなど)
このドキュメントでは役に立つ情報を提供すると共に、次のようなさまざまな方法で SSL を有効にする方法を示します。
- IIS マネージャー GUI の使用
- appcmd コマンド ライン ツールの使用
- Microsoft.Web.Administration を使用したプログラムによる方法
- WMI スクリプトの使用
この記事には次のような内容が含まれています。
- SSL 構成
- AppCmd
- WMI
- IIS マネージャー
- まとめ
SSL 構成
SSL の実装は、IIS 6.0 から IIS 7.0 で変更されました。Windows Server 2003 では、すべての SSL 構成は IIS メタベースに格納されており、暗号化/復号化はユーザー モードで実行されていました (多くのカーネル/ユーザー モードの切り替えが必要でした)。Windows Vista および Windows Server® 2008 では、HTTP.sys が SSL 暗号化/復号化をカーネル モードで処理するため、セキュリティで保護された接続のパフォーマンスが最大 20% 向上しました。
SSL をカーネル モードに移すには、SSL バインド情報を 2 か所に格納する必要があります。まず、バインドはサイトの %windir%\system32\inetsrv\applicationHost.config に格納されます。サイトが起動されると、IIS 7.0 はバインドを HTTP.sys に送信し、HTTP.sys は指定された IP : ポートで要求のリッスンを開始します (これは、すべてのバインドに適用されます)。次に、バインドに関連付けられる SSL 構成が HTTP.sys 構成に格納されます。HTTP.sys に格納された SSL バインド構成を表示するには、netsh を使用します。
netsh http show sslcert
クライアントが接続して SSL ネゴシエーションを開始すると、HTTP.sys は SSL 構成でクライアントが接続している IP : ポートのペアを探します。SSL ネゴシエーションを成功させるには、HTTP.sys SSL 構成に証明書のハッシュと証明書のストア名を含める必要があります。
トラブルシューティングに関するヒント : SSL バインドでトラブルが発生した場合、バインドが applicationHost.config で構成されていること、および HTTP.sys ストアにバインドの有効な証明書ハッシュとストア名が含まれていることを確認します。
証明書の選択
エンド ユーザーが証明書を使用してサーバー認証を実行できるようにしたい場合、証明書要求を作成して VeriSign や GeoTrust などの既知の CA に送信するか、イントラネット ドメインでオンライン CA から証明書を取得します。ブラウザーは一般に、サーバー証明書で次の 3 つの点をチェックします。
- 現在の日付/時刻が証明書の "有効開始" および "有効終了" 日付に入っているか。
- 証明書の "共通名" (CN) が要求のホスト ヘッダーと一致するか。たとえば、クライアントが https://www.contoso.com/ に対して要求を作成する場合、CN も https://www.contoso.com/ でなければなりません。
- 発行者が信頼できる既知の CA であること。
これらのチェックにおいて 1 つでも不合格な場合、ブラウザーは警告を表示します。インターネット サイトまたはイントラネット サイトのエンド ユーザーが個人的によく知っている人々でない場合、常にこれらの 3 つのパラメーターを確かめる必要があります。
自己署名入り証明書は、コンピューターによって作成された証明書です。****テスト環境など、エンド ユーザーがサーバーを信頼することが重要ではない環境では便利です。
AppCmd
appcmd を使用して証明書を要求または作成することはできません。SSL バインドも作成できません。
SSL 設定の構成
appcmd を使用して access セクションの sslFlags 属性を変更して、サイトとサーバー間専用の https 接続を構成できます。 たとえば、applicationHost.config ファイルの "Default Web Site" に対してこの設定を構成します (–commitPath:APPHOST)。
D:\Windows\system32\inetsrv>appcmd set config "Default Web Site" -commitPath:APPHOST -section:access -sslFlags:Ssl
構成変更を構成コミット パス "MACHINE/WEBROOT/APPHOST" の "MACHINE/WEBROOT/APPHOST/Default Web Site" のセクション "system.webServer/security/access" に適用しました。
128 ビット SSL を要求するには、sslFlags の値を Ssl128 に変更します。
以下の例は、Default Web Site の <access/> セクションの設定を表示する方法を示しています。sslFlags 属性が正常に設定されています。
D:\Windows\system32\inetsrv>appcmd list config "Default Web Site" -section:access
結果を次に示します。
<system.webServer>
<security>
<access flags="Script, Read" sslFlags="Ssl" />
</security>
</system.webServer>
WMI
名前空間 WebAdministration WMI を使用して証明書を要求または作成することはできません。
SSL バインドの作成
次のスクリプトは、新しい HTTPS バインドを作成して、HTTP.sys と IIS 7.0 の両方に適切な構成を追加する方法を示しています。
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_
注 :証明書のハッシュおよびストアは、サーバー上の実際に機能する証明書を参照する必要があります。証明書のハッシュまたはストア名 (あるいはその両方) が偽りである場合、スクリプトはエラーになります。
SSL 設定の構成
次のスクリプトは、IIS 7.0 WMI プロバイダーを介して SSL 設定を設定する方法を示しています。
This value can be found in the IIS_Schema.xml file
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_
IIS マネージャー
証明書の取得
ツリー ビューでサーバー ノードを選択し、リスト ビューで [サーバー証明書] 機能をダブルクリックします。
[操作] ウィンドウで [自己署名入り証明書の作成] をクリックします。
新しい証明書にフレンドリ名を入力して、[OK] をクリックします。
これで自己署名入り証明書が作成されました。証明書は "サーバー認証" 用としてマークされます。つまり、HTTP SSL 暗号化のサーバー側の証明書として、およびサーバー ID の認証のために使用します。
SSL バインドの作成
ツリー ビューでサイトを選択し、[操作] ウィンドウで [バインド] をクリックします。Web サイトのバインドを削除、編集、および削除するためのバインド エディターが表示されます。[追加] ボタンをクリックして、新しい SSL バインドをサイトに追加します。
既定値として新しい http バインドがポート 80 に設定されています。[種類] ドロップダウンで [https] を選択します。[SSL 証明書] ドロップダウンから前に作成した自己署名入り証明書を選択し、[OK] をクリックします。
これで、サイトに新しい SSL バインドが作成されました。残る作業は、SSL バインドが機能するかどうかを確認することだけです。
SSL バインドの確認
サイトの [操作] ウィンドウで、新しい HTTPS バインドを介してサイトをブラウズするリンクを確認します。このリンクをクリックして、新しいバインドをテストします。
IE7 に、エラー ページが表示されます。自己署名入り証明書は信頼できる証明機関 (CA) ではなく、お使いのコンピューターで発行されものであるためです。ローカル コンピューターの証明書ストアまたはドメインのグループ ポリシーにある信頼されたルート証明機関リストに証明書を追加すると、IE7 はその証明書を信頼します。[このサイトの閲覧を続行する (推奨されません)] をクリックします。
SSL 設定の構成
サイトで SSL を要求するには、またはクライアント証明書と特定の方法で対話するには、SSL 設定を構成します。ツリー ビューでサイト ノードをクリックして、サイトのホーム ページに戻ります。中央のウィンドウにある [SSL 設定] 機能をダブルクリックします。
まとめ
ここでは、コマンド ライン ツール AppCmd.exe、スクリプト プロバイダー WMI、および IIS マネージャーを使用して IIS 7.0 で SSL を設定しました。