consumir vb.net web-services ssl

vb.net - consumir web service https c#



.net WebService, bypass ssl validation! (5)

Debe manejar el evento que valida el certificado y simplemente configurarlo para que siempre devuelva verdadero. Vea la siguiente publicación para más detalles:

http://8r13n.wordpress.com/2007/07/24/bypassing-certificate-validation-in-net/

Estoy trabajando bien contra un servicio web que tiene un certificado que no está configurado al 100% correctamente. El certificado está configurado para el dominio * .domain1.com y la API se encuentra en soap.shop.domain1.com/SOAP ahora no puedo conectarme a este webservice porque luego obtengo una WebException "No se pudo establecer una relación de trush para el canal seguro SSL / TLS. -> El certificado remoto no es válido según el procedimiento de validación.

Ahora mi pregunta es si hay alguna forma de eludir esta verificación. Utilizo una referencia web normal (2.0) y no una referencia de servicio.


Para aquellos que no pueden determinar por dónde comenzar con esta respuesta, puede que no sea obvio. Los carteles de arriba lo están haciendo bien, pero no fue aparente desde el principio sobre qué hacer con el código dado.

Supongamos que tiene una clase en alguna parte que necesita llamar a un servicio web con un certificado.

Aquí está mi solución terminada:

public class MyClass { public bool TrustAllCertificatesCallback(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors errors) { return true; } public string CallSomeWebService(string someParam) { try { ServicePointManager.ServerCertificateValidationCallback = TrustAllCertificatesCallback; RemoteWebService ws = new RemoteWebService(); //add the client cert to the web service call. ws.ClientCertificates.Add(GetMyCert()); //call the web service string response = ws.SomeMethod(someParam); return response.ToString(); } catch (Exception ex) {throw;} } public X509Certificate GetMyCert() { try { string certPath = @"C:/MyCerts/MyCert.cer"; var cert = X509Certificate.CreateFromCertFile(certPath); return cert; } catch (Exception ex) {throw;} } }


Sí, puede usar lo siguiente para que ASP.NET ignore las advertencias de los certificados:

using System; using System.Net; using System.Security.Cryptography.X509Certificates; namespace YourNamespace public class TrustAllCertificatePolicy : System.Net.ICertificatePolicy { public TrustAllCertificatePolicy() {} public bool CheckValidationResult(ServicePoint sp, X509Certificate cert,WebRequest req, int problem) { return true; } } }


elige tu sabor ...

Expresiones lambda

//Trust all certificates System.Net.ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true); // trust sender (more secure) System.Net.ServicePointManager.ServerCertificateValidationCallback = ((sender, cert, chain, errors) => cert.Subject.Contains("YourServerName"));

o clode simple (mejor para probar)

// validate cert // allows for validation of SSL conversations ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateRemoteCertificate); // callback used to validate the certificate in an SSL conversation private static bool ValidateRemoteCertificate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors policyErrors) { bool result = false; if (cert.Subject.ToUpper().Contains("YourServerName")) { result = true; } return result; }


System.Net.ServicePointManager.ServerCertificateValidationCallback = _ Function(a, b, c, d) True