Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los mecanismos de seguridad de transporte en Windows Communication Foundation (WCF) dependen del enlace y el transporte que se usa. Por ejemplo, cuando se usa la WSHttpBinding clase , el transporte es HTTP y el mecanismo principal para proteger el transporte es Capa de sockets seguros (SSL) a través de HTTP, comúnmente denominado HTTPS. En este tema se describen los principales mecanismos de seguridad de transporte utilizados en los enlaces proporcionados por el sistema WCF.
Nota:
Cuando se usa la seguridad SSL con .NET Framework 3.5 y versiones posteriores, un cliente WCF usa los certificados intermedios en su almacén de certificados y los certificados intermedios recibidos durante la negociación SSL para realizar la validación de la cadena de certificados en el certificado del servicio. .NET Framework 3.0 solo usa los certificados intermedios instalados en el almacén de certificados local.
Advertencia
Cuando se usa la seguridad de transporte, se puede sobrescribir la Thread.CurrentPrincipal propiedad . Para evitar que esto suceda, establezca en ServiceAuthorizationBehavior.PrincipalPermissionModePrincipalPermissionMode.None. ServiceAuthorizationBehavior es un comportamiento de servicio que se puede establecer en la descripción del servicio.
BasicHttpBinding
De forma predeterminada, la BasicHttpBinding clase no proporciona seguridad. Este enlace está diseñado para la interoperabilidad con proveedores de servicios web que no implementan la seguridad. Sin embargo, puede activar la seguridad estableciendo la Mode propiedad en cualquier valor excepto None. Para habilitar la seguridad de transporte, establezca la propiedad Transporten .
Interoperación con IIS
La BasicHttpBinding clase se usa principalmente para interoperar con los servicios web existentes y muchos de esos servicios se hospedan en Internet Information Services (IIS). Por lo tanto, la seguridad de transporte de este enlace está diseñada para la interoperación sin problemas con sitios de IIS. Para ello, establezca el modo Transport de seguridad en y, a continuación, establezca el tipo de credencial de cliente. Los valores de tipo de credencial corresponden a los mecanismos de seguridad del directorio IIS. El código siguiente muestra el modo que se establece y el tipo de credencial establecido en Windows. Puede usar esta configuración cuando el cliente y el servidor están en el mismo dominio de Windows.
BasicHttpBinding b = new BasicHttpBinding();
b.Security.Mode = BasicHttpSecurityMode.Transport ;
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
Dim b As BasicHttpBinding = New BasicHttpBinding()
b.Security.Mode = BasicHttpSecurityMode.Transport
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
O bien, en la configuración:
<bindings>
<basicHttpBinding>
<binding name="SecurityByTransport">
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
</bindings>
En las secciones siguientes se describen otros tipos de credenciales de cliente.
Básico
Esto corresponde al método de autenticación básico en IIS. Al usar este modo, el servidor IIS debe configurarse con cuentas de usuario de Windows y los permisos adecuados del sistema de archivos NTFS. Para obtener más información sobre IIS 6.0, consulte Habilitación de la autenticación básica y configuración del nombre de dominio. Para obtener más información sobre IIS 7.0, consulte Configuración de la autenticación básica (IIS 7).
Certificado
IIS tiene una opción para requerir que los clientes inicien sesión con un certificado. La característica también permite a IIS asignar un certificado de cliente a una cuenta de Windows. Para obtener más información sobre IIS 6.0, consulte Habilitación de certificados de cliente en IIS 6.0. Para obtener más información sobre IIS 7.0, consulte Configuración de certificados de servidor en IIS 7.
Resumen
La autenticación implícita es similar a la autenticación básica, pero ofrece la ventaja de enviar las credenciales como hash, en lugar de en texto no cifrado. Para obtener más información sobre IIS 6.0, consulte Autenticación implícita en IIS 6.0. Para obtener más información sobre IIS 7.0, consulte Configuración de la autenticación implícita (IIS 7).
Windows
Esto corresponde a la autenticación integrada de Windows en IIS. Cuando se establece en este valor, también se espera que el servidor exista en un dominio de Windows que use el protocolo Kerberos como controlador de dominio. Si el servidor no está en un dominio respaldado por Kerberos o si se produce un error en el sistema Kerberos, puede usar el valor de NT LAN Manager (NTLM) descrito en la sección siguiente. Para obtener más información sobre IIS 6.0, consulte Autenticación integrada de Windows en IIS 6.0. Para obtener más información sobre IIS 7.0, consulte Configuración de certificados de servidor en IIS 7.
NTLM
Esto permite al servidor usar NTLM para la autenticación si se produce un error en el protocolo Kerberos. Para obtener más información sobre cómo configurar IIS en IIS 6.0, consulte Forzar la autenticación NTLM. Para IIS 7.0, la autenticación de Windows incluye la autenticación NTLM. Para obtener más información, consulte Configuración de certificados de servidor en IIS 7.
WsHttpBinding
La WSHttpBinding clase está diseñada para interoperación con servicios que implementan especificaciones WS-*. La seguridad de transporte de este enlace es Capa de sockets seguros (SSL) a través de HTTP o HTTPS. Para crear una aplicación WCF que use SSL, use IIS para hospedar la aplicación. Como alternativa, si va a crear una aplicación autohospedada, use la herramienta HttpCfg.exe para enlazar un certificado X.509 a un puerto específico de un equipo. El número de puerto se especifica como parte de la aplicación WCF como una dirección de punto de conexión. Al usar el modo de transporte, la dirección del punto de conexión debe incluir el protocolo HTTPS o se producirá una excepción en tiempo de ejecución. Para obtener más información, consulte Seguridad de transporte HTTP.
Para la autenticación de cliente, establezca la ClientCredentialType propiedad de la HttpTransportSecurity clase en uno de los HttpClientCredentialType valores de enumeración. Los valores de enumeración son idénticos a los tipos de credenciales de cliente para y están diseñados para BasicHttpBinding hospedarse con servicios IIS.
En el ejemplo siguiente se muestra el enlace que se usa con un tipo de credencial de cliente de Windows.
// The code uses a shortcut to specify the security mode to Transport.
WSHttpBinding b = new WSHttpBinding(SecurityMode.Transport);
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
' The code uses a shortcut to specify the security mode to Transport.
Dim b As WSHttpBinding = New WSHttpBinding(SecurityMode.Transport)
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
WSDualHttpBinding
Este enlace solo proporciona seguridad de nivel de mensaje, no seguridad de nivel de transporte.
NetTcpBinding
La NetTcpBinding clase usa TCP para el transporte de mensajes. La seguridad del modo de transporte se proporciona mediante la implementación de seguridad de la capa de transporte (TLS) a través de TCP. El sistema operativo proporciona la implementación de TLS.
También puede especificar el tipo de credencial del cliente estableciendo la ClientCredentialType propiedad de la TcpTransportSecurity clase en uno de los TcpClientCredentialType valores, como se muestra en el código siguiente.
NetTcpBinding b = new NetTcpBinding();
b.Security.Mode = SecurityMode.Transport;
b.Security.Transport.ClientCredentialType =
TcpClientCredentialType.Certificate;
Dim b As NetTcpBinding = New NetTcpBinding()
b.Security.Mode = SecurityMode.Transport
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate
Cliente
En el cliente, debe especificar un certificado mediante el SetCertificate método de la X509CertificateInitiatorClientCredential clase .
Nota:
Si usa la seguridad de Windows, no se requiere un certificado.
El código siguiente usa la huella digital del certificado, que lo identifica de forma única. Para más información, consulte Trabajar con certificados.
NetTcpBinding b = new NetTcpBinding();
b.Security.Mode = SecurityMode.Transport;
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate;
EndpointAddress a = new EndpointAddress("net.tcp://contoso.com/TcpAddress");
ChannelFactory<ICalculator> cf = new ChannelFactory<ICalculator>(b, a);
cf.Credentials.ClientCertificate.SetCertificate(
StoreLocation.LocalMachine,
StoreName.My,
X509FindType.FindByThumbprint,
"0000000000000000000000000000000000000000");
Dim b As NetTcpBinding = New NetTcpBinding()
b.Security.Mode = SecurityMode.Transport
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate
Dim a As New EndpointAddress("net.tcp://contoso.com/TcpAddress")
Dim cf As ChannelFactory(Of ICalculator) = New ChannelFactory(Of ICalculator)(b, a)
cf.Credentials.ClientCertificate.SetCertificate( _
StoreLocation.LocalMachine, _
StoreName.My, _
X509FindType.FindByThumbprint, _
"0000000000000000000000000000000000000000")
Como alternativa, especifique el certificado en la configuración del cliente mediante un <elemento clientCredentials> en la sección de comportamientos.
<behaviors>
<behavior>
<clientCredentials>
<clientCertificate findValue= "101010101010101010101010101010000000000"
storeLocation="LocalMachine" storeName="My"
X509FindType="FindByThumbPrint">
</clientCertificate>
</clientCredentials>
</behavior>
</behaviors>
NetNamedPipeBinding
La NetNamedPipeBinding clase está diseñada para una comunicación intra-máquina eficaz; es decir, para los procesos que se ejecutan en el mismo equipo, aunque se pueden crear canales de canalización con nombre entre dos equipos de la misma red. Este enlace solo proporciona seguridad de nivel de transporte. Al crear aplicaciones con este enlace, las direcciones de punto de conexión deben incluir "net.pipe" como protocolo de la dirección del punto de conexión.
WSFederationHttpBinding
Al usar la seguridad de transporte, este enlace usa SSL a través de HTTP, conocido como HTTPS con un token emitido (TransportWithMessageCredential). Para obtener más información sobre las aplicaciones de federación, consulte Federación y tokens emitidos.
NetPeerTcpBinding
La NetPeerTcpBinding clase es un transporte seguro diseñado para una comunicación eficaz mediante la característica de red punto a punto. Como se indica con el nombre de la clase y el enlace, TCP es el protocolo . Cuando el modo de seguridad se establece en Transporte, el enlace implementa TLS a través de TCP. Para obtener más información sobre la característica punto a punto, consulte Redes punto a punto.
MsmqIntegrationBinding y NetMsmqBinding
Para obtener una explicación completa de la seguridad de transporte con Message Queuing (anteriormente denominado MSMQ), consulte Protección de mensajes mediante seguridad de transporte.