Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La spécification de découverte ne nécessite pas que les points de terminaison qui participent au processus de découverte soient sécurisés. L'ajout de la sécurité aux messages de découverte atténue divers types d'attaques (altération de messages, déni de service, relecture, usurpation).
L’exemple DiscoveryScenario implémente des canaux personnalisés qui calculent et vérifient les signatures de message à l’aide du format de signature compact (décrit dans la section 8.2 de la spécification WS-Discovery). L’exemple prend en charge la spécification Discovery 2005 et la version 1.1.
Le canal personnalisé est appliqué en plus de la pile de canaux existante pour les points de terminaison de découverte et d'annonce. Ainsi, un en-tête de signature est appliqué pour chaque message envoyé. La signature est vérifiée sur les messages reçus et lorsqu’elle ne correspond pas ou lorsque les messages n’ont pas de signature, les messages sont supprimés. Pour signer et vérifier des messages, l’exemple utilise des certificats.
Discussions
WCF est extensible et permet aux utilisateurs de personnaliser les canaux comme vous le souhaitez. L’exemple implémente un élément de liaison sécurisée de découverte qui génère des canaux sécurisés. Les canaux sécurisés appliquent et vérifient les signatures des messages et sont appliqués en plus de la pile actuelle.
L’élément de liaison sécurisée génère des écouteurs et fabriques de canaux sécurisés.
Fabrique de canaux sécurisés
La fabrique de canaux sécurisés crée des canaux de sortie ou duplex qui ajoutent une signature compacte aux en-têtes de message. Pour conserver les messages aussi petits que possible, le format de signature compact est utilisé. La structure d’une signature compacte est illustrée dans l’exemple suivant.
<d:Security ... >
[<d:Sig Scheme="xs:anyURI"
[KeyId="xs:base64Binary"]?
Refs="..."
[PrefixList]="xs:NMTOKENS"
Sig="xs:base64Binary"
... />]?
...
</d:Security>
Remarque
Le PrefixList a été ajouté dans le protocole Discovery version 2008.
Pour calculer la signature, l’exemple identifie les éléments de signature développés. Une signature XML (SignedInfo) est créée à l’aide du ds préfixe d’espace de noms, comme requis par la spécification WS-Discovery. Le corps et tous les en-têtes des espaces de noms de découverte et d'adressage sont référencés dans la signature et ne peuvent donc pas être falsifiés. Chaque élément référencé est transformé à l’aide de la canonicalisation exclusive (http://www.w3.org/2001/10/xml-exc-c14n#), puis une valeur de synthèse SHA-1 est calculée (http://www.w3.org/2000/09/xmldsig#sha1). En fonction de tous les éléments référencés et de leurs valeurs de synthèse, la valeur de signature est calculée à l’aide de l’algorithme RSA (http://www.w3.org/2000/09/xmldsig#rsa-sha1).
Les messages sont signés avec un certificat spécifié par le client. L’emplacement du magasin, le nom et le nom de l’objet du certificat doivent être spécifiés lors de la création de l’élément de liaison. La KeyId dans la signature compacte représente l'identificateur de clé du jeton de signature et est l'identificateur de clé de sujet (SKI) du jeton de signature, ou (si le SKI n'existe pas) un hachage SHA-1 de la clé publique du jeton de signature.
Écouteur de canal sécurisé
L'écouteur de canal sécurisé crée des canaux d'entrée ou duplex qui vérifient la signature compacte dans les messages reçus. Pour vérifier la signature, la KeyId signature compacte spécifiée attachée au message est utilisée pour sélectionner un certificat dans le magasin spécifié. Si le message n’a pas de signature ou si la vérification de la signature échoue, les messages sont supprimés. Pour utiliser la liaison sécurisée, l’exemple définit une fabrique qui crée les UdpDiscoveryEndpoint et UdpAnnouncementEndpoint personnalisés avec l’élément de liaison sécurisée de découverte ajouté. Ces points de terminaison sécurisés peuvent être utilisés dans des écouteurs d'annonces de découverte et des services détectables.
Détails de l'exemple
L’exemple inclut une bibliothèque et 4 applications console :
DiscoverySecurityChannels : bibliothèque qui expose la liaison sécurisée. La bibliothèque calcule et vérifie la signature compacte pour les messages sortants/entrants.
Service : service qui expose le contrat ICalculatorService, auto-hébergé. Ce service est marqué comme étant détectable. L’utilisateur spécifie les détails du certificat utilisé pour signer des messages en spécifiant l’emplacement et le nom du magasin et le nom de l’objet ou un autre identificateur unique pour le certificat, et le magasin où se trouvent les certificats clients (les certificats utilisés pour vérifier la signature des messages entrants). En fonction de ces détails, un udpDiscoveryEndpoint avec une sécurité ajoutée est généré et utilisé.
Client : cette classe tente de découvrir un ICalculatorService et d’appeler des méthodes sur le service. Encore une fois, un UdpDiscoveryEndpoint avec sécurité ajoutée est construit et utilisé pour signer et vérifier les messages.
AnnouncementListener : service auto-hébergé qui écoute les annonces en ligne et hors connexion, et utilise le point de terminaison d’annonce sécurisé.
Remarque
Si Setup.bat est exécuté plusieurs fois, le gestionnaire de certificats vous invite à choisir un certificat à ajouter, car il existe des certificats en double. Dans ce cas, Setup.bat doit être abandonnée et Cleanup.bat doit être appelée, car les doublons ont déjà été créés. Cleanup.bat vous invite également à choisir un certificat à supprimer. Sélectionnez un certificat dans la liste et continuez à exécuter Cleanup.bat jusqu’à ce qu’aucun certificat ne reste.
Pour utiliser cet exemple
Exécutez le script Setup.bat à partir d’une Invite de commandes développeur pour Visual Studio. L’exemple utilise des certificats pour signer et vérifier les messages. Le script crée les certificats à l’aide de Makecert.exe, puis les installe à l’aide de Certmgr.exe. Le script doit être exécuté avec des privilèges d’administrateur.
Pour générer et exécuter l’exemple, ouvrez le fichier Security.sln dans Visual Studio et choisissez Reconstruire tout. Mettez à jour les propriétés de la solution pour démarrer plusieurs projets : sélectionnez Démarrer pour tous les projets, à l’exception de DiscoverySecureChannels. Exécutez normalement la solution.
Une fois l’exemple terminé, exécutez le script Cleanup.bat qui supprime les certificats créés pour cet exemple.