¿Cómo uso WebRequest para acceder a un sitio SSL utilizando https cifrado?

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

  •  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.

¿Fue útil?

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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top