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.
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 |
Sí |
Confidencialidad |
Sí |
Transport |
HTTPS |
Enlace |
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>