Sécurité des applications distribuées

La sécurité Windows Communication Foundation (WCF) est divisée en trois domaines fonctionnels majeurs : la sécurité, le contrôle d’accès et l’audit. La sécurité de transfert fournit l'intégrité, la confidentialité et l'authentification. La sécurité de transfert est fournie par l'un des éléments suivants : sécurité de transport, sécurité de message ou TransportWithMessageCredential.

Pour obtenir une vue d’ensemble de la sécurité des messages WCF, consultez Vue d’ensemble de la sécurité. Pour plus d’informations sur les deux autres éléments de sécurité WCF, consultez Autorisation et Audit.

Scénarios de sécurité de transfert

Les scénarios courants qui utilisent la sécurité de transfert WCF sont les suivants :

  • Transfert sécurisé à l'aide de Windows. Un client et un service WCF sont déployés dans un domaine Windows (ou une forêt Windows). Les messages contenant des données personnelles, les exigences incluent donc l’authentification mutuelle du client et du service, l’intégrité et la confidentialité des messages. En outre, la preuve est requise qu'une transaction spécifique s'est produite ; à titre d'exemple, le récepteur du message doit enregistrer les informations de signature.

  • Transfert sécurisé à l'aide de UserName et HTTPS. Un client et un service WCF doivent être développés pour fonctionner sur Internet. Les informations d'identification du client permettent d'effectuer l'authentification par rapport à une base de données de paires nom d'utilisateur/mot de passe. Le service est déployé à une adresse HTTPS à l'aide d'un certificat SSL (Secure Sockets Layer) approuvé. Les messages transitant sur Internet, le client et le service doivent donc être mutuellement authentifiés, et la confidentialité et l'intégrité des messages doivent être conservées pendant le transfert.

  • Transfert sécurisé à l'aide de certificats. Un client et un service WCF doivent être développés pour fonctionner sur l’Internet public. Le client et le service ont tous deux des certificats qui permettent de sécuriser les messages. Le client et le service utilisent Internet pour communiquer l’un avec l’autre et exécuter des transactions à forte valeur qui requièrent l’intégrité des messages, la confidentialité et l’authentification mutuelle.

Intégrité, confidentialité et authentification

Ces trois fonctions (intégrité, confidentialité et authentification) forment ensemble la « sécurité de transfert ». La sécurité de transfert fournit les fonctions permettant de limiter les menaces auxquelles est exposée une application distribuée. Le tableau suivant décrit brièvement les trois fonctions qui composent la sécurité de transfert.

Fonction Description
Intégrité L’Intégrité est l’assurance que les données sont complètes et précises, surtout après qu’elles ont traversé d’un point à un autre, et éventuellement lues par de nombreux acteurs. L'intégrité doit être maintenue afin d'empêcher toute falsification à l'aide des données, et elle est généralement assurée par la signature numérique d'un message.
Confidentialité La confidentialité est l’assurance qu’un message n’a pas été lu par quelqu’un d’autre que le lecteur prévu. Par exemple, un numéro de carte de crédit doit rester confidentiel lorsqu'il est envoyé sur Internet. La confidentialité est souvent fournie par le chiffrement des données à l'aide d'un schéma de clé publique/clé privée.
Authentification L’authentification est la vérification d'une identité déclarée. Par exemple, lors de l'utilisation d'un compte bancaire, il est impératif que seul le propriétaire réel de ce compte soit autorisé à retirer des fonds. L'authentification peut être fournie par divers moyens. L'une des méthodes fréquemment utilisées est le système nom d'utilisateur/mot de passe. Une autre consiste à utiliser un certificat X.509 fourni par un tiers.

Modes de sécurité

WCF a plusieurs modes de sécurité de transfert, qui sont décrits dans le tableau suivant.

Mode Description
None Aucune sécurité n'est fournie au niveau de la couche de transport ou de la couche de message. Aucune des liaisons prédéfinies n’utilise ce mode par défaut, à l’exception de l’élément <basicHttpBinding> ou, lorsque vous utilisez du code, la classe BasicHttpBinding .
Transport Utilise un transport sécurisé tel que HTTPS pour l'intégrité, la confidentialité et l'authentification mutuelle.
Message Utilise la sécurité de message SOAP pour l'intégrité, la confidentialité et l'authentification mutuelle. Les messages SOAP sont sécurisés conformément aux standards WS-Security.
Mode mixte Utilise la sécurité de transport pour l'intégrité, la confidentialité et l'authentification du serveur. Utilise la sécurité de message (WS-Security et autres standards) pour l'authentification du client.

(Cette énumération pour ce mode est TransportWithMessageCredential.)
Les deux Effectue la protection et l'authentification aux deux niveaux. Ce mode est disponible uniquement dans l’élément <netMsmqBinding> .

Informations d'identification et sécurité de transfert

Les informations d’identification sont des données présentées pour établir une identité ou des fonctionnalités revendiquées. La présentation d'informations d'identification implique la présentation à la fois des données et la preuve de la propriété de ces données. WCF prend en charge divers types d’informations d’identification aux niveaux de sécurité du transport et des messages. Vous pouvez spécifier un type d’informations d’identification pour une liaison WCF.

Dans de nombreux pays ou régions, le permis de conduire est un exemple d'information d'identification. Un permis contient des données qui représentent l'identité d'une personne et des fonctions. Elle contient la preuve de propriété sous la forme de la photographie du propriétaire. Le permis est délivré par une autorité approuvée, généralement un service public chargé de cette fonction. Le permis est scellé et peut contenir un hologramme qui indique qu'il n'a pas été falsifié.

Prenons l’exemple de deux types d’informations d’identification prises en charge dans WCF : nom d’utilisateur et informations d’identification de certificat (X.509).

Concernant les informations d'identification de nom d'utilisateur, le nom d'utilisateur représente l'identité déclarée et le mot de passe présente la preuve de la propriété. L'autorité approuvée dans ce cas est le système qui valide le nom d'utilisateur et le mot de passe.

Dans l'information d'identification de certificat, le nom du sujet, le nom de substitution du sujet ou des champs spécifiques inclus dans le certificat peuvent être utilisés pour représenter l'identité déclarée et/ou les fonctions. La preuve de la propriété des données dans l'information d'identification est établie en utilisant la clé privée associée pour générer une signature.

Pour plus d’informations sur la programmation de la sécurité du transfert et la spécification des informations d’identification, consultez Liaisons et sécurité et Comportements de sécurité.

Types d'informations d'identification du client de transport

Le tableau suivant présente les valeurs possibles utilisées lors de la création d'une application utilisant la sécurité de transfert. Vous pouvez utiliser ces valeurs dans le code ou les paramètres de liaison.

Paramètre Description
None Spécifie que le client n'a pas besoin de présenter d'informations d'identification. Cela se traduit en un client anonyme.
De base Spécifie l'authentification de base. Pour plus d’informations, consultez RFC2617, «Authentification HTTP : Authentification de base et Digest».
Digest Spécifie l’authentification Digest. Pour plus d’informations, consultez RFC2617, «Authentification HTTP : Authentification de base et Digest».
Ntlm Spécifie l'authentification Windows à l'aide de la négociation SSPI sur un domaine Windows.

La négociation SSPI entraîne l'utilisation du protocole Kerberos ou NTLM (NT LanMan).
Windows Spécifie l'authentification Windows à l'aide de SSPI sur un domaine Windows. SSPI sélectionne le protocole Kerberos ou NTLM comme service d'authentification.

SSPI tente d'abord d'utiliser le protocole Kerberos ; en cas d'échec, il utilise NTLM.
Certificat Exécute l'authentification du client à l'aide d'un certificat, en général X.509.

Types d'informations d'identification du client de message

Le tableau suivant présente les valeurs possibles utilisées lors de la création d'une application utilisant la sécurité de message. Vous pouvez utiliser ces valeurs dans le code ou les paramètres de liaison.

Paramètre Description
None Autorise le service à interagir avec des clients anonymes.
Windows Autorise les échanges de messages SOAP à se produire sous le contexte authentifié d'une information d'identification Windows. Utilise le mécanisme de négociation SSPI pour sélectionner le protocole Kerberos ou NTLM comme service d'authentification.
Nom d’utilisateur Autorise le service à exiger que le client soit authentifié avec des informations d'identification de nom d'utilisateur. Notez que WCF n’autorise aucune opération de chiffrement avec le nom d’utilisateur, par exemple la génération d’une signature ou le chiffrement de données. Par conséquent, WCF s’assure que le transport est sécurisé lors de l’utilisation des informations d’identification de nom d’utilisateur.
Certificat Autorise le service à exiger une authentification du client via un certificat.
CardSpace Permet au service de demander que le client soit authentifié à l’aide d’un CardSpace.

Programmation d'informations d'identification

Pour chacun des types d’informations d’identification du client, le modèle de programmation WCF vous permet de spécifier les valeurs d’informations d’identification et les validateurs d’informations d’identification à l’aide de comportements de service et de comportements de canal.

La sécurité WCF a deux types d’informations d’identification : les comportements d’informations d’identification du service et les comportements d’informations d’identification de canal. Les comportements d’informations d’identification dans WCF spécifient les données réelles, à savoir les informations d’identification utilisées pour répondre aux exigences de sécurité exprimées par le biais de liaisons. Dans WCF, une classe cliente est le composant d’exécution qui convertit entre l’appel d’opération et les messages. Tous les clients héritent de la classe ClientBase<TChannel>. La propriété ClientCredentials sur la classe de base vous permet de spécifier différentes valeurs d'informations d'identification du client.

Dans WCF, les comportements de service sont des attributs appliqués à la classe implémentant un contrat de service (interface) pour contrôler le service par programmation. La classe ServiceCredentials vous permet de spécifier des certificats pour les informations d'identification du service et des paramètres de validation de client pour divers types d'informations d'identification du client.

Modèle de négociation pour la sécurité de message

Le mode de sécurité du message vous permet d'exécuter la sécurité de transfert afin que les informations d'identification du service soient configurées au niveau du client hors bande. Par exemple, si vous utilisez un certificat stocké dans le magasin de certificats Windows, vous devez utiliser un outil tel qu'un composant logiciel enfichable MMC (Microsoft Management Console).

Le mode de sécurité du message vous permet également d'exécuter la sécurité de transfert afin que les informations d'identification du service soient échangées avec le client dans le cadre d'une négociation initiale. Pour activer la négociation, affectez NegotiateServiceCredential à la propriété true.

Voir aussi