Cómo: Proteger los extremos de metadatos
Los metadatos para un servicio pueden contener información confidencial sobre su aplicación que un usuario malintencionado puede aprovechar. Los consumidores de su servicio también pueden requerir un mecanismo seguro para obtener los metadatos sobre su servicio. Por consiguiente, a veces es necesario publicar sus metadatos utilizando un extremo seguro.
Los extremos de metadatos generalmente se protegen utilizando los mecanismos de seguridad estándares definidos en Windows Communication Foundation (WCF) para proteger los extremos de aplicación. (Para obtener más información, consulte Información general sobre seguridad.)
En este tema se describen los pasos para crear un extremo protegido por un certificado SSL (Capa de sockets seguros) o, en otras palabras, un extremo de HTTPS.
Para crear un extremo seguro de metadatos HTTPS GET en código
Configure un puerto con un certificado X.509 adecuado. El certificado debe proceder de una autoridad de confianza y debe tener un uso previsto de "Autorización de servicio." Debe utilizar la herramienta HttpCfg.exe para asociar el certificado al puerto. Vea Cómo: Configurar un puerto con un certificado SSL.
Nota
El asunto del certificado o su Domain Name System (DNS) debe coincidir con el nombre del equipo. Esto es esencial porque uno de los primeros pasos que el mecanismo de HTTPS realiza es comprobar que el certificado esté emitido para el mismo identificador URI (Uniform Resource Identifier) que la dirección en la que se invoca.
Cree una nueva instancia de la clase ServiceMetadataBehavior.
Establezca la propiedad HttpsGetEnabled de la clase ServiceMetadataBehavior en true.
Establezca la propiedad HttpsGetUrl en una URL adecuada. Tenga en cuenta que si especifica una dirección absoluta, la dirección URL debe empezar con el esquema "https://". Si especifica una dirección relativa, debe proporcionar una dirección base de HTTPS para su host de servicio. Si esta propiedad no está establecida, la dirección predeterminada es "", o directamente en la dirección base de HTTPS para el servicio.
Agregue la instancia a la colección de comportamientos que la propiedad Behaviors de las clases ServiceDescription devuelve, como se muestra en el código siguiente.
Para crear un extremo seguro de metadatos HTTPS GET en configuración
Agregue un elemento <behaviors> al elemento <system.ServiceModel> del archivo de configuración para su servicio.
Agregue un elemento <serviceBehaviors> al elemento <Behaviors>.
Agregue un elemento <behavior> of <serviceBehaviors> al elemento <serviceBehaviors>.
Establezca el atributo name del elemento <behavior> en un valor adecuado. Se requiere el atributo name. El ejemplo siguiente utiliza el valor
mySvcBehavior
.Agregue <serviceMetadata> Element al elemento <behavior>.
Establezca el atributo httpsGetEnabled del elemento <serviceMetadata> en true:
Establezca el atributo httpsGetUrl del elemento <serviceMetadata> en un valor adecuado. Tenga en cuenta que si especifica una dirección absoluta, la dirección URL debe empezar con el esquema "https://". Si especifica una dirección relativa, debe proporcionar una dirección base de HTTPS para su host de servicio. Si esta propiedad no está establecida, la dirección predeterminada es "", o directamente en la dirección base de HTTPS para el servicio.
Para utilizar el comportamiento con un servicio, establezca el atributo behaviorConfiguration del elemento <service> en el valor del atributo de nombre del elemento de comportamiento. El código de configuración siguiente muestra un ejemplo completo.
<?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>
Ejemplo
El ejemplo siguiente crea una instancia de una clase ServiceHost y agrega un extremo. El código crea a continuación una instancia de la clase ServiceMetadataBehavior y establece las propiedades para crear un punto de intercambio seguro de metadatos.
Compilar el código
El ejemplo de código utiliza los espacios de nombres siguientes:
Consulte también
Tareas
Cómo: Configurar un puerto con un certificado SSL
Referencia
HttpsGetEnabled
ServiceMetadataBehavior
HttpsGetUrl
Conceptos
Trabajar con certificados
Consideraciones de seguridad con metadatos