Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se tratan los certificados X.509 para la autenticación de servidores y clientes cuando se usa la seguridad de transporte. Para obtener más información sobre los certificados X.509, vea Certificados X.509 de clave pública. Los certificados los debe emitir una entidad de certificación, que suele ser un emisor de certificados de otra empresa. En un dominio de servidor de Windows, se pueden usar los Servicios de certificados de Active Directory para emitir certificados a los equipos cliente del dominio. Para obtener más información, vea Servicios de certificados de Windows 2008 R2. En este escenario, el servicio se hospeda bajo Internet Information Services (IIS) que se configura con capa de sockets seguros (SSL). El servidor se configura con un certificado SSL (X.509) para que los clientes puedan comprobar la identidad del servidor. El cliente también se configura con un certificado X.509 que permite que el servicio compruebe la identidad del cliente. El cliente debe confiar en el certificado del servidor y este, en el certificado del cliente. Los mecanismos reales de comprobación por parte del servicio y del cliente de sus respectivas identidades no se trata en el ámbito de este tema. Para obtener más información, vea Firmas digitales en Wikipedia.
En este escenario se implementa un modelo de mensaje de solicitud/respuesta como se muestra en el siguiente diagrama.
Para obtener más información sobre cómo usar un certificado con un servicio, vea Trabajar con certificados y Cómo: Configurar un puerto con un certificado SSL. En la tabla siguiente se describen las distintas características del escenario.
Característica | Descripción |
---|---|
Modo de seguridad |
Transporte |
Interoperabilidad |
Con clientes y servicios de servicios Web existentes |
Autenticación (servidor) Autenticación (cliente) |
Sí (mediante un certificado SSL) Sí (mediante un certificado X.509) |
Integridad de datos |
Sí |
Confidencialidad de los datos |
Sí |
Transporte |
HTTPS |
Enlace |
Configurar el servicio
Puesto que el servicio de este escenario se hospeda bajo IIS, se configura con un archivo web.config. El siguiente archivo web.config muestra cómo configurar la clase WSHttpBinding para usar la seguridad de transporte y las credenciales de cliente de X.509.
<configuration>
<system.serviceModel>
<protocolMapping>
<add scheme="https" binding="wsHttpBinding" />
</protocolMapping>
<bindings>
<wsHttpBinding>
<!-- configure wsHttp binding with Transport security mode and clientCredentialType as Certificate -->
<binding>
<security mode="Transport">
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
<behaviors>
<serviceBehaviors>
<behavior>
<serviceDebug includeExceptionDetailInFaults="True" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Configurar el cliente
El cliente se puede configurar en código o en un archivo app.config. En el ejemplo siguiente se muestra cómo configurar el cliente en código.
// Create the binding.
WSHttpBinding myBinding = new WSHttpBinding();
myBinding.Security.Mode = SecurityMode.Transport;
myBinding.Security.Transport.ClientCredentialType =
HttpClientCredentialType.Certificate;
// Create the endpoint address. Note that the machine name
// must match the subject or DNS field of the X.509 certificate
// used to authenticate the service.
EndpointAddress ea = new
EndpointAddress("https://localhost/CalculatorService/service.svc");
// Create the client. The code for the calculator
// client is not shown here. See the sample applications
// for examples of the calculator code.
CalculatorClient cc =
new CalculatorClient(myBinding, ea);
// The client must specify a certificate trusted by the server.
cc.ClientCredentials.ClientCertificate.SetCertificate(
StoreLocation.CurrentUser,
StoreName.My,
X509FindType.FindBySubjectName,
"contoso.com");
// Begin using the client.
Console.WriteLine(cc.Add(100, 1111));
//...
cc.Close();
O bien, puede configurar el cliente en un archivo App.config como se muestra en el siguiente ejemplo:
<configuration>
<system.serviceModel>
<client>
<!-- this endpoint has an https: address -->
<endpoint address=" https://localhost/CalculatorService/service.svc "
behaviorConfiguration="endpointCredentialBehavior"
binding="wsHttpBinding"
bindingConfiguration="Binding1"
contract="Microsoft.Samples.TransportSecurity.ICalculator"/>
</client>
<behaviors>
<endpointBehaviors>
<behavior name="endpointCredentialBehavior">
<clientCredentials>
<clientCertificate findValue="contoso.com"
storeLocation="CurrentUser"
storeName="My"
x509FindType="FindBySubjectName" />
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<!-- configure wsHttpbinding with Transport security mode
and clientCredentialType as Certificate -->
<binding name="Binding1">
<security mode="Transport">
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
Vea también
Conceptos
Información general sobre seguridad