Änderungen an der NTLM-Authentifizierung für „HttpWebRequest“ in Version 3.5 SP1Changes to NTLM authentication for HttpWebRequest in Version 3.5 SP1

Es wurden Sicherheitsänderungen in .NET Framework Version 3.5 SP1 und höher vorgenommen, die beeinflussen, wie die integrierte Windows-Authentifizierung durch HttpWebRequest, HttpListener, NegotiateStream und verwandte Klassen im System.Net-Namespace behandelt wird.Security changes were made in .NET Framework version 3.5 SP1 and later that affect how integrated Windows authentication is handled by the HttpWebRequest, HttpListener, NegotiateStream, and related classes in the System.Net namespace. Diese Änderungen können sich auf Anwendungen auswirken, die diese Klassen für Webanforderungen und den Empfang der Antworten verwenden, in denen die integrierte Windows-Authentifizierung auf NTLM-Basis verwendet wird.These changes can affect applications that use these classes to make web requests and receive responses where integrated Windows authentication based on NTLM is used. Die Änderung kann sich auf Webserver und Clientanwendungen auswirken, die für die Verwendung der integrierten Windows-Authentifizierung konfiguriert sind.This change can impact web servers and client applications that are configured to use integrated Windows authentication.

ÜbersichtOverview

Durch die Gestaltung der integrierten Windows-Authentifizierung sind einige Abfragerückmeldungen zu Anmeldeinformationen universell, d.h., sie können wiederverwendet oder weitergeleitet werden.The design of integrated Windows authentication allows for some credential responses to be universal, meaning they can be re-used or forwarded. Wenn diese bestimmte Entwurfsfunktion nicht erforderlich ist, müssen die Authentifizierungsprotokolle zielspezifische Informationen sowie bestimmte Kanalinformationen enthalten.If this particular design feature is not needed, then the authentication protocols should carry target specific information as well as channel specific information. Der erweiterte Schutz kann dann von Diensten bereitgestellt werden, damit Abfragerückmeldungen zu Anmeldeinformationen auch sicher dienstspezifische Informationen, wie z.B. einen Dienstprinzipalnamen (SPN), enthalten.Services can then provide extended protection to ensure that credential responses contain service specific information such as a Service Principal Name (SPN). Enthält der Austausch von Anmeldedaten diese Informationen, können die Dienste besser vor einer böswilligen Verwendung von Abfragerückmeldungen geschützt werden, die möglicherweise nicht ordnungsgemäß verwendet wurden.With this information in the credential exchanges, services are able to better protect against malicious use of credential responses that might have been improperly obtained.

Mehrere Komponenten der Namespaces System.Net und System.Net.Security führen die integrierte Windows-Authentifizierung für eine aufrufende Anwendung aus.Multiple components in the System.Net and System.Net.Security namespaces perform integrated Windows authentication on behalf of a calling application. In diesem Abschnitt werden die erforderlichen Änderungen an System.Net-Komponenten beschrieben, um den erweiterten Schutz ihrer Verwendung der integrierten Windows-Authentifizierung hinzuzufügen.This section describes changes to System.Net components to add extended protection in their use of integrated Windows authentication.

ÄnderungenChanges

Der bei der integrierten Windows-Authentifizierung verwendete NTLM-Authentifizierungsvorgang enthält eine Abfrage, die vom Zielcomputer ausgegeben und an den Clientcomputer zurückgesendet wird.The NTLM authentication process used with integrated Windows authentication includes a challenge issued by the destination computer and sent back to the client computer. Wenn ein Computer eine Abfrage erhält, die er selbst generiert hat, schlägt die Authentifizierung fehl, es sei denn, es handelt sich um eine Schleife (z.B. IPv4-Adresse 127.0.0.1).When a computer receives a challenge it generated itself, the authentication will fail unless the connection is a loop back connection (IPv4 address 127.0.0.1, for example).

Beim Zugriff auf einen Dienst, der auf einem internen Webserver ausgeführt wird, ist es üblich, mithilfe einer URL ähnlich wie http://contoso/service oder https://contoso/service auf den Dienst zuzugreifen.When accessing a service running on an internal Web server, it is common to access the service using a URL similar to http://contoso/service or https://contoso/service. Der Name „Contoso“ ist häufig nicht der Computername des Computers, auf dem der Dienst bereitgestellt wird.The name "contoso" is often not the computer name of the computer on which the service is deployed. Die System.Net und zugehörigen Namespaces unterstützen, mithilfe von Active Directory, DNS, NetBIOS, die Hostdatei des lokalen Computers (in der Regel beispielsweise WINDOWS\system32\drivers\etc\hosts) oder die die LmHostdatei des lokalen Computers (in der Regel beispielsweise WINDOWS\system32\drivers\etc\lmhosts) zum Auflösen von Namen zu Adressen.The System.Net and related namespaces support using Active Directory, DNS, NetBIOS, the local computer's hosts file (typically WINDOWS\system32\drivers\etc\hosts, for example), or the local computer's lmhosts file (typically WINDOWS\system32\drivers\etc\lmhosts, for example) to resolve names to addresses. Der Name „Contoso“ wird aufgelöst, sodass an „Contoso“ gesendete Anforderungen an den entsprechenden Servercomputer gesendet werden.The name "contoso" is resolved so that requests sent to "contoso" are sent to the appropriate server computer.

Bei der Konfiguration für große Bereitstellungen erhält die Bereitstellung mit dem zugrunde liegenden Computernamen, die nie von Clientanwendungen und Endbenutzern verwendet werden, in der Regel einen einzelnen virtuellen Servernamen.When configured for large deployments, it is also common for a single virtual server name to be given to the deployment with the underlying machine names never used by client applications and end users. Sie können den Server z.B. www.contoso.com nennen, jedoch in einem internen Netzwerk einfach „Contoso“ verwenden.For example, you might call the server www.contoso.com, but on an internal network simply use "contoso". Dieser Name ist der Hostheader in der Clientwebanforderung.This name is called the Host header in the client web request. Das Feld „Host-Anforderungsheader“ gibt gemäß dem HTTP-Protokoll den Internet-Host und die Portanzahl der angeforderten Ressource an.As specified by the HTTP protocol, the Host request-header field specifies the Internet host and port number of the resource being requested. Diese Information wird aus dem ursprünglichen URI abgerufen, der vom Benutzer oder der Referenzressource (in der Regel eine HTTP-URL) angegeben wird.This information is obtained from the original URI given by the user or referring resource (generally an HTTP URL). Auf .NET Framework, Version 4, können diese Informationen auch vom Client mit der neuen Host-Eigenschaft festgelegt werden.On .NET Framework version 4, this information can also be set by the client using the new Host property.

Die AuthenticationManager-Klasse steuert die verwalteten Authentifizierungskomponenten („Module“), die von abgeleiteten WebRequest-und den WebClient-Klassen verwendet werden.The AuthenticationManager class controls the managed authentication components ("modules") that are used by WebRequest derivative classes and the WebClient class. Die AuthenticationManager-Klasse enthält eine Eigenschaft, die ein AuthenticationManager.CustomTargetNameDictionary-Objekt verfügbar macht, das von einer URI-Zeichenfolge indiziert ist, damit Anwendungen eine benutzerdefinierte SPN-Zeichenfolge bereitstellen können, die während der Authentifizierung verwendet wird.The AuthenticationManager class provides a property that exposes a AuthenticationManager.CustomTargetNameDictionary object, indexed by URI string, for applications to supply a custom SPN string to be used during authentication.

Version 3.5 SP1 gibt jetzt standardmäßig den Hostnamen in der Anforderungs-URL in der SPN im NTLM-Authentifizierungsaustausch (NT LAN Manager) an, wenn die CustomTargetNameDictionary-Eigenschaft nicht festgelegt ist.Version 3.5 SP1 now defaults to specifying the host name used in the request URL in the SPN in the NTLM (NT LAN Manager) authentication exchange when the CustomTargetNameDictionary property is not set. Der Hostname in der Anforderungs-URL kann vom in System.Net.HttpRequestHeader in der Clientanforderung angegebenen Hostheader abweichen.The host name used in the request URL may be different from the Host header specified in the System.Net.HttpRequestHeader in the client request. Der Hostname in der Anforderungs-URL kann vom tatsächlichen Hostnamen des Servers, dem Computernamen des Servers, der IP-Adresse des Computers oder der Loopbackadresse abweichen.The host name used in the request URL may be different from the actual host name of the server, the machine name of the server, the computer's IP address, or the loopback address. In diesen Fällen schlägt die Authentifizierungsanforderung in Windows fehl.In these cases, Windows will fail the authentication request. Um das Problem zu beheben, müssen wir Windows benachrichtigen, dass der Hostname in der Anforderungs-URL in der Client-Anforderung (z.B. „Contoso“) tatsächlich ein alternativer Name für den lokalen Computer ist.To address the issue, we need to notify Windows that the host name used in the request URL in the client request ("contoso", for example) is actually an alternate name for the local computer.

Es gibt mehrere Methoden, mit denen eine Serveranwendung diese Änderung umgehen kann.There are several possible methods for a server application to work around this change. Die empfohlene Vorgehensweise ist, den Hostnamen in der Anforderungs-URL zum BackConnectionHostNames-Schlüssel in der Registrierung auf dem Server zuzuordnen.The recommended approach is to map the host name used in the request URL to the BackConnectionHostNames key in the registry on the server. Der BackConnectionHostNames-Registrierungsschlüssel wird normalerweise verwendet, um einen Hostnamen einer Loopbackadresse zuzuordnen.The BackConnectionHostNames registry key is normally used to map a host name to a loopback address. Die Schritte sind unten aufgeführt.The steps are listed below.

Um die Hostnamen anzugeben, die der Loopbackadresse zugeordnet sind, und die mit Websites auf einem lokalen Computer verbunden werden können, gehen Sie folgendermaßen vor:To specify the host names that are mapped to the loopback address and can connect to Web sites on a local computer, follow these steps:

  1. Klicken Sie auf „Start“ und auf „Ausführen“, geben Sie „regedit“ ein, und klicken Sie anschließend auf „OK“.Click Start, click Run, type regedit, and then click OK.

  2. Suchen Sie im Registrierungs-Editor den folgenden Registrierungsschlüssel, und klicken Sie darauf:In Registry Editor, locate and then click the following registry key:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0

  3. Klicken Sie mit der rechten Maustaste auf „MSV1_0“, zeigen Sie auf „Neu“, und klicken Sie dann auf „Mehrteilige Zeichenfolge“.Right-click MSV1_0, point to New, and then click Multi-String Value.

  4. Geben Sie BackConnectionHostNames ein, und drücken Sie dann die EINGABETASTE.Type BackConnectionHostNames, and then press ENTER.

  5. Klicken Sie mit der rechten Maustaste auf BackConnectionHostNames, und klicken Sie dann auf „Bearbeiten“.Right-click BackConnectionHostNames, and then click Modify.

  6. Geben Sie im Feld „Wertdaten“ den Hostnamen oder die Hostnamen für die Standorte an (Hostname, der im Anforderungs-URL verwendet wird), die sich auf dem lokalen Computer befinden, und klicken Sie dann auf „OK“.In the Value data box, type the host name or the host names for the sites (the host name used in the request URL) that are on the local computer, and then click OK.

  7. Beenden Sie den Registrierungs-Editor, starten Sie den IISAdmin-Dienst neu, und führen Sie IISReset aus.Quit Registry Editor, and then restart the IISAdmin service and run IISReset.

Eine unsicherere Lösung ist die Deaktivierung der Loopbacküberprüfung, die in https://support.microsoft.com/kb/896861 beschrieben ist.A less secure work around is to disable the loop back check, as described in https://support.microsoft.com/kb/896861. Der Schutz vor Reflektionsangriffen wird somit deaktiviert.This disables the protection against reflection attacks. Daher ist es besser, den Satz von alternativen Namen auf jene einzuschränken, von denen Sie erwarten, dass sie tatsächlich vom Computer verwendet werden.So it is better to constrain the set of alternate names to only those you expect the machine to actually use.

Siehe auchSee also