Procedimiento para configurar un servicio WCF hospedado en IIS con SSL
En este tema se describe cómo configurar un servicio de WCF hospedado en IIS para usar la seguridad de transporte HTTP. La seguridad de transporte HTTP necesita registrar un certificado SSL con IIS. Si no tiene un certificado SSL puede usar IIS para generar un certificado de prueba. Después debe agregar un enlace SSL al sitio web y configurar las propiedades de autenticación del sitio web. Finalmente se debe configurar el servicio de WCF para usar HTTPS.
Crear un certificado autofirmado
Abra el Administrador de Internet Information Services (inetmgr.exe) y seleccione el nombre de equipo en la vista de árbol izquierda. En la parte derecha de la pantalla, seleccione Certificados de servidor
En la ventana Certificados de servidor, haga clic en el vínculo Crear certificado autofirmado….
Escriba un nombre descriptivo para el certificado autofirmado y haga clic en Aceptar.
Los detalles del certificado autofirmado recién creado se muestran ahora en la ventana Certificados de servidor.
El certificado generado se instala en el almacén de entidades de certificación raíz de confianza.
Agregar enlace SSL
En el Administrador de Internet Information Services, expanda la carpeta Sitios y después la carpeta Sitio Web predeterminado en la vista de árbol en el lado izquierdo de la pantalla.
Haga clic en el vínculo Enlaces… en la sección Acciones de la parte superior derecha de la ventana.
En la ventana Enlaces de sitio, haga clic en el botón Agregar.
En el cuadro de diálogo Agregar enlace de sitio, seleccione https para el tipo y el nombre descriptivo del certificado autofirmado que acaba de crear.
Configurar el directorio virtual para SSL
En el Administrador de Internet Information Services, seleccione el directorio virtual que contiene el servicio seguro de WCF.
En el panel central de la ventana, seleccione Configuración de SSL en la sección IIS.
En el panel Configuración de SSL, active la casilla Requerir SSL y haga clic en el vínculo Aplicar en la sección Acciones en el lado derecho de la pantalla.
Configurar el servicio WCF para la seguridad de transporte HTTP
En el archivo web.config del servicio de WCF, configure el enlace HTTP para usar seguridad de transporte como se muestra en el siguiente código XML.
<bindings> <basicHttpBinding> <binding name="secureHttpBinding"> <security mode="Transport"> <transport clientCredentialType="None"/> </security> </binding> </basicHttpBinding> </bindings>
Especifique el servicio y el punto de conexión del servicio tal y como se muestra en el siguiente código XML.
<services> <service name="MySecureWCFService.Service1"> <endpoint address="" binding="basicHttpBinding" bindingConfiguration="secureHttpBinding" contract="MySecureWCFService.IService1"/> <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" /> </service> </services>
Ejemplo
A continuación se muestra un ejemplo completo de un archivo web.config para un servicio de WCF mediante la seguridad de transporte HTTP
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<services>
<service name="MySecureWCFService.Service1">
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="secureHttpBinding"
contract="MySecureWCFService.IService1"/>
<endpoint address="mex"
binding="mexHttpsBinding"
contract="IMetadataExchange" />
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="secureHttpBinding">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpsGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>