¿Cómo uso WebRequest para acceder a un sitio SSL utilizando https cifrado?
-
05-09-2019 - |
Pregunta
Estoy escribiendo un programa que lee el contenido de un URL proporcionado por el usuario. Mi problema está en el código que dice algo como esto:
Uri uri = new Uri(url);
WebRequest webRequest = WebRequest.Create(uri);
WebResponse webResponse = webRequest.GetResponse();
ReadFrom(webResponse.GetResponseStream());
Y esto es romper si el proporcionado URL es un "https: //" URL. ¿Puede alguien ayudarme con el cambio de este código para que se trabajará con SSL contenido cifrado. Gracias.
Solución
Usted está haciendo de la manera correcta, pero los usuarios pueden estar ofreciendo URLs a sitios que tienen certificados SSL no válidos instalados. Puede pasar por alto esos problemas cert si se pone en esta línea antes de hacer la solicitud web actual:
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);
donde AcceptAllCertifications
se define como
public bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
return true;
}
Otros consejos
Este enlace será de interés para usted: http://msdn.microsoft .com / es-es / library / ds8bxk2a.aspx
para las conexiones HTTP, las clases WebRequest y WebResponse utilizan SSL para comunicarse con los servidores web que soportan SSL. La decisión de utilizar SSL se realiza por la clase WebRequest, basado en el URI se da. Si el URI comienza con "https:", se usa SSL; si el URI comienza con "http:"., se utiliza una conexión no cifrada
Éste trabajó para mí:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;