Escenarios no admitidos
Por varias razones, Windows Communication Foundation (WCF) no admite algunos escenarios de seguridad concretos. Por ejemplo, Windows XP Home Edition no implementa los protocolos de autenticación SSPI o Kerberos y, por consiguiente, WCF no permite ejecutar un servicio con autenticación de Windows en esa plataforma. Se admiten otros mecanismos de autenticación, como el uso de nombre de usuario/contraseña y la autenticación HTTP/HTTPS integrada al ejecutar WCF en Windows XP Home Edition.
Escenarios de suplantación
Windows XP y cookie de token de contexto seguro habilitados
WCF no admite la suplantación. Se producirá una excepción InvalidOperationException en las siguientes condiciones:
- El sistema operativo es Windows XP.
- El modo de autenticación resulta en una identidad de Windows.
- La propiedad Impersonation de OperationBehaviorAttribute está establecida en Required.
- Se crea un token de contexto de seguridad (SCT) basado en estado (de forma predeterminada, la creación está deshabilitada).
El SCT basado en estado sólo se puede crear mediante un enlace personalizado. Para obtener más información, consulte Cómo: Crear un token de contexto de seguridad con estado para una sesión segura.) En código, el token se habilita mediante la creación de un elemento de enlace de seguridad ( SymmetricSecurityBindingElement o AsymmetricSecurityBindingElement) utilizando el método System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(System.Boolean) o System.ServiceModel.Channels.SecurityBindingElement.CreateSecureConversationBindingElement(System.ServiceModel.Channels.SecurityBindingElement,System.Boolean) y estableciendo el parámetro requireCancellation en false. El parámetro hace referencia al almacenamiento en caché del SCT. Al establecer el valor en false, se habilita la característica del SCT basado en estado.
De manera alternativa, en la configuración, el token se habilita mediante la creación de un <customBinding>, agregando a continuación un elemento <security> y estableciendo el atributo authenticationMode en SecureConversation y el atributo requireSecurityContextCancellation en true.
Nota
Los requisitos anteriores son específicos. Por ejemplo, CreateKerberosBindingElement crea un elemento de enlace que resulta en una identidad de Windows, pero no establece un SCT. Por consiguiente, puede utilizarlo con la opción Required en Windows XP.
Posible conflicto de ASP.NET
WCF y ASP.NET pueden habilitar o deshabilitar la suplantación. Cuando ASP.NET aloja una aplicación de WCF, puede producirse un conflicto entre WCF y los ajustes de configuración de ASP.NET. En caso de conflicto, el valor de WCF tiene preferencia, a menos que la propiedad Impersonation esté establecida en NotAllowed, en cuyo caso el valor de suplantación ASP.NET tiene preferencia.
Se puede producir un error en las cargas de ensamblado si se utiliza la suplantación
Si el contexto suplantado no tiene los derechos de acceso para cargar un ensamblado y si es la primera vez el Common Language Runtime (CLR) intenta cargar el ensamblado para ese Appdomain, el AppDomain almacena en memoria caché el error. Los siguientes intentos de cargar ese ensamblado (o ensamblados) producirán un error, incluso después de revertir la suplantación e incluso si el contexto revertido tiene derechos de acceso para cargar el ensamblado. Esto se debe a que CLR no vuelve a intentar la carga una vez que el contexto del usuario ha cambiado. Debe reiniciar el dominio de la aplicación para recuperarse del error.
Nota
El valor predeterminado de la propiedad AllowedImpersonationLevel de la clase WindowsClientCredential es Identification. En la mayoría de los casos, un contexto de suplantación del nivel de identificación no tiene derechos para cargar ensamblados adicionales. Éste es el valor predeterminado, por lo que esto se trata de una condición muy común a tener en cuenta. La suplantación del nivel de identificación también tiene lugar cuando el proceso de suplantación no tiene el privilegio SeImpersonate. Para obtener más información, consulte Delegación y suplantación con WCF.
La delegación requiere la negociación de las credenciales
Para utilizar el protocolo de autenticación Kerberos con la delegación, debe implementar el protocolo Kerberos con negociación de credenciales (a veces denominado Kerberos de autenticación mutua o de varios pasos). Si implementa la autenticación Kerberos sin negociación de credenciales (en ocasiones denominada Kerberos único o de fase única), se produce una excepción. Para obtener más información acerca de cómo implementar la negociación de credenciales, consulte Depuración de errores de autenticación de Windows.
Criptografía
SHA-256 compatible solo para usos de claves simétricas
WCF admite una variedad de algoritmos de creación de resúmenes de firma y cifrado que puede especificar utilizando el conjunto de algoritmos en los enlaces proporcionados por el sistema. Para una mayor seguridad, WCF admite algoritmos de hash seguro (SHA) 2, en concreto SHA-256, para crear los hash de resumen de firma. Esta versión sólo admite SHA-256 para usos de claves simétricas, como claves de Kerberos y donde un certificado X.509 no se utiliza para firmar el mensaje. WCF no admite las firmas de RSA (utilizadas en certificados X.509) que utilicen hash SHA-256 debido a la falta actual de compatibilidad para RSA-SHA256 en .NET Framework 3,0.
No se admiten hash SHA-256 conformes con FIPS
WCF no admite los hash que cumplen SHA-256 FIPS, por lo que WCF no admite los conjuntos de algoritmos que usan SHA-256 en sistemas donde se requiere el uso de algoritmos conformes con FIPS.
Los algoritmos conformes con FIPS pueden producir errores si se edita el registro
Puede habilitar y deshabilitar los algoritmos conformes con los estándares de procesamiento de información federal (FIPS) utilizando el complemento Microsoft Management Console (MMC) de configuración de seguridad local. También puede tener acceso al valor en el registro. Tenga en cuenta, sin embargo, que WCF no permite utilizar el registro para restablecer el valor. Si el valor está establecido en algo distinto de 1 ó 0, pueden producirse resultados incoherentes entre el CLR y el sistema operativo.
Limitación de cifrado AES conforme con FIPS
El cifrado AES conforme con FIPS no funciona en devoluciones de llamada dúplex bajo suplantación del nivel de identificación.
Certificados CNG/KSP en Windows Server 2008
La API criptográfica de nueva generación (CNG) sustituirá a largo plazo CryptoAPI. Esta API está disponible en código no administrado en Windows Vista y Windows Server 2008.
En plataformas de nivel inferior (Windows Server 2003 y Windows XP) .NET Framework 2.0 no reconoce este protocolo y en su lugar utiliza la CryptoApi heredada para administrar los certificados CNG/KSP. En Windows Server 2008 y Windows Vista, .NET Framework 3.5 no admite estos certificados: su uso produce una excepción.
Hay dos posibles maneras de saber si un certificado utiliza KSP:
- Ejecute p/invoke para CertGetCertificateContextProperty e inspeccione dwProvType en la CertGetCertificateContextProperty devuelta.
- Utilice el comando certutil desde la línea de comandos para consultar los certificados. Para obtener más información, consulte Certutil tasks for troubleshooting certificates.
Se produce un error en la seguridad del mensaje si se requiere el uso de suplantación de ASP.NET y compatibilidad de ASP.NET
WCF no admite la combinación siguiente de valores porque pueden evitar que se produzca la autenticación del cliente:
- ASP.NET La suplantación está habilitada. Esto se logra en el archivo Web.config estableciendo el atributo impersonate del elemento <identity> en true.
- El modo de compatibilidad de ASP.NET se habilita estableciendo el atributo aspNetCompatibilityEnabled de <serviceHostingEnvironment> element en true.
- Se utiliza la seguridad de modo de mensaje.
El método rápido consiste en desactivar el modo de compatibilidad de ASP.NET. O, si se requiere el modo de compatibilidad de ASP.NET, deshabilite la característica de suplantación de ASP.NET y utilice en su lugar la suplantación proporcionada por WCF. Para obtener más información, consulte Delegación y suplantación con WCF.
Error de dirección literal IPv6
Se produce un error en las solicitudes de seguridad cuando el cliente y el servicio están en el mismo equipo y se utilizan direcciones IPv6 literales para el servicio.
Las direcciones IPv6 literales funcionan si el servicio y el cliente están en equipos diferentes.
Errores de recuperación de WSDL con confianza federada
WCF requiere exactamente un documento WSDL para cada nodo en la cadena de confianza federada. Tenga el cuidado de no establecer un bucle al especificar los extremos. Una manera en la que se pueden producir bucles es cuando se utiliza una descarga WSDL de cadenas de confianza federadas con dos o más vínculos en el mismo documento WSDL. Un escenario común donde se puede dar este problema es un servicio federado en el que el servidor de testigo de seguridad y el servicio se encuentran en el mismo ServiceHost.
Un ejemplo de esta situación sería un servicio con las tres direcciones de extremo siguientes:
- https://localhost/CalculatorService/service (el servicio)
- https://localhost/CalculatorService/issue_ticket (STS)
- https://localhost/CalculatorService/mex (extremo de metadatos)
Esto produce una excepción.
Puede hacer que este escenario funcione colocando el extremo issue_ticket
en otra parte.
Se pueden perder los atributos de importación de WSDL
WCF pierde la pista de los atributos de un elemento <wst:Claims> de una plantilla RST al hacer una importación de WSDL. Esto ocurre durante una importación de WSDL si <Claims> se especifica directamente en WSFederationHttpBinding.Security.Message.TokenRequestParameters o IssuedSecurityTokenRequestParameters.AdditionalRequestParameters en lugar de usar directamente las colecciones de tipos de notificación. Puesto que la importación pierde los atributos, el enlace no efectúa correctamente el viaje de ida y vuelta (round trip) a través de WSDL y por lo tanto es incorrecto en el cliente.
La solución es modificar el enlace directamente en el cliente después de realizar la importación.
Consulte también
Conceptos
Divulgación de información
Elevación de privilegio
Denegación de servicio
Manipulación
Ataques por repetición