Seguridad de enlace personalizado

Download sample

Este ejemplo muestra cómo configurar la seguridad mediante un enlace personalizado. Muestra cómo utilizar un enlace personalizado para habilitar la seguridad del nivel de mensaje junto con un transporte seguro. Esto es útil cuando se exige un transporte seguro que transmita los mensajes entre el cliente y servicio y simultáneamente los mensajes deben ser seguros en el nivel de mensaje. Los enlaces proporcionados por el sistema no admiten esta configuración.

Este ejemplo está compuesto por un programa de consola de cliente (EXE) y un programa de consola de servicio (EXE). El servicio implementa un contrato dúplex. La interfaz ICalculatorDuplex, que expone las operaciones matemáticas (sumar, restar, multiplicar y dividir), define el contrato. La interfaz ICalculatorDuplex permite al cliente realizar las operaciones de matemática, calculando un resultado en ejecución sobre una sesión. Independientemente, el servicio puede devolver resultados en la interfaz ICalculatorDuplexCallback. Un contrato dúplex requiere una sesión, porque se debe establecer un contexto para poner en correlación el conjunto de mensajes que se envían entre el cliente y el servicio. Se define un enlace personalizado que admite la comunicación dúplex y es seguro.

Nota

El procedimiento de instalación y las instrucciones de compilación de este ejemplo se encuentran al final de este tema.

La configuración de servicio define un enlace personalizado que admite lo siguiente:

  • Comunicación TCP protegida utilizando protocolo TLS/SSL.

  • Seguridad de mensaje de Windows

La configuración del enlace personalizado habilita el transporte seguro habilitando simultáneamente la seguridad del nivel de mensaje. La clasificación de elementos de enlace es importante para definir un enlace personalizado, porque cada uno representa un nivel en la pila de canales (consulte Custom Bindings). El enlace personalizado se define en los archivos de configuración de cliente y servicio, como se muestra en la configuración del ejemplo siguiente.

<bindings>
  <!-- Configure a custom binding. -->
  <customBinding>
    <binding name="Binding1">
      <security authenticationMode="SecureConversation"
                 requireSecurityContextCancellation="true">
      </security>
      <textMessageEncoding messageVersion="Soap12WSAddressing10" writeEncoding="utf-8"/>
      <sslStreamSecurity requireClientCertificate="false"/>
      <tcpTransport/>
    </binding>
  </customBinding>
</bindings>

El enlace personalizado utiliza un certificado de servicio para autenticar el servicio en el nivel de transporte y proteger los mensajes durante la transmisión entre el cliente y servicio. Esto lo lleva a cabo el elemento de enlace sslStreamSecurity. El certificado del servicio se configura utilizando un comportamiento del servicio como se muestra en la configuración del ejemplo siguiente.

<behaviors>
      <serviceBehaviors>
        <behavior name="CalculatorServiceBehavior">
          <serviceMetadata />
          <serviceDebug includeExceptionDetailInFaults="False" />
          <serviceCredentials>
            <serviceCertificate findValue="localhost" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName"/>
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>

Además, el enlace personalizado utiliza seguridad de mensajes con tipo de credencial de Windows; éste es el tipo de credencial predeterminado. Esto lo lleva a cabo el elemento de enlace security. El cliente y el servicio se autentican utilizando la seguridad del nivel de mensaje si el mecanismo de autenticación Kerberos está disponible. Esto sucede si el ejemplo se ejecuta en el entorno Active Directory. Si el mecanismo de autenticación Kerberos no está disponible, se utiliza la autenticación NTLM. NTLM autentica el cliente al servicio pero no autentica el servicio al cliente. El elemento de enlace security se configura para utilizar SecureConversation authenticationType, lo que resulta en la creación de una sesión de seguridad en el cliente y el servicio. Esto se exige para que funcione el contrato del dúplex del servicio.

Al ejecutar el ejemplo, las solicitudes y respuestas de la operación se muestran en la ventana de la consola del cliente. Presione ENTRAR en la ventana de cliente para cerrar el cliente.

Press <ENTER> to terminate client.
Result(100)
Result(50)
Result(882.5)
Result(441.25)
Equation(0 + 100 - 50 * 17.65 / 2 = 441.25)

Al ejecutar el ejemplo, se ven los mensajes devueltos al cliente en la interfaz de devolución de llamada enviada del servicio. Se muestra cada resultado intermedio, seguido por la ecuación completa en la realización de todas las operaciones. Presione Entrar para cerrar el cliente.

El archivo Setup.bat incluido con este ejemplo le permite configurar el cliente y el servidor con los certificados de servicio pertinentes para ejecutar una aplicación hospedada que exija la seguridad basada en certificado. Este archivo por lotes debe modificarse para que funcione a través de los equipos o en un caso no hospedado.

A continuación se proporciona una descripción breve de las diferentes secciones de los archivos por lotes que se aplican en este ejemplo con objeto de que se puedan modificar para ejecutarse con la configuración adecuada.

  • Crear el certificado de servidor.

    Las líneas siguientes del archivo Setup.bat crean el certificado de servidor que se va a usar. La variable %SERVER_NAME% especifica el nombre del servidor. Cambie esta variable para especificar su propio nombre de servidor. Este archivo por lotes determina como valor predeterminado el nombre del servidor como host local.

    El certificado se almacena en el almacén de CurrentUser para los servicios hospedados por Web.

    echo ************
    echo Server cert setup starting
    echo %SERVER_NAME%
    echo ************
    echo making server cert
    echo ************
    makecert.exe -sr LocalMachine -ss MY -a sha1 -n CN=%SERVER_NAME% -sky exchange -pe
    
  • Instalar el certificado del servidor en el almacén de certificados de confianza de cliente.

    Las líneas siguientes del archivo Setup.bat copian el certificado de servidor en el almacén de usuarios de confianza del cliente. Este paso es necesario porque el sistema cliente no confía implícitamente en los certificados generados por Makecert.exe. Si ya tiene un certificado que se basa en un certificado raíz de confianza del cliente, por ejemplo, un certificado emitido por Microsoft, no es necesario el paso de rellenar el almacén del certificado de cliente con el certificado de servidor.

    certmgr.exe -add -r LocalMachine -s My -c -n %SERVER_NAME% -r CurrentUser -s TrustedPeople
    

    Nota

    El archivo por lotes Setup.bat está diseñado para ejecutarse desde el símbolo del sistema de Windows SDK. Requiere que el punto de variable de entorno de MSSDK señale el directorio donde está instalado el SDK. Esta variable de entorno se establece automáticamente dentro de un símbolo del sistema de Windows SDK.

Para configurar, generar y ejecutar el ejemplo

  1. Asegúrese de que ha realizado el Procedimiento de instalación único para ejemplos de Windows Communication Foundation.

  2. Para generar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Generación de ejemplos de Windows Communication Foundation.

  3. Para ejecutar el ejemplo en una configuración con un único equipo o con varios, siga las instrucciones de Ejecución de ejemplos de Windows Communication Foundation.

Para ejecutar el ejemplo en el mismo equipo

  1. Asegúrese de que la ruta de acceso incluye la carpeta donde se encuentra Makecert.exe.

  2. Ejecute Setup.bat desde la carpeta de instalación del ejemplo. Esto instala todos los certificados requeridos para ejecutar el ejemplo.

    Nota

    El archivo por lotes Setup.bat está diseñado para ejecutarse desde el símbolo del sistema de Windows SDK. Requiere que el punto de variable de entorno de MSSDK señale el directorio donde está instalado el SDK. Esta variable de entorno se establece automáticamente dentro de un símbolo del sistema de Windows SDK.

  3. Inicie Service.exe desde \service\bin.

  4. Inicie Client.exe desde \client\bin. La actividad del cliente se muestra en la aplicación de consola del cliente.

  5. Si el cliente y el servicio no se pueden comunicar, vea Sugerencias para la solución de problemas.

Para ejecutar el ejemplo en varios equipos

  1. En el equipo del servicio:

    1. En el equipo del servicio, cree un directorio virtual denominado servicemodelsamples.

    2. Copie los archivos de programa de servicio del directorio \inetpub\wwwroot\servicemodelsamples al directorio virtual del equipo de servicio. Asegúrese de que copia los archivos en el subdirectorio \bin.

    3. Copie los archivos Setup.bat y Cleanup.bat en el equipo del servicio.

    4. Ejecute el comando siguiente: Setup.bat service. Esto crea el certificado del servicio con el nombre sujeto que coincide con el nombre de equipo del equipo en el que se ejecutó el archivo por lotes.

      Nota

      El archivo por lotes Setup.bat está diseñado para ejecutarse desde el símbolo del sistema de Windows SDK. Requiere que el punto de variable de entorno de MSSDK señale el directorio donde está instalado el SDK. Esta variable de entorno se establece automáticamente dentro de un símbolo del sistema de Windows SDK.

    5. Cambie serviceCertificate element of serviceCredentials dentro del archivo Service.exe.config para reflejar el nombre sujeto del certificado generado en el paso anterior.

    6. Ejecute Service.exe desde un símbolo del sistema.

  2. En el equipo cliente, ejecute:

    1. Copie los archivos de programa del cliente de la carpeta \client\bin\ al equipo del cliente. También copie el archivo Cleanup.bat.

    2. Ejecute Cleanup.bat para quitar cualquier certificado antiguo de ejemplos anteriores.

    3. Exporte el certificado del servicio ejecutando el comando siguiente en el equipo del servicio (sustituya %SERVER_NAME% con el nombre completo del equipo donde el servicio se está ejecutando):

      certmgr -put -r LocalMachine -s My -c -n %SERVER_NAME% %SERVER_NAME%.cer
      
    4. Copie % SERVER_NAME%.cer al equipo cliente (sustituya % SERVER_NAME% con el nombre completo del equipo donde el servicio se está ejecutando).

    5. Importe el certificado del servicio ejecutando el comando siguiente en el equipo del servicio (sustituya %SERVER_NAME% con el nombre completo del equipo donde el servicio se está ejecutando):

      certmgr.exe -add -c %SERVER_NAME%.cer -s -r CurrentUser TrustedPeople
      

      Los pasos c, d y e no son necesarios si un Emisor de confianza emite el certificado.

    6. Modifique el App.config del cliente como sigue:

      <client>
          <endpoint name="default"
              address="net.tcp://ReplaceThisWithServiceMachineName:8000/ServiceModelSamples/Service" 
              binding="customBinding" 
              bindingConfiguration="Binding1" 
              contract="Microsoft.ServiceModel.Samples.ICalculatorDuplex"
      behaviorConfiguration="CalculatorClientBehavior" />
      </client>
      
    7. Si el servicio se está ejecutando bajo una cuenta diferente de NetworkService o LocalSystem en un entorno del dominio, podría necesitar modificar la identidad del extremo para el extremo de servicio dentro del archivo App.config del cliente para establecer el UPN o SPN adecuado basado en la cuenta que se utiliza para ejecutar el servicio. Para obtener más información sobre la identidad del extremo, consulte el tema Specifying Service Identity .

    8. Ejecute Client.exe desde un símbolo del sistema.

Para limpiar después del ejemplo

  • Ejecute Cleanup.bat en la carpeta de ejemplos cuando haya terminado de ejecutar el ejemplo.

Footer image

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.