Nicht unterstützte SzenarienUnsupported Scenarios

Aus verschiedenen Gründen unterstützt der Windows Communication Foundation (WCF) einige bestimmte Sicherheitsszenarien nicht.For various reasons, Windows Communication Foundation (WCF) does not support some specific security scenarios. Beispielsweise Windows XPWindows XP Home Edition die SSPI- oder Kerberos-Authentifizierungsprotokolle nicht implementiert und daher WCF unterstützt keine Ausführung eines Diensts mit Windows-Authentifizierung auf dieser Plattform.For example, Windows XPWindows XP Home Edition does not implement the SSPI or Kerberos authentication protocols, and therefore WCF does not support running a service with Windows authentication on that platform. Andere Authentifizierungsmechanismen, beispielsweise Benutzername/Kennwort und HTTP/HTTPS-integrierte Authentifizierung werden unterstützt, wenn WCF unter Windows XP Home Edition ausgeführt wird.Other authentication mechanisms, such as username/password and HTTP/HTTPS integrated authentication are supported when running WCF under Windows XP Home Edition.

IdentitätswechselszenarienImpersonation Scenarios

Keine Weitergabe der gewechselten Identität bei asynchronen Aufrufen am ClientImpersonated Identity Might Not Flow When Clients Make Asynchronous Calls

Wenn ein WCF-Client unter Verwendung der Windows-Authentifizierung mit einem Identitätswechsel asynchrone Aufrufe eines WCF-Dienstes ausführt, kann die Authentifizierung mit der Identität des Clientprozesses anstelle der gewechselten Identität erfolgen.When a WCF client makes asynchronous calls to a WCF service using Windows authentication under impersonation, authentication might occur with the identity of the client process instead of the impersonated identity.

WCF unterstützt keinen Identitätswechsel und ein InvalidOperationException wird ausgelöst, wenn folgende Bedingungen zutreffen:WCF does not support impersonation and an InvalidOperationException is thrown when the following conditions exist:

  • Das Betriebssystem ist Windows XPWindows XP.The operating system is Windows XPWindows XP.

  • Der Authentifizierungsmodus ruft eine Windows-Identität hervor.The authentication mode results in a Windows identity.

  • Die Impersonation-Eigenschaft von OperationBehaviorAttribute wird auf Required festgelegt.The Impersonation property of the OperationBehaviorAttribute is set to Required.

  • Ein statusbasiertes Sicherheitszustandskontexttoken (SCT) wird erstellt. (Standardmäßig ist die Erstellung deaktiviert.)A state-based security context token (SCT) is created (by default, creation is disabled).

Das statusbasierte SCT kann nur mit einer benutzerdefinierten Bindung erstellt werden.The state-based SCT can only be created using a custom binding. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen Sie ein Sicherheitskontexttoken für eine Sicherheitssitzung.) Im Code wird das Token aktiviert, indem ein Sicherheitsbindungselement erstellt wird (SymmetricSecurityBindingElement oder AsymmetricSecurityBindingElement), wobei die SecurityBindingElement.CreateSspiNegotiationBindingElement(Boolean)-Methode oder die SecurityBindingElement.CreateSecureConversationBindingElement(SecurityBindingElement, Boolean)-Methode verwendet wird und der requireCancellation-Parameter auf false festgelegt wird.For more information, see How to: Create a Security Context Token for a Secure Session.) In code, the token is enabled by creating a security binding element (either SymmetricSecurityBindingElement or AsymmetricSecurityBindingElement) using the SecurityBindingElement.CreateSspiNegotiationBindingElement(Boolean) or the SecurityBindingElement.CreateSecureConversationBindingElement(SecurityBindingElement, Boolean) method and setting the requireCancellation parameter to false. Der Parameter bezieht sich auf die Zwischenspeicherung des SCT.The parameter refers to the caching of the SCT. Wenn Sie den Wert auf false festlegen, wird die statusbasierte SCT-Funktion aktiviert.Setting the value to false enables the state-based SCT feature.

Alternativ können Sie in der Konfiguration, das Token aktiviert, durch das Erstellen einer <customBinding>, dann hinzufügen eine <security>-Element und das Festlegen der authenticationMode SecureConversation-Attribut und die requireSecurityContextCancellation -Attribut auf true.Alternatively, in configuration, the token is enabled by creating a <customBinding>, then adding a <security> element, and setting the authenticationMode attribute to SecureConversation and the requireSecurityContextCancellation attribute to true.

Hinweis

Die zuvor genannten Anforderungen sind spezifisch.The preceding requirements are specific. Beispielsweise erstellt das CreateKerberosBindingElement ein Bindungselement, das zu einer Windows-Identität führt, wobei aber kein SCT eingerichtet wird.For example, the CreateKerberosBindingElement creates a binding element that results in a Windows identity, but does not establish an SCT. Sie können es daher mit der Required-Option unter Windows XPWindows XP verwenden.Therefore, you can use it with the Required option on Windows XPWindows XP.

Möglicher ASP.NET-KonfliktPossible ASP.NET Conflict

WCF und ASP.NETASP.NET können beide aktivieren oder deaktivieren Sie den Identitätswechsel.WCF and ASP.NETASP.NET can both enable or disable impersonation. Wenn ASP.NETASP.NET hostet eine WCF-Anwendung möglicherweise ein Konflikt zwischen dem WCF vorhanden und ASP.NETASP.NET Konfigurationseinstellungen.When ASP.NETASP.NET hosts an WCF application, a conflict may exist between the WCF and ASP.NETASP.NET configuration settings. Bei einem Konflikt hat die WCF-Einstellung Vorrang, es sei denn, die Impersonation -Eigenschaftensatz auf NotAllowed, in diesem Fall die ASP.NETASP.NET -identitätswechseleinstellung Vorrang.In case of conflict, the WCF setting takes precedence, unless the Impersonation property is set to NotAllowed, in which case the ASP.NETASP.NET impersonation setting takes precedence.

Assembly-Ladevorgänge können beim Identitätswechsel fehlschlagenAssembly Loads May Fail Under Impersonation

Wenn der Identitätswechselkontext keine Zugriffsberechtigungen zum Laden einer Assembly hat und es das erste Mal ist, dass die Common Language Runtime (CLR) versucht, die Assembly für diese Anwendungsdomäne zu laden, speichert die AppDomain den Fehler zwischen.If the impersonated context does not have access rights to load an assembly and if it is the first time the common language runtime (CLR) is attempting to load the assembly for that AppDomain, the AppDomain caches the failure. Nachfolgende Versuche, diese Assembly(s) zu laden, schlagen fehl, selbst nach dem Zurücksetzen des Identitätswechsels und sogar wenn der zurückgesetzte Kontext die Zugriffsberechtigungen hat, die Assembly zu laden.Subsequent attempts to load that assembly (or assemblies) fail, even after reverting the impersonation, and even if the reverted context has access rights to load the assembly. Die Ursache dafür ist, dass die CLR nach der Änderung des Benutzerkontextes keinen weiteren Ladeversuch unternimmt.This is because the CLR does not re-attempt the load after the user context is changed. Sie müssen die Anwendungsdomäne neu starten, um nach dem Fehler wiederhergestellt zu werden.You must restart the application domain to recover from the failure.

Hinweis

Der Standardwert für die AllowedImpersonationLevel-Eigenschaft der WindowsClientCredential-Klasse ist Identification.The default value for the AllowedImpersonationLevel property of the WindowsClientCredential class is Identification. In den meisten Fällen hat ein Identitätswechsel auf Identifizierungsebene nicht die Berechtigung, zusätzliche Assemblys zu laden.In most cases, an identification-level impersonation context has no rights to load any additional assemblies. Dies ist der Standardwert. Es handelt sich somit um eine sehr übliche Bedingung, derer Sie sich bewusst sein sollten.This is the default value, so this is a very common condition to be aware of. Der Identitätswechsel auf Identifizierungsebene kann auch dann auftreten, wenn der Identitätswechselvorgang nicht die SeImpersonate-Berechtigung hat.Identification-level impersonation also occurs when the impersonating process does not have the SeImpersonate privilege. Weitere Informationen finden Sie unter Delegierung und Identitätswechsel.For more information, see Delegation and Impersonation.

Delegierung erfordert eine Anmeldeinformationen-AushandlungDelegation Requires Credential Negotiation

Um das Kerberos-Authentifizierungsprotokoll mit Delegierung zu verwenden, müssen Sie das Kerberos-Protokoll mit Anmeldeinformationen-Aushandlung (mitunter als bilaterales oder mehrstufiges Kerberos bezeichnet) implementieren.To use the Kerberos authentication protocol with delegation, you must implement the Kerberos protocol with credential negotiation (sometimes called multi-leg or multi-step Kerberos). Wenn Sie die Kerberos-Authentifizierung ohne Anmeldeinformationen-Aushandlung (mitunter als One-Shot-Kerberos bezeichnet) implementieren, wird eine Ausnahme ausgelöst.If you implement Kerberos authentication without credential negotiation (sometimes called one-shot or single-leg Kerberos), an exception is thrown. Weitere Informationen über das Anmeldeinformationen-Aushandlung zu implementieren, finden Sie unter Debuggen von Windows-Authentifizierungsfehlern.For more information about how to implement credential negotiation, see Debugging Windows Authentication Errors.

KryptografieCryptography

Unterstützt HA-256 nur für den Einsatz mit symmetrischen SchlüsselnSHA-256 Supported Only for Symmetric Key Usages

WCF unterstützt eine Vielzahl von Verschlüsselung und Signatur Digest-erstellungsalgorithmen, die Sie mit der algorithmussuite in den vom System bereitgestellte Bindungen festlegen können.WCF supports a variety of encryption and signature digest creation algorithms that you can specify using the algorithm suite in the system-provided bindings. Für eine höhere Sicherheit unterstützt WCF Secure Hash Algorithm (SHA) 2-Algorithmen, vor allem SHA-256, für die Erstellung von Signatur-Digest-Hashes.For improved security, WCF supports Secure Hash Algorithm (SHA) 2 algorithms, specifically SHA-256, for creating signature digest hashes. Dieses Release unterstützt SHA-256 nur für Einsätze mit symmetrischen Schlüsseln, z. B. Kerberos-Schlüssel und wenn kein X.509-Zertifikat zum Signieren der Nachricht verwendet wird.This release supports SHA-256 only for symmetric key usages, such as Kerberos keys, and where an X.509 certificate is not used to sign the message. WCF unterstützt keine RSA-Signaturen (in x. 509-Zertifikaten) mit SHA-256-Hash aufgrund des aktuellen fehlenden Supports für RSA-SHA256 in der WinFXWinFX.WCF does not support RSA signatures (used in X.509 certificates) using SHA-256 hash due to the current lack of support for RSA-SHA256 in the WinFXWinFX.

FIPS-kompatible SHA-256-Hashes werden nicht unterstütztFIPS-Compliant SHA-256 Hashes not Supported

WCF unterstützt keine SHA256 FIPS-kompatiblen Hashes, sodass algorithmussammlungen, die SHA-256 verwenden, von WCF auf Systemen nicht unterstützt werden, in denen Einsatz von FIPS-kompatiblen Algorithmen erforderlich ist.WCF does not support SHA-256 FIPS-compliant hashes, so algorithm suites that use SHA-256 are not supported by WCF on systems where use of FIPS compliant algorithms is required.

FIPS-kompatible Algorithmen schlagen ggf. fehl, wenn die Registrierung bearbeitet wirdFIPS-Compliant Algorithms May Fail if Registry Is Edited

Sie können Federal Information Processing Standards (FIPS)-kompatible Algorithmen aktivieren und deaktivieren, indem Sie das Snap-In Lokale Sicherheitseinstellungen der Microsoft Management Console (MMC) verwenden.You can enable and disable Federal Information Processing Standards (FIPS)-compliant algorithms by using the Local Security Settings Microsoft Management Console (MMC) snap-in. Sie können auch auf die Einstellung in der Registrierung zugreifen.You can also access the setting in the registry. Beachten Sie jedoch, dass WCF mithilfe der Registrierung zum Zurücksetzen der Einstellung nicht unterstützt.Note, however, that WCF does not support using the registry to reset the setting. Wenn ein anderer Wert als 1 oder 0 festgelegt wurde, können zwischen CLR und dem Betriebssystem inkonsistente Ergebnisse auftreten.If the value is set to anything other than 1 or 0, inconsistent results can occur between the CLR and the operating system.

FIPS-kompatible AES-VerschlüsselungseinschränkungenFIPS-Compliant AES Encryption Limitation

Die FIPS-kompatible AES-Verschlüsselung funktioniert nicht bei Duplexrückrufen unter dem Identitätswechsel auf Identifizierungsebene.FIPS compliant AES encryption does not work in duplex callbacks under identification level impersonation.

CNG/KSP-ZertifikateCNG/KSP Certificates

Kryptografie-API: Next Generation (CNG) ist der langfristige Ersatz für CryptoAPI.Cryptography API: Next Generation (CNG) is the long-term replacement for the CryptoAPI. Diese API ist verfügbar in nicht verwaltetem Code auf Windows VistaWindows Vista, Windows Server 2008Windows Server 2008 und höheren Versionen von Windows.This API is available in unmanaged code on Windows VistaWindows Vista, Windows Server 2008Windows Server 2008 and later Windows versions.

.NET Framework 4.6.1 und früheren Versionen unterstützen nicht diese Zertifikate, da sie die ältere CryptoAPI zum Behandeln von CNG/KSP-Zertifikate verwenden..NET Framework 4.6.1 and earlier versions do not support these certificates because they use the legacy CryptoAPI to handle CNG/KSP certificates. Die Verwendung dieser Zertifikate mit .NET Framework 4.6.1 und früheren Versionen wird eine Ausnahme ausgelöst.The use of these certificates with .NET Framework 4.6.1 and earlier versions will cause an exception.

Ob KSP von einem Zertifikat verwendet wird, kann auf zwei Arten ermittelt werden:There are two possible ways to tell if a certificate uses KSP:

  • Führen Sie p/invoke für die CertGetCertificateContextProperty aus, und überprüfen Sie dwProvType in der zurückgegebenen CertGetCertificateContextProperty.Do a p/invoke of CertGetCertificateContextProperty, and inspect dwProvType on the returned CertGetCertificateContextProperty.

  • Verwenden der certutil Befehl über die Befehlszeile zum Abfragen von Zertifikaten.Use the certutil command from the command line for querying certificates. Weitere Informationen finden Sie unter Aufgaben von Certutil für die Problembehandlung bei Zertifikaten.For more information, see Certutil tasks for troubleshooting certificates.

Nachrichtensicherheit schlägt fehlt, wenn der ASP.NET-Identitätswechsel verwendet wird und die ASP.NET-Kompatibilität erforderlich istMessage Security Fails if Using ASP.NET Impersonation and ASP.NET Compatibility Is Required

WCF unterstützt nicht die folgende Kombination von Einstellungen, da sie Clientauthentifizierung verhindern verhindern können:WCF does not support the following combination of settings because they can prevent client authentication from occurring:

  • ASP.NETASP.NET-Identitätswechsel ist aktiviert. Impersonation is enabled. Dazu wird in der Datei "Web.config" Festlegen der impersonate Attribut von der <identity>-Element true.This is done in the Web.config file by setting the impersonate attribute of the <identity> element to true.

  • ASP.NETASP.NET Kompatibilitätsmodus ist aktiviert, indem die aspNetCompatibilityEnabled Attribut von der <ServiceHostingEnvironment > auf true. compatibility mode is enabled by setting the aspNetCompatibilityEnabled attribute of the <serviceHostingEnvironment> to true.

  • Die Nachrichtenmodussicherheit wird verwendet.Message mode security is used.

Sie können alternativ auch den ASP.NETASP.NET-Kompatibilitätsmodus deaktivieren.The work-around is to turn off the ASP.NETASP.NET compatibility mode. Oder, wenn die ASP.NETASP.NET -Kompatibilitätsmodus erforderlich ist, deaktivieren Sie die ASP.NETASP.NET Identitätswechsel feature und verwenden Sie stattdessen den bereitgestellten WCF Identitätswechsel.Or, if the ASP.NETASP.NET compatibility mode is required, disable the ASP.NETASP.NET impersonation feature and use WCF-provided impersonation instead. Weitere Informationen finden Sie unter Delegierung und Identitätswechsel.For more information, see Delegation and Impersonation.

IPv6-Literal-AdressfehlerIPv6 Literal Address Failure

Bei Sicherheitsanforderungen tritt ein Fehler auf, wenn sich Client und Dienst auf dem gleichen Computer befinden und für den Dienst IPv6-Literaladressen verwendet werden.Security requests fail when the client and service are on the same machine, and IPv6 literal addresses are used for the service.

IPv6-Literal-Adressen funktionieren, wenn der Dienst und der Client sich auf unterschiedlichen Computern befinden.Literal IPv6 addresses work if the service and client are on different machines.

WSDL-Abruffehler bei VerbundvertrauenWSDL Retrieval Failures with Federated Trust

WCF erfordert genau ein WSDL-Dokument für jeden Knoten in der Vertrauenskette des Verbunds.WCF requires exactly one WSDL document for each node in the federated trust chain. Achten Sie darauf, beim Angeben von Endpunkten keine Schleife einzurichten.Be careful not to set up a loop when specifying endpoints. Eine Schleife kann beispielsweise bei Verwendung eines WSDL-Downloads von Vertrauensketten des Verbunds entstehen, wenn das gleiche WSDL-Dokument mehrere Links enthält.One way in which loops can arise is using a WSDL download of federated trust chains with two or more links in the same WSDL document. Ein häufig auftretendes Szenario für dieses Problem ist ein Verbunddienst, bei dem sich der Sicherheitstokenserver und der Dienst im gleichen ServiceHost befinden.A common scenario that can produce this problem is a federated service where the Security Token Server and the service are contained inside the same ServiceHost.

Ein Beispiel für diese Situation ist ein Dienst mit den folgenden drei Endpunktadressen:An example of this situation is a service with the following three endpoint addresses:

Dadurch wird eine Ausnahme ausgelöst.This throws an exception.

Verlegen Sie den issue_ticket-Endpunkt, damit dieses Szenario funktioniert.You can make this scenario work by putting the issue_ticket endpoint elsewhere.

WSDL-Importattribute können verloren werdenWSDL Import Attributes can be Lost

WCF kann die Attribute eines <wst:Claims>-Elements in einer RST-Vorlage beim Ausführen eines WSDL-Imports nicht nachverfolgen.WCF loses track of the attributes on a <wst:Claims> element in an RST template when doing a WSDL import. Dieses Problem tritt im Zuge eines WSDL-Importvorgangs auf, wenn <Claims> direkt inWSFederationHttpBinding.Security.Message.TokenRequestParameters oder inIssuedSecurityTokenRequestParameters.AdditionalRequestParameters und nicht unter direkter Verwendung der Anspruchstypauflistungen angegeben werden.This happens during a WSDL import if you specify <Claims> directly in WSFederationHttpBinding.Security.Message.TokenRequestParameters or IssuedSecurityTokenRequestParameters.AdditionalRequestParameters instead of using the claim type collections directly. Da die Attribute beim Importieren verloren gehen, verläuft der Roundtrip der Bindung durch WSDL nicht ordnungsgemäß, und die Bindung ist auf der Clientseite ungültig.Since the import loses the attributes, the binding does not round trip properly through WSDL and hence is incorrect on the client side.

Ändern Sie nach Abschluss des Importvorgangs die Bindung direkt auf dem Client, um dieses Problem zu korrigieren.The fix is to modify the binding directly on the client after doing the import.

Siehe auchSee Also

SicherheitsüberlegungenSecurity Considerations
Offenlegung vertraulicher InformationenInformation Disclosure
Erhöhen der BerechtigungenElevation of Privilege
Denial-of-Service-AngriffeDenial of Service
ManipulationTampering
ReplayangriffeReplay Attacks