2011-02-12 24 views
8

Esto puede ser una pregunta estúpida pero no puedo encontrar la respuesta.¿Cómo se acepta un certificado SSL autofirmado en un cliente WCF?

Lo que me gustaría hacer: Tengo un servicio WCF alojado por IIS. Está funcionando perfectamente, puedo acceder al wsdl, tengo un certificado autofirmado para el servidor, etc. Me gustaría llamar a este servicio desde un cliente de WPF.

El problema es, ya que tengo un certificado autofirmado, tengo la siguiente excepción al llamar al servicio: No se pudo establecer una relación de confianza para el canal TLS SSL/seguro con autoridad 'localhost'.

Si puedo acceder al sitio (o el servicio) desde un navegador, no es ningún problema, ya que el navegador me advierte sobre el certificado, y me da la opción de ver la página de todos modos. Pero el cliente de WPF solo lanza una excepción.

No quiero desactivar completamente el proceso de autenticación, simplemente me gustaría dar a los usuarios la opción de ignorar esta advertencia (como lo hacen los navegadores).

¿Alguien puede proporcionar algún código para esto? Si te encuentras con un buen y detallado tutorial sobre esto, también sería increíble. (Vea, mi problema con los tutoriales que encontré es la falta de detalles)

+0

cambié la pregunta para reflejar el problema con los certificados de firma propia que no pertenece a la confianza predeterminado certificados raíz –

Respuesta

6

Puede registrar el certificado usted mismo. Si también carga el certificado en el cliente y luego lo registra como confiable, no debería recibir esa advertencia.

Debe encontrar una X509CertificateCollection y agregar el certificado a esa colección. Tuve este tipo de problema con un SmtpClient corriendo sobre Ssl.

Al conectar el System.Net.ServicePointManager.ServerCertificateValidationCallback o implementar System.Net.ICertificatePolicy e identificar mi propio certificado instalado como válidos/confianza (que se adjunta a la System.Net.ServicePointManager.CertificatePolicy).

Esto no es algo de WCF per se, pero por lo que pude ver, esto también se debe traducir a WCF. Todo depende de lo que use WCF bajo el capó.

+1

¿Podría por favor especificar dónde escribir estas cosas? ¿Qué clase debería implementar la interfaz, etc.? Soy absolutamente nuevo en este lado de WCF, nunca he usado conexiones seguras o IIS, así que aún estoy un poco perdido ... – Tenshiko

+0

Si enlazas 'System.Net.ServicePointManager.ServerCertificateValidationCallback' recibes una solicitud para validar el certificado? –

+1

Un enfoque sin código para esto sería confiar en el certificado en su máquina de desarrollo y entorno de prueba. Como se explica aquí http://stackoverflow.com/a/11296429/178620 –

12

Aquí está la cantidad mínima de código que necesita para que el cliente de WCF acepte un certificado arbitrario. Esto es no seguro. Úselo para probar solo. No me culpes si este código se vuelve loco y se come a tu pequeño gatito.

ServicePointManager.ServerCertificateValidationCallback += 
      new System.Net.Security.RemoteCertificateValidationCallback(EasyCertCheck); 

La llamada de vuelta:

bool EasyCertCheck(object sender, X509Certificate cert, 
     X509Chain chain, System.Net.Security.SslPolicyErrors error) 
{ 
    return true; 
} 

Código vergüenza levantado de la respuesta menos útiles a Is it possible to force the WCF test client to accept a self-signed certificate?

+0

Perfecto uso del lenguaje :) –

Cuestiones relacionadas