2010-04-16 18 views
7

Estoy tratando de portar una aplicación de cliente WCF existente para ejecutar en Linux bajo Mono. En este momento estoy probando todo, averiguando qué funciona en Mono y qué no.WCF Mono - BasicHttpBinding con SSL

El cliente hace una llamada muy simple sobre basicHttpBinding. Funciona muy bien, hasta que habilite SSL (es decir, especifique BasicHttpSecurityMode.Transport en el enlace).

  • se ejecutan en .NET en Windows, funciona muy bien
  • Correr en Mono en Ubuntu 9.10/Mono 2.6 me sale el siguiente error:

Exception in async operation: System.Net.WebException: Error getting response stream (Write: The authentication or decryption has failed.): SendFailure ---> System.IO.IOException: The authentication or decryption has failed. ---> Mono.Security.Protocol.Tls.TlsException: Invalid certificate received from server. Error code: 0xffffffff800b010a

He leído el Mono security FAQ; sin embargo, el certificado SSL en el servidor proviene de una CA raíz (un certificado comprado) emitido por Equifax Secure Certificate Authority. Ejecuté la herramienta TlsTest en la instalación de Ubuntu contra la URL .svc y no hay problemas/errores. También puedo golpear bien el servicio en Firefox (sin advertencias de seguridad).

¿Qué me estoy perdiendo?

Respuesta

2

El archivo TlsTest de Mono es realmente bueno para comprobar esto, por lo que parece un poco tonto incluso preguntar, pero ¿se puede utilizar el WebClient para realizar una solicitud al archivo .svc y obtener una respuesta? De lo contrario, probablemente haya problemas con el certificado por algún motivo.

¿También estoy adivinando que ha utilizado las herramientas mozroots o certmgr para verificar que la CA raíz está allí? ¿Qué hay de agregar explícitamente el certificado en su sitio a la tienda a través de certmgr?

Un recordatorio más: la herramienta certmgr generalmente trabaja en una copia de los certs para el usuario actual, necesita especificar el arg --machine para que todos los usuarios obtengan el certificado.

+0

Gracias por su respuesta! Probé usando una WebRequest simple con el mismo resultado. Sin embargo, creo que ahora veo el problema: instalé el Mono 2.6 lado a lado con el paquete Mono 2.4 que se incluye con Ubuntu 9.10. Tenía que hacer esto, porque mis llamadas WCF HTTPS siempre fallarían en 2.4 (obtenía una NotImplementedException de HttpsTransportBindingElement). Hice una aplicación de prueba simple que hace una simple WebRequest. Cuando ejecuto en 2.6, falla con un certificado no válido. Cuando lo ejecuto en 2.4, ¡funciona! Así que, obviamente, mi certificado no es visible para Mono 2.6 ..... – TheNextman

0

He encontrado algún truco para eliminar el error:

using System.Security.Cryptography.X509Certificates; 

public class HttpWebRequestClientCertificateTest : ICertificatePolicy { 



    public bool CheckValidationResult (ServicePoint sp, X509Certificate certificate, 

     WebRequest request, int error) 

     { 

      return true; 

     } 

    } 

..... 

ServicePointManager.CertificatePolicy = new HttpWebRequestClientCertificateTest(); 

HttpWebRequest request = ... 

Tal vez va a trabajar para otros que tienen que fallo en Mono 2.6.

+3

Sí, esto funciona, y elimina el error, pero no soluciona el problema. Realmente no deberías usar esto en el código de producción ... – TheNextman

Cuestiones relacionadas