次の方法で共有


IIS Express での URL バインドの失敗の処理

担当: Vaidy Gopalakrishnan

概要

IIS Express は、最も一般的な Web 開発およびテスト タスクを管理特権なしで実行できるように設計されました。 たとえば、予約されていないポートを使用して、Web サイトをローカルで実行できます。 また、自己署名テスト証明書と 44300 から 44399 の範囲のポートを使用して、SSL で Web サイトをテストすることもできます。 詳細については、「管理特権なしで IIS Express を実行する」を参照してください。

ただし、既定で有効になっていないシナリオのテストに IIS Express を使用する必要がある場合があります。 たとえば、IIS Express は IIS のような運用 Web サーバーとして設計されていませんが、Web サイトへの外部アクセスをテストする必要がある場合があります。 同様に、SSL または特定の予約済みポート番号を使用してサイトをテストする必要がある場合があります。

既定では、IIS Express を使用してこれらのシナリオをテストすると、URL バインド エラーが報告されます。 これは、IIS Express にこの種のタスクを実行するための十分な特権がないために発生します。 これらの制限を回避するために、IIS Express を管理者として実行することもできますが、セキュリティ上の理由からこの方法はお勧めできません。

これらのシナリオで IIS Express を使用してテストする正しいアプローチは、標準のアクセス許可で IIS Express を実行してタスクを実行できるように HTTP.sys を構成することです。 テストが完了したら、構成を元に戻すことができます。 セキュリティ上の理由から、これらのタスクは管理者に制限され、(管理者以外の) 標準ユーザーが実行することはできません。

HTTP.sys について

HTTP.sys は、IIS と IIS Express の両方の HTTP トラフィックと SSL トラフィックを処理するオペレーティング システム コンポーネントです。 既定では、HTTP.sys は、アプリケーションが標準ユーザーによって実行されている場合、アプリケーション (IIS Express など) で次の操作を実行できなくなります。

  • 80 や 443 などの予約済みポートの使用
  • 外部トラフィックの提供
  • SSL を使用する

IIS Express に対してこれらの操作を許可するように HTTP.sys を構成できます。 Windows 7 および Windows Vista では、netsh.exe ユーティリティを使用して HTTP.sys を構成できます。 Windows XP では、HTTP.sysは、Windows XP Service Pack 2 サポート ツールに含まれている httpcfg.exe コマンドライン ユーティリティを使用して構成できます。

予約済みポートの使用

既定では、8080 などの予約されていないポートを使用する Web サイトを実行するために、IIS Express を使用できます。 ただし、80 や 443 などの予約済みポートを使用するには、作業が必要です。 以下に説明する手順では、ポート 80 経由のローカル トラフィックをサポートすることを前提としています。

Windows 7 または Windows Vista では、管理者特権のコマンド プロンプトで、次のコマンドを実行します。

netsh http add urlacl url=http://localhost:80/ user=everyone

このコマンドを使用すると、管理者権限の必要なく、ポート 80 を使用して任意のユーザーのアプリケーション (独自の IIS Express インスタンスなど) を実行できるようになります。 このアクセスを自分自身に制限するには、"すべてのユーザー" を Windows ID に置き換えます。

Windows XP では、管理者特権でのコマンド プロンプトから次のコマンドを実行する必要があります。

httpcfg set urlacl /u http://localhost:80/ /a D:(A;;GX;;;WD)

HTTP.sys を構成したら、ポート 80 を使用するように Web サイトを構成できます。 これは、WebMatrix や Visual Studio 2010 SP1 Beta などのツールを使用すると非常に簡単です。 applicationhost.config ファイルを手動で編集して、Sites 要素に次のバインドを含めることもできます。

<binding protocol="http" bindingInformation="*:80:localhost"/>

これで、Web サイトはポート 80 を使用して (ローカルで) 実行されます。

アプリケーションのテストが完了したら、HTTP.sys を以前の設定に戻す必要があります。

Windows 7 または Windows Vista では、管理者特権のコマンド プロンプトで、次のコマンドを実行します。

netsh http delete urlacl url=http://localhost:80/

Windows XP では、管理者特権のプロンプトで次のコマンドを実行します。

httpcfg delete urlacl /u http://localhost:80/

外部トラフィックの提供

Web サイトで外部トラフィックを提供できるようにするには、HTTP.sys とコンピューターのファイアウォールを構成する必要があります。 以下の手順では、外部トラフィックがポート 8080 で提供されることを前提としています。

HTTP.sys を外部トラフィックに構成する手順は、予約済みポートを使用するようにサイトを設定する手順と似ています。 Windows 7 または Windows Vista では、管理者特権のコマンド プロンプトで、次のコマンドを実行します。

netsh http add urlacl url=http://myhostname:8080/ user=everyone

Windows XP では、管理者特権のプロンプトで次のコマンドを実行します。

httpcfg set urlacl /u http://myhostname:8080/ /a D:(A;;GX;;;WD)

HTTP.sys を構成したら、WebMatrix または Visual Studio 2010 SP1 Beta を使用するか、applicationhost.config ファイルを編集して Sites 要素に以下のバインディングを含めることで、ポート 80 を使用するように IIS Express を構成できます。 (myhostname をお使いのコンピューターのドメイン名に置き換えてください)。

<binding protocol="http" bindingInformation="*:8080:myhostname"/>

また、外部トラフィックがポート 8080 を通過できるようにファイアウォールを構成する必要もあります。 手順は、お使いのファイアウォールによって異なるため、ここでは説明しません。

アプリケーションのテストが完了したら、HTTP.sys を以前の設定に戻します。

Windows 7 または Windows Vista では、管理者特権のコマンド プロンプトで、次のコマンドを実行します。

netsh http delete urlacl url=http://myhostname:8080/

Windows XP では、管理者特権のプロンプトで次のコマンドを実行します。

httpcfg delete urlacl /u http://myhostname:8080/

カスタム SSL ポートの使用

サイトへの SSL アクセスをテストする場合は、IIS Express で 44300 から 44399 の間の SSL ポートを使用し、IIS Express 自己署名証明書を使用します。 この範囲外のポートで SSL を使用しようとすると、IIS Express での Web サイトの起動時に URL バインディングに失敗します。

SSL をサポートするように HTTP.sys を構成する方法に関する一般的な手順については、「方法: SSL 証明書を使用してポートを構成する」を参照してください。 例として、URL https://localhost:443 を使用して Web サイトをテストする必要があると考えてみてください。

まず、IIS Express 自己署名証明書の SHA1 サムプリントを決定します。 IIS Express セットアップ プログラムでは、実行時に新しい証明書が生成されるため、このサムプリントはコンピューターごとに異なります。 SHA1 サムプリントは、Microsoft 管理コンソール (MMC) 証明書スナップインを使用して、コンピューターの個人証明書ストアを参照することで判断できます。 または、以下に示すように、.NET CertMgr.exe ユーティリティを使用することもできます。 コマンドプロンプトで、次のコマンドを実行します。

certmgr.exe /c /s /r localMachine MY

このコマンドは、ローカル コンピューターの個人用証明書ストアにあるすべての証明書に関する情報を表示します。 出力で "IIS Express 開発証明書" を検索して IIS Express 自己署名証明書を見つけ、その SHA1 サムプリントをメモします。

次に、自己署名証明書を URL に関連付ける HTTP.sys を構成します。 Windows 7 または Windows Vista では、まず、uuidgen.exe またはその他のツールを使用して一意の UUID を作成することから始めます。 次に、管理者特権のプロンプトから次のコマンドを実行し、サムプリントを certhash パラメーターに渡します。 (サムプリントを指定する場合はスペースを除外します。)

netsh http add sslcert ipport=0.0.0.0:443 certhash=<thumbprint> appid={00112233-4455-6677-8899-AABBCCDDEEFF}

appid パラメーターには、先ほど作成した一意の UUID を渡します。

Windows XP では、管理者特権のプロンプトで次のコマンドを実行します。

httpcfg set ssl -i 0.0.0.0:443 -h <thumbprint>

443 は予約済みポートであるため、標準ユーザーとして実行中に IIS Express で使用できるように HTTP.sys を構成する必要があります。 詳細については、「予約済みポートの使用」セクションを参照してください。 44500 などの予約されていないカスタム SSL ポートを使用する場合は、この手順を実行する必要はありません。

Windows 7 または Windows Vista では、管理者特権のプロンプトで、次のコマンドを実行します。

netsh http add urlacl url=https://localhost:443/ user=everyone

Windows XP では、管理者特権のプロンプトで次のコマンドを実行します。

httpcfg set urlacl /u https://localhost:443/ /a D:(A;;GX;;;WD)

HTTP.sys を構成したら、WebMatrix または Visual Studio 2010 SP1 Beta を使用するか、applicationhost.config ファイルの Sites 要素に次のバインドを追加して、カスタム SSL ポートを使用するように Web サイトを構成します。

<binding protocol="https" bindingInformation="*:443:localhost"/>

Web サイトのテストが完了したら、HTTP.sys を以前の設定に戻します。 Windows 7 または Windows Vista では、管理者特権のプロンプトで、次のコマンドを実行します。

netsh http delete sslcert ipport=0.0.0.0:443
netsh http delete urlacl url=https://localhost:443/

Windows XP では、管理者特権のプロンプトで次のコマンドを実行します。

httpcfg delete ssl –i 0.0.0.0:443
httpcfg delete urlacl /u https://localhost:443/

カスタム SSL 証明書の使用

カスタム SSL 証明書の設定は、カスタム SSL ポートの使用とよく似ています。 このセクションで説明する手順では、Web サイトがポート 44300 と IIS Express 自己署名証明書を使用するローカル SSL トラフィックを既に提供していることを前提としています。

まず、コンピューターにカスタム SSL 証明書をインストールする必要があります。 MMC 証明書スナップインまたは CertMgr.exe を使用します。 証明書をインストールする際に、SHA1 サムプリントの値を書き留めておいてください。

URL https://localhost:44300 は、自己署名証明書を使用するように IIS Express セットアップによって事前構成されています。 この URL をカスタム証明書にバインドするには、既存の関連付けを削除する必要があります。 ホスト名とポートの組み合わせが SSL 証明書に関連付けられていない場合は、この手順をスキップします。

Windows 7 または Windows Vista では、管理者特権のプロンプトで、次のコマンドを実行します。

netsh http delete sslcert ipport=0.0.0.0:44300

Windows XP では、管理者特権のプロンプトで次のコマンドを実行します。

httpcfg delete ssl –i 0.0.0.0:44300

残りの手順は、カスタム SSL ポートを構成する手順と同様です。 uuidgen.exe またはその他のツールを使用して一意の UUID を作成します。

Windows 7 または Windows Vista では、昇格されたプロンプトから次のコマンドを実行し、certhash パラメーターにカスタム証明書のサムプリント (最初にスペースをすべて削除します) を渡し、UUID を渡します。

netsh http add sslcert ipport=0.0.0.0:44300 certhash=<thumbprint> appid={00112233-4455-6677-8899-AABBCCDDEEFF}

Windows XP では、管理者特権のプロンプトで次のコマンドを実行します。

httpcfg set ssl -i 0.0.0.0:44300 -h <thumbprint>

まとめ

この記事では、既定で有効になっていない IIS Express の一部のシナリオをサポートするために必要な手順について説明します。 これらを実行するには、管理者である必要があります。 管理者特権がない場合でも、IIS Express を標準ユーザーとして使用して、最も一般的な Web 設計および開発タスクを実行できます。