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

  1. 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

    IIS Manager Home Screen

  2. En la ventana Certificados de servidor, haga clic en el vínculo Crear certificado autofirmado….

    Creating a self-signed certificate with IIS

  3. Escriba un nombre descriptivo para el certificado autofirmado y haga clic en Aceptar.

    Create Self-Signed Certificate Dialog

    Los detalles del certificado autofirmado recién creado se muestran ahora en la ventana Certificados de servidor.

    Server Certificate Window

    El certificado generado se instala en el almacén de entidades de certificación raíz de confianza.

Agregar enlace SSL

  1. 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.

  2. Haga clic en el vínculo Enlaces… en la sección Acciones de la parte superior derecha de la ventana.

    Adding an SSL binding

  3. En la ventana Enlaces de sitio, haga clic en el botón Agregar.

    Site Bindings Dialog

  4. 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.

    Site binding example

Configurar el directorio virtual para SSL

  1. En el Administrador de Internet Information Services, seleccione el directorio virtual que contiene el servicio seguro de WCF.

  2. En el panel central de la ventana, seleccione Configuración de SSL en la sección IIS.

    SSL Settings for virtual directory

  3. 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.

    Virtual directory SSL settings

Configurar el servicio WCF para la seguridad de transporte HTTP

  1. 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>  
    
  2. 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>  

Consulte también