wcf ssl ssl-certificate self-signed wcftestclient

¿Es posible obligar al cliente de prueba WCF a aceptar un certificado autofirmado?



ssl ssl-certificate (6)

Debería poder hacer esto si reemplaza WCF Test Client con WCFStorm Lite Edition . Es gratis y es bastante más flexible que el cliente de prueba de MS ... por ejemplo, le permitirá especificar un nombre de usuario y contraseña si está haciendo la autenticación de nombre de usuario.

Tengo un servicio web WCF que se ejecuta en IIS 7 utilizando un certificado autofirmado (es una prueba de concepto para asegurarme de que esta es la ruta que quiero seguir). Se requiere el uso de SSL.

¿Es posible utilizar WCF Test Client para depurar este servicio sin necesidad de un certificado no autofirmado?

Cuando lo intento, obtengo este error:

Error: no se pueden obtener metadatos de https: ///Service1.svc. Si se trata de un servicio de Windows (R) Communication Foundation al que tiene acceso, verifique que haya habilitado la publicación de metadatos en la dirección especificada. Para obtener ayuda sobre la publicación de metadatos, consulte la documentación de MSDN en http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata URI de error de Exchange: https: ///Service1.svc Metadata contiene una referencia que no se puede resolver: ''https: ///Service1.svc''. No se pudo establecer una relación de confianza para el canal seguro SSL / TLS con autorización ''''. La conexión subyacente se cerró: no se pudo establecer una relación de confianza para el canal seguro SSL / TLS. El certificado remoto no es válido según el procedimiento de validación. HTP GET URI de error: https: ///Service1.svc Hubo un error al descargar ''https: ///Service1.svc''. La conexión subyacente se cerró: no se pudo establecer una relación de confianza para el canal seguro SSL / TLS. El certificado remoto no es válido de acuerdo con el procedimiento de validación.

EDITAR: Esta pregunta es específicamente sobre el uso de WCF Test Client para probar un servicio web ya asegurado a través de SSL utilizando un certificado autofirmado. El servidor ya está configurado para aceptar cualquier certificado proporcionado, es el WCF Test Client, no veo la manera de hacerlo.


La respuesta de esta pregunta ayudó en mi caso. Asegúrese de usar el nombre exacto de la máquina como lo espera el certificado. Para el examen machine/service.svc puede no funcionar, mientras que machine.domain/service.svc - funciona.


Para responder a su pregunta ... aquí está cómo fuerza a su cliente de pruebas WCF a aceptar un certificado autofirmado ...

using (ServiceReference1.Service1Client proxy = new ServiceReference1.Service1Client()) { System.Net.Security.RemoteCertificateValidationCallback callBack = (sender, certificate, chain, sslPolicyErrors) => true; ServicePointManager.ServerCertificateValidationCallback += callBack; Console.WriteLine(proxy.GetData(35)); ServicePointManager.ServerCertificateValidationCallback -= callBack; }


Puede crear un certificado no autofirmado en el área de desarrollo y luego usar este certificado en IIS para aplicar el SSL. Los pasos son:

  1. Crear certificado autofirmado

    makecert -r -pe -n "CN=My Root Authority" -a sha1 -sky signature -ss CA -sr CurrentUser -cy authority -sv CA.pvk CA.cer

  2. Cree un certificado no autofirmado para SSL firmado por este certificado raíz y luego cree el archivo pfx a partir de ese

    makecert -pe -n "CN=servername" -a sha1 -sky exchange -eku 1.3.6.1.5.5.7.3.1 -ic CA.cer -iv CA.pvk -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 -sv server.pvk server.cer pvk2pfx -pvk server.pvk -spc server.cer -pfx server.pfx

ahora solo tiene que importar server.pfx al IIS y configurar el enlace del sitio web para usar este certificado y también instalar CA.cer en la Local Computer / Trusted Root Certification Authorities store en ambos servidor y cliente haciendo esto WCF client trabaje con el servicio a través de HTTPS sin ningún problema.


Puede suministrar su propio método para validar el certificado.

Prueba esto:

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

La devolución de llamada:

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