Comment : sécuriser des points de terminaison de métadonnées
Les métadonnées d'un service peuvent contenir des informations sensibles sur votre application dont un utilisateur malveillant peut tirer parti. Les consommateurs de votre service peuvent également avoir besoin d'un mécanisme sécurisé pour obtenir des métadonnées sur votre service. Par conséquent, il est parfois nécessaire de publier vos métadonnées à l'aide d'un point de terminaison sécurisé.
Les points de terminaison de métadonnées sont en général sécurisés à l'aide des mécanismes de sécurité standard définis dans Windows Communication Foundation (WCF) pour la sécurisation des points de terminaison d'application. (Pour plus d'informations, consultez Vue d'ensemble de la sécurité.)
Cette rubrique présente en détail les étapes permettant de créer un point de terminaison sécurisé par un certificat SSL (Secure Sockets Layer) ou, en d'autres termes, un point de terminaison HTTPS.
Pour créer un point de terminaison sécurisé de métadonnées HTTPS GET dans le code
Configurez un port avec un certificat X.509 approprié. Le certificat doit provenir d'une autorité approuvée et il doit avoir une utilisation prévue de l'autorisation de service. Vous devez utiliser l'outil HttpCfg.exe pour joindre le certificat au port. Consultez Comment : configurer un port avec un certificat SSL.
Remarque : Le sujet du certificat ou son nom DNS (Domain Name System) doit correspondre au nom de l'ordinateur. Ceci est essentiel car l'une des premières étapes effectuées par le mécanisme HTTPS est de vérifier que le certificat est émis vers le même URI (Uniform Resource Identifier) que l'adresse avec laquelle il est appelé. Créez une nouvelle instance de la classe ServiceMetadataBehavior.
Affectez la valeur true à la propriété HttpsGetEnabled de la classe ServiceMetadataBehavior.
Affectez une URL appropriée à la propriété HttpsGetUrl. Notez que si vous spécifiez une adresse absolue, l'URL doit commencer par le préfixe https://. Si vous spécifiez une adresse relative, vous devez fournir une adresse de base HTTPS pour votre hôte de service. Si cette propriété n'est pas définie, l'adresse par défaut est "" ou directement l'adresse de base HTTPS pour le service.
Ajoutez l'instance à la collection de comportements que la propriété Behaviors de la classe ServiceDescription retourne, comme l'illustre le code ci-dessous.
Pour créer un point de terminaison sécurisé de métadonnées HTTPS GET dans la configuration
Ajoutez un élément <behaviors> à l'élément <system.ServiceModel> du fichier de configuration pour votre service.
Ajoutez un élément <serviceBehaviors> à l'élément <Behaviors>.
Ajoutez un élément <behavior> of <serviceBehaviors> à l'élément <serviceBehaviors>.
Affectez une valeur appropriée à l'attribut name de l'élément <behavior>. L'attribut name est obligatoire. L'exemple ci-dessous utilise la valeur
mySvcBehavior
.Ajoutez un <serviceMetadata> Element à l'élément <behavior>.
Affectez à l'attribut httpsGetEnabled de l'élément <serviceMetadata> la valeur true.
Affectez une valeur appropriée à l'attribut httpsGetUrl de l'élément <serviceMetadata>. Notez que si vous spécifiez une adresse absolue, l'URL doit commencer par le préfixe https://. Si vous spécifiez une adresse relative, vous devez fournir une adresse de base HTTPS pour votre hôte de service. Si cette propriété n'est pas définie, l'adresse par défaut est "" ou directement l'adresse de base HTTPS pour le service.
Pour utiliser le comportement avec un service, affectez la valeur de l'attribut de nom de l'élément de comportement à l'attribut behaviorConfiguration de l'élément <service>. Le code de configuration ci-dessous illustre un exemple complet.
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="mySvcBehavior"> <serviceMetadata httpsGetEnabled="true" httpsGetUrl="https://localhost:8036/calcMetadata" /> </behavior> </serviceBehaviors> </behaviors> <services> <service behaviorConfiguration="mySvcBehavior" name="Microsoft.Security.Samples.Calculator"> <endpoint address="https://localhost:8037/ServiceModelSamples/calculator" binding="wsHttpBinding" bindingConfiguration="" contract="Microsoft.Security.Samples.ICalculator" /> </service> </services> </system.serviceModel> </configuration>
Exemple
L'exemple ci-dessous crée une instance d'une classe ServiceHost et ajoute un point de terminaison. Le code crée ensuite une instance de la classe ServiceMetadataBehavior et définit les propriétés pour créer un point d'échange de métadonnées sécurisé.
Compilation du code
L'exemple de code utilise les espaces de noms suivants :
Voir aussi
Tâches
Comment : configurer un port avec un certificat SSL
Référence
HttpsGetEnabled
ServiceMetadataBehavior
HttpsGetUrl
Concepts
Utilisation des certificats
Considérations sur la sécurité des métadonnées