lunes, 27 de octubre de 2008

Saltar Validación de Certificado en una Conexión SSL

Como mi primera aportación, voy a indicar un pequeño truco para saltarse por código la validación del certificado servidor al establecer una comunicación SSL (válido xej para conexiones a Servicios Web Securizadas)
El problema viene cuando el certificado utilizado en el servidor de desarrollo para establecer SSL está revocado, caducado, con un DN de prueba etc... Al intentar realizar la conexión al equipo remoto por HTTPS notaremos como nos es imposible ya que el mismo framework nos denegará el acceso.
Podemos comprobar que la conexión no es de confianza si lanzamos un IE y obtenemos un warning indicandonos que la conexión es inválida debido a defectos en el certificado. El navegador nos permitirá omitir este error y proseguir pero... Cómo omitimos esta validación desde código??

Bien, solo tenemos que suscribirnos al evento de validación del certificado en local, y generosamente, permitir la conexión para cualquier certificado siguiendo el siguiente ejemplo (Importante: Este ejemplo es válido para FrameWork 2.0 en adelante)

Previo a la llamada:
// Creamos un delegado para aprobar el certificado cuando se realize la peticion
RemoteCertificateValidationCallback remoteCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
//Lo asignamos a la llamada de vuelta
ServicePointManager.ServerCertificateValidationCallback += remoteCallback;

Y en el procedimiento de validacion

public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
//Validamos el certificado
return true;
}


Bueno, espero solucione muchas depuraciones ;)

No hay comentarios: