Seguridad del transporte con autenticación de certificados

El siguiente escenario muestra un cliente y servicio de Windows Communication Foundation (WCF) protegido por un certificado X.509. Cada cliente tiene un certificado que se puede utilizar para la autenticación de Secure Sockets Layer (SSL) de cliente y en el que el servicio puede confiar. Este ejemplo muestra un modelo de solicitud/mensaje de respuesta.

Para obtener más información acerca de usar un certificado con un servicio, vea Trabajar con certificados y Cómo: Configurar un puerto con un certificado SSL.

Transferencia segura mediante el uso de certificados

Característica Descripción

Modo de seguridad

Transporte

Interoperabilidad

Con clientes y servicios de servicios web existentes

Autenticación (servidor)

Autenticación (cliente)

Sí (utilizar HTTPS)

Sí (mediante un certificado)

Integridad

Confidencialidad

Transport

HTTPS

Enlace

WSHttpBinding

Servicio

El código y la configuración siguientes están diseñados para ejecutarse de forma independiente. Siga uno de los procedimientos siguientes:

  • Cree un servicio independiente mediante el uso del código sin configuración.
  • Cree un servicio con la configuración proporcionada, pero sin definir ningún extremo.

Código

El código siguiente muestra cómo crear un extremo de servicio que utiliza una seguridad de transporte y un certificado.

Configuración

Se puede usar la configuración siguiente en lugar del código para preparar el servicio:

<bindings>
    <wsHttpBinding>
        <binding name="CertificateWithTransport">
            <security mode="Transport">
                <transport clientCredentialType="Certificate"/>
            </security>
        </binding>
    </wsHttpBinding>
</bindings>
<services>
    <service name="ServiceModel.Calculator" 
             behaviorConfiguration="credentialConfig" >
    <endpoint address=""
              binding="wsHttpBinding"
              bindingConfiguration="CertificateWithTransport" 
              contract="ServiceModel.ICalculator" />
     </service>
</services>
<behaviors>
    <serviceBehaviors>
        <behavior name="credentialConfig">
            <serviceCredentials>
                <clientCertificate trustedStoreLocation="LocalMachine" 
                                   revocationMode="Online"/>
            </serviceCredentials>
        </behavior>
    </serviceBehaviors>
</behaviors>

Client

El código y la configuración siguientes están diseñados para ejecutarse de manera independiente. Realice uno de los procedimientos siguientes:

  • Cree un cliente independiente mediante el código (y el código de cliente).
  • Cree un cliente que no defina direcciones de extremo. En su lugar, utilice el constructor de cliente que adopta el nombre de configuración como un argumento. Por ejemplo:

Código

El siguiente código crea el cliente. El enlace se configura para utilizar la seguridad del modo de transporte, con el transporte TCP, con el tipo de credencial de cliente establecido en Windows.

Configuración

El código de configuración siguiente es para el cliente e igualmente especifica la ubicación del certificado y valores utilizados para encontrarlo.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="credentialConfiguration">
          <clientCredentials>
            <clientCertificate findValue="Contoso.com"
                      storeLocation="CurrentUser" 
                      x509FindType="FindBySubjectName" />
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_ICalculator">
          <security mode="Transport">
            <transport clientCredentialType="Certificate" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="https://machineName/Calculator"
                behaviorConfiguration="credentialConfiguration"
                binding="wsHttpBinding"
                bindingConfiguration="WSHttpBinding_ICalculator"
                contract="ICalculator"
                name="WSHttpBinding_ICalculator" />
    </client>
  </system.serviceModel>
</configuration>

Consulte también

Conceptos

Información general sobre seguridad