¿Cuál es la mejor manera de manejar certificados SSL sin validación en C #?

StackOverflow https://stackoverflow.com/questions/129544

  •  02-07-2019
  •  | 
  •  

Pregunta

Estoy usando el siguiente código para asegurarme de que todos los certificados pasan, incluso los inválidos, pero me gustaría saber si hay una mejor manera, ya que este evento se llama globalmente y solo quiero que el certificado pase por un cierta llamada HTTP y no para cualquier otra que ocurra de forma asincrónica.

// This delegate makes sure that non-validating SSL certificates are passed
ServicePointManager.ServerCertificateValidationCallback = delegate(object certsender, X509Certificate cert, X509Chain chain, System.Net.Security.SslPolicyErrors error)
{
   return true;
};

El código anterior es solo un ejemplo de ignorar cualquier no validación en el certificado. El problema que tengo es que es un evento global . No puedo ver para qué sesión está ocurriendo el evento. Es posible que tenga un par de solicitudes HTTP en curso y quiero pedirle al usuario una acción para cada solicitud .

¿Fue útil?

Solución

¿Qué pasa con el argumento certsender ? ¿Contiene algo sensato para que pueda saber para qué conexión está ocurriendo la devolución de llamada? Revisé la API de .NET pero no dice qué se supone que contiene el argumento ...

Otros consejos

Bueno, en realidad podría molestarse en verificar algunos de esos parámetros. ;) Por ejemplo, si tiene un certificado autofirmado, solo permita que error = = SslPolicyErrors.RemoteCertificateChainError a través de. También puede verificar el emisor, el nombre, etc. en el certificado mismo para obtener seguridad adicional.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top