web-dev-qa-db-fra.com

Comment utiliser WebRequest pour accéder à un site crypté SSL à l'aide de https?

J'écris un programme qui lit le contenu à partir d'une URL fournie par l'utilisateur. Mon problème est dans le code qui va quelque chose comme ça:

Uri uri = new Uri(url);
WebRequest webRequest = WebRequest.Create(uri);
WebResponse webResponse = webRequest.GetResponse();
ReadFrom(webResponse.GetResponseStream());

Et cela se casse si le rl fourni est une URL "https: //". Quelqu'un peut-il m'aider à modifier ce code afin qu'il fonctionne avec du contenu crypté SSL. Merci.

104
Alfred B. Thordarson

Vous le faites correctement, mais les utilisateurs peuvent fournir des URL aux sites sur lesquels des certificats SSL non valides sont installés. Vous pouvez ignorer ces problèmes de certificat si vous mettez cette ligne avant de faire la demande Web réelle:

ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);

AcceptAllCertifications est défini comme

public bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
    return true;
}
168
LukeDuff

Ce lien vous intéressera: http://msdn.Microsoft.com/en-us/library/ds8bxk2a.aspx

Pour les connexions http, les classes WebRequest et WebResponse utilisent SSL pour communiquer avec les hôtes Web qui prennent en charge SSL. La décision d'utiliser SSL est prise par la classe WebRequest, en fonction de l'URI qui lui est attribué. Si l'URI commence par "https:", SSL est utilisé. si l'URI commence par "http:", une connexion non chiffrée est utilisée.

18
GurdeepS

Celui-ci a fonctionné pour moi:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
14
Nani