Compartir a través de


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 que se estén 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 denominado HTTPS. En este tema se tratan los mecanismos de seguridad en el transporte principales utilizados en los enlaces proporcionados por el sistema WCF.

ms729700.note(es-es,VS.100).gifNota:
Cuando se usa la seguridad SSL con .NET Framework 3.5 y versiones posteriores, un cliente WCF usa los certificados intermedios de 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.

ms729700.Warning(es-es,VS.100).gif Precaución:
Cuando se utiliza la seguridad de transporte, puede sobrescribirse la propiedad CurrentPrincipal. Para evitar que esto suceda, establezca PrincipalPermission en None. ServiceAuthorizationBehavior es un comportamiento del servicio que se puede establecer en la descripción del servicio.

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.

Dim b As BasicHttpBinding = New BasicHttpBinding()
b.Security.Mode = BasicHttpSecurityMode.Transport
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
BasicHttpBinding b = 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>

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 sobre IIS 6.0, consulte Enabling Basic Authentication and Configuring the Realm Name. Para obtener más información sobre 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 sobre IIS 6.0, consulte Enabling Client Certificates in IIS 6.0. Para obtener más información sobre 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 sobre IIS 6.0, vea Digest Authentication in IIS 6.0. Para obtener más información sobre 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 sobre IIS 6.0, vea el tema sobre la autenticación integrada de Windows en IIS 6.0. Para obtener más información sobre 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 sobre cómo 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, vea 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 autohospedada, 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, vea 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.

' 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
// The code uses a shortcut to specify the security mode to Transport.
WSHttpBinding b = new WSHttpBinding(SecurityMode.Transport);
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;

WSDualHttpBinding

Este enlace solo 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 la enumeración TcpClientCredentialType, tal y como se muestra en el código siguiente.

Dim b As NetTcpBinding = New NetTcpBinding()
b.Security.Mode = SecurityMode.Transport
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate
NetTcpBinding b = new NetTcpBinding();
b.Security.Mode = SecurityMode.Transport;
b.Security.Transport.ClientCredentialType =
TcpClientCredentialType.Certificate;

Cliente

En el cliente, debe especificar un certificado mediante el método SetCertificate de la clase X509CertificateInitiatorClientCredential.

ms729700.note(es-es,VS.100).gifNota:
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 sobre los certificados, vea Trabajar con certificados.

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")
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");

Por otra parte, especifique el certificado en la configuración del cliente mediante el elemento <clientCredentials> de 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 de la máquina. Es decir, para los procesos que se ejecuten en el mismo equipo, aunque los canales de canalización con nombre se puedan crear entre dos equipos de la misma red. Este enlace solo 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 sobre las 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 sobre 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 Queuing (anteriormente denominado MSMQ), vea Protección de mensajes utilizando la seguridad de transporte.

Vea también

Conceptos

Programación de la seguridad de WCF