Información general de la seguridad del transporte
Los mecanismos de seguridad del transporte en Windows Communication Foundation (WCF) dependen del enlace y el transporte subsiguiente que se esté usando. Por ejemplo, al utilizar la clase WSHttpBinding, el transporte es HTTP y el mecanismo principal para garantizar el transporte es Capa de sockets seguros (SSL) sobre HTTP, normalmente reconocido como HTTPS. En este tema se tratan los mecanismos de seguridad en el transporte principales utilizados en los enlaces proporcionados por el sistema WCF.
Nota
Cuando se utiliza la seguridad SSL con .NET Framework 3.5 y, después, un cliente WCF utiliza 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 sólo utiliza los certificados intermedios instalados en el almacén de certificados local.
BasicHttpBinding
De manera predeterminada, la clase BasicHttpBinding no proporciona seguridad. Este enlace está diseñado para la interoperabilidad con proveedores de servicios Web que no implementan seguridad. Sin embargo, puede activar la seguridad definiendo la propiedad Mode en cualquier valor excepto None. Para habilitar la seguridad del transporte, defina la propiedad en Transport.
Interoperación con IIS
La clase BasicHttpBinding se utiliza principalmente para interoperar con los servicios web existentes e Internet Information Services (IIS) hospeda muchos de esos servicios. Por consiguiente, la seguridad en el transporte para este enlace está diseñada para la interoperación perfecta con sitios de IIS. Esto se realiza definiendo el modo de seguridad en Transport y estableciendo a continuación el tipo de credencial del cliente. Los valores del tipo de la credencial se corresponden con los mecanismos de seguridad del directorio de IIS. El código siguiente muestra el modo que se ha establecido y el tipo de credencial definido en Windows. Puede utilizar esta configuración cuando el cliente y el servidor están en el mismo dominio de Windows.
O bien, en la configuración:
<bindings>
<basicHttpBinding>
<binding name="SecurityByTransport">
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
</bindings>
Las secciones siguientes tratan otros tipos de credenciales de clientes.
Basic
Se corresponde con el método de autenticación básico de IIS. Cuando se utiliza este modo, el servidor IIS debe configurarse con cuentas de usuario de Windows y permisos de sistema de archivos NTFS adecuados. Para obtener más información acerca de IIS 6.0, consulte Enabling Basic Authentication and Configuring the Realm Name. Para obtener más información acerca de IIS 7.0, consulte IIS 7.0 Beta: Configure Basic Authentication.
Certificate
IIS tiene una opción para exigir a los clientes que inicien sesión con un certificado. La característica también le permite a IIS asignar un certificado de cliente a una cuenta de Windows. Para obtener más información acerca de IIS 6.0, consulte Enabling Client Certificates in IIS 6.0. Para obtener más información acerca de IIS 7.0, consulte IIS 7.0 Beta: Configuring Server Certificates in IIS 7.0.
Digest
La autenticación implícita es similar a la autenticación básica, pero proporciona la ventaja de enviar las credenciales como un hash, en lugar de como texto no cifrado. Para obtener más información acerca de IIS 6.0, consulte Digest Authentication in IIS 6.0. Para obtener más información acerca de IIS 7.0, vea el tema sobre IIS 7.0 Beta: configuración de la autenticación implícita.
Windows
Esto se 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 utiliza el protocolo Kerberos como su controlador de dominio. Si el servidor no está en un dominio respaldado por Kerberos, o si se producen errores en el sistema Kerberos, puede utilizar el valor de NT LAN Manager (NTLM) descrito en la sección siguiente. Para obtener más información acerca de IIS 6.0, vea el tema sobre la autenticación integrada de Windows en IIS 6.0. Para obtener más información acerca de IIS 7.0, consulte IIS 7.0 Beta: Configuring Server Certificates in IIS 7.0.
NTLM
Esto permite al servidor utilizar NTLM para la autenticación si se producen errores en el protocolo Kerberos. Para obtener más información acerca de configurar IIS en IIS 6.0, vea el tema sobre cómo 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 IIS 7.0 Beta: configuración de los certificados de servidor en IIS 7.0.
WsHttpBinding
La clase WSHttpBinding está diseñada para la interoperación con servicios que implementan las especificaciones de WS-*. La seguridad de transporte para este enlace es Capa de sockets seguros (SSL) sobre HTTP o HTTPS. Para crear una aplicación WCF que utiliza SSL, utilice IIS para hospedar la aplicación. Alternativamente, si está creando una aplicación que se aloja a sí misma, utilice la herramienta HttpCfg.exe para enlazar un certificado X.509 con un puerto concreto en un equipo. El número de puerto se especifica como parte de la aplicación WCF como una dirección del extremo. Al utilizar el modo de transporte, la dirección del extremo debe incluir el protocolo HTTPS o se producirá una excepción en el tiempo de ejecución. Para obtener más información, consulte Seguridad de transporte HTTP.
En el caso de la autenticación del cliente, defina la propiedad ClientCredentialType de la clase HttpTransportSecurity en uno de los valores de enumeración de HttpClientCredentialType. Los valores de enumeración son idénticos a los tipos de credencial de cliente para BasicHttpBinding y están diseñados para que se hospeden con servicios de IIS.
El ejemplo siguiente muestra el enlace que se va a usar con un tipo de credencial de cliente de Windows.
WSDualHttpBinding
Este enlace sólo proporciona seguridad en el nivel de mensaje pero no seguridad en el nivel de transporte.
NetTcpBinding
La clase NetTcpBinding usa TCP para el transporte del mensaje. Se proporciona seguridad para el modo de transporte al implementar Seguridad de la capa de transporte (TLS) sobre TCP. El sistema operativo proporciona la implementación de TLS.
También puede especificar el tipo de credencial del cliente estableciendo la propiedad ClientCredentialType de la clase TcpTransportSecurity en uno de los valores de TcpClientCredentialType, tal y como se muestra en el código siguiente.
Lado del cliente
En el cliente, debe especificar un certificado mediante el método SetCertificate de la clase X509CertificateInitiatorClientCredential.
Nota
Si está utilizando la seguridad de Windows, no se requiere un certificado.
El código siguiente utiliza la huella digital del certificado, que lo identifica de forma única. Para obtener más información acerca de certificados, vea Trabajar con certificados.
De manera alternativa, especifique el certificado en la configuración del cliente utilizando clientCredentials element en la sección de comportamientos.
<behaviors>
<behavior>
<clientCredentials>
<clientCertificate findValue= "101010101010101010101010101010000000000"
storeLocation="LocalMachine" storeName="My"
X509FindType="FindByThumbPrint"/>
</clientCertificate>
</clientCredentials>
</behavior>
</behaviors>
NetNamedPipeBinding
La clase NetNamedPipeBinding está diseñada para la comunicación eficaz dentro del equipo; es decir, para los procesos que se ejecuten en el mismo equipo, aunque los canales de canalización con nombre se pueden crear entre dos equipos en la misma red. Este enlace sólo proporciona la seguridad de nivel de transporte. Al crear aplicaciones mediante este enlace, las direcciones del extremo deben incluir "net.pipe" como protocolo de la dirección del extremo.
WSFederationHttpBinding
Al utilizar la seguridad de transporte, este enlace utiliza SSL sobre HTTP, conocido como HTTPS con un token emitido (TransportWithMessageCredential). Para obtener más información acerca de aplicaciones de federación, vea Federación y tokens emitidos.
NetPeerTcpBinding
La clase NetPeerTcpBinding es un transporte seguro que está diseñado para la comunicación eficaz utilizando la característica de conexión de red de punto a punto. Tal y como indica el nombre de la clase y el enlace, TCP es el protocolo. Cuando el modo de seguridad se establece para transportar, el enlace implementa TLS sobre TCP. Para obtener más información acerca de la característica de punto a punto, vea Conexión de redes punto a punto.
MsmqIntegrationBinding y NetMsmqBinding
Para obtener información completa sobre la seguridad del transporte con Message Queue Server (anteriormente denominado MSMQ), vea Protección de mensajes utilizando la seguridad de transporte.