Partager via


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.

ms729700.note(fr-fr,VS.100).gifRemarque :
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.

ms729700.Warning(fr-fr,VS.100).gif Attention :
Si la sécurité de transport est utilisée, la propriété CurrentPrincipal peut être remplacée. Pour éviter cela, affectez à la propriété PrincipalPermission la valeur None. ServiceAuthorizationBehavior est un comportement de service qui peut être défini sur 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.

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;

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.

Authentification 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 le sujet suivant IIS 6.0, consultez Activation de l'authentification de base et configuration du nom de domaine (page pouvant être en anglais). Pour plus d'informations sur le sujet suivant IIS 7.0, consultez IIS 7.0 Version Beta : configuration de l'authentification de base (page pouvant être en anglais).

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 le sujet suivant IIS 6.0, consultez Activation des certificats client dans IIS 6.0 (page pouvant être en anglais). Pour plus d'informations sur le sujet suivant IIS 7.0, consultez IIS 7.0 Version Beta : configuration des certificats serveur dans IIS 7.0 (page pouvant être en anglais).

Authentification 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 le sujet suivant IIS 6.0, consultez Authentification Digest dans IIS 6.0 (page pouvant être en anglais). Pour plus d'informations sur le sujet suivant IIS 7.0, consultez IIS 7.0 Version Beta : configuration de l'authentification Digest (page pouvant être en anglais).

Authentification 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 le sujet suivant IIS 6.0, consultez Authentification Windows intégrée à IIS 6.0 (page pouvant être en anglais). Pour plus d'informations sur le sujet suivant IIS 7.0, consultez IIS 7.0 Version Beta : configuration des certificats serveur dans IIS 7.0 (page pouvant être en anglais).

NTLM

Cette fonctionnalité permet au serveur d'utiliser l'authentification NTLM en cas de défaillance du protocole Kerberos. Pour plus d'informations sur le sujet suivant la configuration IIS dans IIS 6.0, consultez Imposer l'authentification NTLM (pages pouvant être en anglais). Pour IIS 7.0, l'authentification Windows intègre l'authentification NTLM. Pour plus d'informations, consultez IIS 7.0 Version Beta : configuration des certificats serveur dans IIS 7.0 (page pouvant être en anglais).

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é de 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.
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

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.

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;

Client

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

ms729700.note(fr-fr,VS.100).gifRemarque :
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 le sujet suivant les certificats, consultez Utilisation des certificats.

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

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 le sujet suivant les applications fédérées, 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 le sujet suivant la fonctionnalité pair-à-pair, 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

Concepts

Programmation de la sécurité dans WCF