Vue d'ensemble de la sécurité des transports

Les mécanismes de sécurité de transport dans Windows Communication Foundation (WCF) dépendent de la liaison et du transport utilisé. Par exemple, lors de l'utilisation de la classe WSHttpBinding, le transport correspond à HTTP et le mécanisme principal utilisé pour sécuriser ce transport correspond à SSL (Secure Sockets Layer) sur HTTP, c'est-à-dire à HTTPS. Cette rubrique aborde les principaux mécanismes de sécurité de transport utilisés dans les liaisons WCF fournies par le système.

Notes

Lorsque la sécurité SSL est utilisée avec le .NET Framework version 3.5 et ultérieure, un client WCF utilise les certificats intermédiaires dans son magasin de certificats et les certificats intermédiaires reçus au cours de la négociation SSL pour effectuer la validation de chaîne de certificats sur le certificat du service. .NET Framework 3.0 n'utilise que les certificats intermédiaires installés dans le magasin de certificats local.

Avertissement

Si la sécurité de transport est utilisée, la propriété Thread.CurrentPrincipal peut être remplacée. Pour éviter cela, affectez à la propriété ServiceAuthorizationBehavior.PrincipalPermissionMode la valeur PrincipalPermissionMode.None. ServiceAuthorizationBehavior est un comportement de service qui peut être défini dans la description du service.

BasicHttpBinding

Par défaut, la classe BasicHttpBinding n'offre aucune sécurité. Cette liaison est conçue pour assurer l’interopérabilité avec les fournisseurs de services Web, lesquels n’implémentent pas de sécurité. Vous pouvez toutefois activer la sécurité en affectant à la propriété Mode toutes valeurs autres que None. Pour activer la sécurité du transport, affectez à la propriété la valeur Transport.

Interaction avec IIS

La classe BasicHttpBinding est utilisée principalement pour interagir avec les services Web existants, hébergés pour un grand nombre d'entre eux par les services Internet (IIS). C'est pourquoi la sécurité de transport de cette liaison est conçue pour interagir de façon transparente avec les sites IIS. Pour permettre cette interaction, il suffit d'affecter au mode de sécurité Transport, puis de définir le type d'informations d'identification du client. Les valeurs de ce type correspondent aux mécanismes de sécurité du répertoire IIS. Dans l'exemple de code suivant, le mode est en cours de définition et la valeur Windows est affectée au type d'informations d'identification. Vous pouvez utiliser cette configuration lorsque le client et le serveur figurent tous les deux dans le même domaine 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

Ou dans la configuration :

<bindings>  
  <basicHttpBinding>  
    <binding name="SecurityByTransport">  
      <security mode="Transport">  
        <transport clientCredentialType="Windows" />  
       </security>  
     </binding>  
  </basicHttpBinding>  
</bindings>  

Les sections suivantes abordent d'autres types d'informations d'identification.

De base

Il s'agit de la méthode d'authentification de base dans IIS. Lorsque ce mode est utilisé, le serveur IIS doit être configuré avec des comptes utilisateur Windows et les autorisations de système de fichiers NTFS adéquates. Pour plus d’informations sur IIS 6.0, consultez Activation de l’authentification de base et configuration du nom du domaine. Pour plus d’informations sur IIS 7.0, consultez Configurer l’authentification de base (IIS 7).

Certificat

Sur les services IIS, une option permet de spécifier que les clients doivent se connecter en utilisant un certificat. Cette fonctionnalité permet également aux services IIS de mapper les certificats clients aux comptes Windows correspondants. Pour plus d’informations sur IIS 6.0, consultez Activation des certificats clients dans IIS 6.0. Pour plus d’informations sur IIS 7.0, consultez Configuration des certificats de serveur dans IIS 7.

Digest

L'authentification Digest s'apparente à l'authentification de base tout en présentant l'avantage supplémentaire de permettre l'envoi des informations d'identification dans un texte haché plutôt qu'en texte clair. Pour plus d’informations sur IIS 6.0, consultez Authentification Digest dans IIS 6.0. Pour plus d’informations sur IIS 7.0, consultez Configurer l’authentification Digest (IIS 7).

Windows

Il s'agit de l'authentification Windows intégrée à IIS. Lorsque ce mode d'authentification est activé, le serveur doit également figurer dans un domaine Windows utilisant le protocole Kerberos comme contrôleur. Dans le cas contraire ou si le système Kerberos connaît une défaillance, vous pouvez utiliser l'authentification NT LAN Manager (NTLM), abordée dans la section suivante. Pour plus d’informations sur IIS 6.0, consultez Authentification Windows intégrée dans IIS 6.0. Pour plus d’informations sur IIS 7.0, consultez Configuration des certificats de serveur dans IIS 7.

NTLM

Cela permet au serveur d'utiliser NTLM pour l'authentification si le fournisseur Kerberos échoue. Pour plus d’informations sur la configuration d’IIS dans IIS 6.0, consultez Forcer l’authentification NTLM. Pour IIS 7.0, l’authentification Windows intègre l’authentification NTLM. Pour plus d'informations, consultez Configuration des certificats de serveur dans IIS 7.

WsHttpBinding

La classe WSHttpBinding est conçue pour interagir avec les services qui implémentent les spécifications WS-*. La sécurité de transport de cette liaison correspond à Secure Sockets Layer (SSL) sur HTTP, c'est-à-dire à HTTPS. Pour créer une application WCF qui utilise SSL, utilisez les services IIS afin d’héberger cette application. Si vous créez une application auto-hébergée, vous pouvez également utiliser l'outil HttpCfg.exe afin d'attribuer un certificat X.509 à un port spécifique de l'ordinateur. Ce numéro de port est spécifié dans le cadre d’une application WCF sous forme d’adresse de point de terminaison. Lorsqu'un mode de transport est utilisé, l'adresse de point de terminaison doit comporter le protocole HTTPS. Dans le cas contraire, une exception sera levée pendant l'exécution. Pour plus d’informations, consultez Sécurité du transport HTTP.

Pour l'authentification client, affectez à la propriété ClientCredentialType de la classe HttpTransportSecurity l'une des valeurs d'énumération HttpClientCredentialType. Les valeurs d'énumération sont identiques aux types d'informations d'identification client pour BasicHttpBinding et sont conçues pour être hébergées dans les services IIS.

Dans l'exemple suivant, une liaison est utilisée avec un type d'informations d'identification client 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

Cette liaison offre uniquement une sécurité de niveau message et non une sécurité de niveau transport.

NetTcpBinding

La classe NetTcpBinding utilise le transport TCP pour les messages. La sécurité de niveau transport est assurée par l'implémentation de la sécurité Transport Layer Security (TLS) sur TCP. L'implémentation TLS est assurée par le système d'exploitation.

Vous pouvez également spécifier le type d'informations d'identification client en affectant à la propriété ClientCredentialType de la classe TcpTransportSecurity l'une des valeurs TcpClientCredentialType, comme illustré dans l'exemple de code suivant.

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

Client

Côté client, vous devez spécifier un certificat à l'aide de la méthode SetCertificate de la classe X509CertificateInitiatorClientCredential.

Notes

Si vous utilisez la sécurité Windows, aucun certificat n'est requis.

Le code suivant utilise l'empreinte numérique de certificat, propre à chaque certificat. Pour plus d’informations sur les certificats, consultez Utilisation de certificats.

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

Vous pouvez également spécifier un certificat dans la configuration client à l’aide d’un élément <clientCredentials> dans la section des comportements.

<behaviors>  
  <behavior>  
   <clientCredentials>  
     <clientCertificate findValue= "101010101010101010101010101010000000000"
      storeLocation="LocalMachine" storeName="My"
      X509FindType="FindByThumbPrint">  
     </clientCertificate>  
   </clientCredentials>  
 </behavior>  
</behaviors>

NetNamedPipeBinding

La classe NetNamedPipeBinding est conçue pour assurer une communication interne efficace au sein des ordinateurs, c'est-à-dire entre les processus s'exécutant sur les mêmes ordinateurs, bien qu'il soit possible de créer des canaux nommés entre deux ordinateurs figurant sur le même réseau. Cette liaison offre uniquement une sécurité de niveau transport. Lorsque des applications sont créées à l’aide de cette liaison, les adresses de point de terminaison doivent comporter « net.pipe » dans leur protocole.

WSFederationHttpBinding

Lorsqu'un transport de sécurité est utilisé, cette liaison utilise SSL sur HTTP, c'est-à-dire HTTPS avec un jeton émis (TransportWithMessageCredential). Pour plus d’informations sur les applications de fédération, consultez Fédération et jetons émis.

NetPeerTcpBinding

La classe NetPeerTcpBinding correspond à un transport sécurisé, conçu pour assurer une communication efficace à l’aide de la fonctionnalité de réseau pair à pair. Comme indiqué par le nom de la classe et de la liaison, TCP correspond au protocole. Lorsque le mode de sécurité a la valeur transport, la liaison implémente TLS sur TCP. Pour plus d’informations sur la fonctionnalité d’égal à égal, consultez Réseaux homologues.

MsmqIntegrationBinding et NetMsmqBinding

Pour plus d’informations sur la sécurité de niveau transport à l’aide du protocole Message Queuing (MSMQ), consultez Sécurisation des messages à l’aide de la sécurité de transport.

Voir aussi