Freigeben über


Behandeln von URL-Bindungsfehlern in IIS Express

von Vaidy Gopalakrishnan

Übersicht

IIS Express wurde entwickelt, um die gängigsten Webentwicklungs- und Testaufgaben ohne Administratorrechte ausführen zu können. Beispielsweise können Sie eine Website mithilfe eines nicht reservierten Ports lokal ausführen. Sie können Ihre Website auch mithilfe eines selbstsignierten Testzertifikats und einem Port im Bereich 44300 bis 44399 mit SSL testen. Weitere Informationen finden Sie unter Ausführen von IIS Express ohne Administratorrechte.

Es kann jedoch vorkommen, dass Sie IIS Express für Testszenarien verwenden müssen, die nicht standardmäßig aktiviert sind. Beispielsweise ist IIS Express kein Produktionswebserver wie IIS, allerdings kann es vorkommen, dass Sie den externen Zugriff auf Ihre Website testen müssen. Ebenso können Sie Ihre Website mithilfe von SSL oder einer bestimmten reservierten Portnummer testen.

Wenn Sie IIS Express zum Testen dieser Szenarien verwenden, wird standardmäßig ein URL-Bindungsfehler ausgegeben. Dies ist der Fall, weil IIS Express nicht über ausreichende Rechte zum Ausführen dieser Aufgabentypen verfügt. Sie können IIS Express als Administrator ausführen, um diese Einschränkungen zu umgehen, aus Sicherheitsgründen ist dies jedoch keine bewährte Methode.

In diesen Szenarien besteht der richtige Ansatz zum Testen mit IIS Express darin, HTTP.sys so zu konfigurieren, dass IIS Express die Aufgaben mit Standardberechtigungen ausführen kann. Wenn Ihre Tests abgeschlossen sind, können Sie die Konfiguration rückgängig machen. Aus Sicherheitsgründen sind diese Aufgaben auf Administratoren beschränkt und können nicht von Standardbenutzern (Benutzer, die nicht Administrator sind) ausgeführt werden.

Informationen zu HTTP.sys

HTTP.sys ist eine Betriebssystemkomponente, die sowohl für IIS als auch für IIS Express HTTP- und SSL-Datenverkehr verarbeitet. Standardmäßig verhindert HTTP.sys, dass Anwendungen (einschließlich IIS Express) die folgenden Vorgänge ausführen, wenn die Anwendung von einem Standardbenutzer ausgeführt wird:

  • Verwenden reservierter Ports wie 80 oder 443
  • Verarbeiten von externem Datenverkehr
  • Verwenden von SSL

Sie können HTTP.sys so konfigurieren, dass diese Vorgänge für IIS Express zulässig sind. Unter Windows 7 und Windows Vista können Sie HTTP.sys mithilfe des Hilfsprogramms netsh.exe konfigurieren. Unter Windows XP können HTTP.sys mit dem Befehlszeilenprogramm httpcfg.exe konfiguriert werden, das in den Windows XP Service Pack 2-Supporttools enthalten ist.

Verwenden eines reservierten Ports

Standardmäßig können Sie IIS Express verwenden, um Ihre Website mit einem nicht reservierten Port wie 8080 auszuführen. Einen reservierten Port wie 80 oder 443 zu verwenden, ist jedoch mit Aufwand verbunden. In den nachstehend beschriebenen Schritten wird davon ausgegangen, dass Sie den lokalen Datenverkehr über Port 80 unterstützen möchten.

Führen Sie unter Windows 7 oder Windows Vista an einer Eingabeaufforderung mit erhöhten Rechten den folgenden Befehl aus:

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

Mit diesem Befehl kann die Anwendung eines beliebigen Benutzers (einschließlich Ihrer eigenen IIS Express-Instanzen) mit Port 80 ausgeführt werden, ohne dass Administratorrechte erforderlich sind. Um diesen Zugriff auf sich selbst einzuschränken, ersetzen Sie „jeder“ durch Ihre Windows-Identität.

Unter Windows XP müssen Sie an einer Eingabeaufforderung mit erhöhten Rechten den folgenden Befehl ausführen:

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

Nachdem Sie HTTP.sys konfiguriert haben, können Sie Ihre Website so konfigurieren, dass Port 80 verwendet wird. Mit Tools wie WebMatrix und Visual Studio 2010 SP1 Beta ist dies sehr einfach. Sie können die Datei applicationhost.config auch manuell bearbeiten, um die folgende Bindung in das Sites-Element aufzunehmen.

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

Ihre Website wird nun (lokal) mit Port 80 ausgeführt.

Wenn Sie mit dem Testen der Anwendung fertig sind, sollten Sie die Einstellungen für HTTP.sys zurücksetzen.

Führen Sie unter Windows 7 oder Windows Vista an einer Eingabeaufforderung mit erhöhten Rechten den folgenden Befehl aus:

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

Führen Sie unter Windows XP an einer Eingabeaufforderung mit erhöhten Rechten den folgenden Befehl aus:

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

Verarbeiten von externem Datenverkehr

Damit Ihre Website externen Datenverkehr verarbeiten kann, müssen Sie HTTP.sys und die Firewall Ihres Computers konfigurieren. In den nachstehend beschriebenen Schritten wird davon ausgegangen, dass externer Datenverkehr unter Port 8080 verarbeitet wird.

Die Schritte zum Konfigurieren von HTTP.sys für externen Datenverkehr ähneln dem Einrichten einer Site für die Verwendung eines reservierten Ports. Führen Sie unter Windows 7 oder Windows Vista an einer Eingabeaufforderung mit erhöhten Rechten den folgenden Befehl aus:

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

Führen Sie unter Windows XP an einer Eingabeaufforderung mit erhöhten Rechten den folgenden Befehl aus:

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

Nachdem Sie HTTP.sys konfiguriert haben, können Sie IIS Express mithilfe von WebMatrix oder Visual Studio 2010 SP1 Beta, oder durch Bearbeiten der Datei applicationhost.config zur Aufnahme der folgenden Bindung im Sites-Element so konfigurieren, dass Port 80 verwendet wird. (Ersetzen Sie myhostname durch den Domänennamen Ihres Computers).

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

Außerdem müssen Sie die Firewall so konfigurieren, dass externer Datenverkehr über Port 8080 fließen kann. Die Schritte variieren je nach verwendeter Firewall, und werden hier nicht beschrieben.

Wenn Sie mit dem Testen der Anwendung fertig sind, sollten Sie die Einstellungen für HTTP.sys zurücksetzen.

Führen Sie unter Windows 7 oder Windows Vista an einer Eingabeaufforderung mit erhöhten Rechten den folgenden Befehl aus:

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

Führen Sie unter Windows XP an einer Eingabeaufforderung mit erhöhten Rechten den folgenden Befehl aus:

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

Verwenden eines benutzerdefinierten SSL-Ports

Wenn Sie den SSL-Zugriff auf Ihre Site testen möchten, können Sie dies mit IIS Express tun, indem Sie einen SSL-Port zwischen 44300 und 44399 und das selbstsignierte IIS Express-Zertifikat verwenden. Der Versuch, SSL mit einem Port außerhalb dieses Bereichs zu verwenden, führt zu einem URL-Bindungsfehler, wenn Ihre Website unter IIS Express gestartet wird.

Allgemeine Anweisungen zum Konfigurieren von HTTP.sys zur Unterstützung von SSL finden Sie unter Vorgehensweise: Konfigurieren eines Ports mit einem SSL-Zertifikat. Stellen Sie sich als Beispiel vor, dass Sie Ihre Website mit der URL https://localhost:443 testen möchten.

Ermitteln Sie zunächst den SHA1-Fingerabdruck für das selbstsignierte IIS Express-Zertifikat. Dieser Fingerabdruck unterscheidet sich für jeden Computer, da das IIS Express-Setupprogramm bei Ausführung ein neues Zertifikat generiert. Sie können den SHA1-Fingerabdruck mithilfe des MMC-Zertifikat-Snap-Ins (Microsoft Management Console) ermitteln, indem Sie sich den persönlichen Zertifikatspeicher des Computers ansehen. Alternativ können Sie wie unten dargestellt das .NET-Hilfsprogramm CertMgr.exe verwenden. Geben Sie an einer Eingabeaufforderung den folgenden Befehl ein.

certmgr.exe /c /s /r localMachine MY

Mit diesem Befehl werden Informationen zu allen Zertifikaten im persönlichen Zertifikatspeicher des lokalen Computers angezeigt. Suchen Sie in der Ausgabe nach „IIS Express Development Certificate“, um das selbstsignierte IIS Express-Zertifikat zu finden, und achten Sie dann auf den SHA1-Fingerabdruck.

Konfigurieren Sie als Nächstes HTTP.sys, um das selbstsignierte Zertifikat der URL zuzuordnen. Erstellen Sie unter Windows 7 oder Windows Vista zunächst mit uuidgen.exe oder einem anderen Tool eine eindeutige UUID. Führen Sie dann den folgenden Befehl an einer Eingabeaufforderung mit erhöhten Rechten aus, und übergeben Sie damit den Fingerabdruck an den certhash-Parameter. (Verzichten Sie auf Leerzeichen, wenn Sie den Fingerabdruck angeben.)

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

Übergeben Sie für den Parameter „appid“ die eindeutige UUID, die Sie zuvor erstellt haben.

Führen Sie unter Windows XP an einer Eingabeaufforderung mit erhöhten Rechten den folgenden Befehl aus.

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

Da 443 ein reservierter Port ist, müssen Sie zusätzlich HTTP.sys so konfigurieren, dass IIS Express ihn während der Ausführung als Standardbenutzer verwenden kann. Ausführliche Informationen finden Sie im Abschnitt „Verwenden eines reservierten Ports“. Wenn Sie einen nicht reservierten benutzerdefinierten SSL-Port wie 44500 verwenden, müssen Sie diesen Schritt nicht ausführen.

Führen Sie unter Windows 7 oder Windows Vista an einer Eingabeaufforderung mit erhöhten Rechten den folgenden Befehl aus.

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

Führen Sie unter Windows XP an einer Eingabeaufforderung mit erhöhten Rechten den folgenden Befehl aus.

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

Nachdem Sie HTTP.sys konfiguriert haben, konfigurieren Sie Ihre Website so, dass sie den benutzerdefinierten SSL-Port mithilfe von WebMatrix oder Visual Studio 2010 SP1 Beta verwendet, oder fügen Sie die folgende Bindung im Siteselement in der Datei applicationhost.config hinzu.

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

Wenn Sie mit dem Testen der Website fertig sind, sollten Sie die Einstellungen für HTTP.sys zurücksetzen. Führen Sie unter Windows 7 oder Windows Vista an einer Eingabeaufforderung mit erhöhten Rechten die folgenden Befehle aus:

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

Führen Sie unter Windows XP an einer Eingabeaufforderung mit erhöhten Rechten die folgenden Befehle aus:

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

Verwenden eines benutzerdefinierten SSL-Zertifikats

Das Einrichten eines benutzerdefinierten SSL-Zertifikats ähnelt dem Verwenden eines benutzerdefinierten SSL-Ports. In den in diesem Abschnitt beschriebenen Schritten wird davon ausgegangen, dass Ihre Website bereits lokalen SSL-Datenverkehr mit Port 44300 und dem selbstsignierten IIS Express-Zertifikat verarbeitet.

Zunächst müssen Sie das benutzerdefinierte SSL-Zertifikat auf Ihrem Computer installieren. Verwenden Sie das MMC-Zertifikat-Snap-In oder CertMgr.exe. Beachten Sie beim Installieren des Zertifikats den Wert des SHA1-Fingerabdrucks.

Die URL https://localhost:44300 ist vom IIS Express-Setup so vorkonfiguriert, dass sie ein selbstsigniertes Zertifikat verwendet. Um diese URL an Ihr benutzerdefiniertes Zertifikat zu binden, müssen Sie die vorhandene Zuordnung löschen. Überspringen Sie diesen Schritt, wenn Ihr Hostname und Ihre Portkombination keinem SSL-Zertifikat zugeordnet ist.

Führen Sie unter Windows 7 oder Windows Vista an einer Eingabeaufforderung mit erhöhten Rechten den folgenden Befehl aus:

netsh http delete sslcert ipport=0.0.0.0:44300

Führen Sie unter Windows XP an einer Eingabeaufforderung mit erhöhten Rechten den folgenden Befehl aus:

httpcfg delete ssl –i 0.0.0.0:44300

Die verbleibenden Schritte ähneln denen zum Konfigurieren eines benutzerdefinierten SSL-Ports. Erstellen Sie mit uuidgen.exe oder einem anderen Tool eine eindeutige UUID.

Führen Sie unter Windows 7 oder Windows Vista an einer Eingabeaufforderung mit erhöhten Rechten den folgenden Befehl aus, um damit den Fingerabdruck Ihrer benutzerdefinierten Zertifikate (entfernen Sie dabei alle Leerzeichen) an den certhash-Parameter und Ihre UUID zu übergeben.

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

Führen Sie unter Windows XP an einer Eingabeaufforderung mit erhöhten Rechten den folgenden Befehl aus.

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

Zusammenfassung

In diesem Artikel werden die Schritte erläutert, die erforderlich sind, um einige Szenarien für IIS Express zu unterstützen, die standardmäßig nicht aktiviert sind. Um diese auszuführen, müssen Sie ein Administrator sein. Auch wenn Sie nicht über Administratorrechte verfügen, können Sie dennoch die gängigsten Webdesign- und Entwicklungsaufgaben mit IIS Express als Standardbenutzer ausführen.