Как использовать WebRequest для доступа к зашифрованному сайту SSL с помощью https?


Я пишу программу, которая читает содержимое из URL-адреса, предоставленного пользователем. Моя проблема заключается в коде, который идет примерно так:

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

и это нарушение, если предоставленные url - это URL-адрес" https://". Может ли кто-нибудь помочь мне с изменением этого кода, чтобы он работал с зашифрованным контентом SSL. Спасибо.

3 96

3 ответа:

Вы делаете это правильно, но пользователи могут предоставлять URL-адреса для сайтов, на которых установлены недействительные сертификаты ssl. Вы можете игнорировать эти проблемы cert, если вы поместите эту строку перед тем, как сделать фактический веб-запрос:

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

где AcceptAllCertifications определяется как

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

эта ссылка будет Вам интересна: http://msdn.microsoft.com/en-us/library/ds8bxk2a.aspx

для http-соединений классы WebRequest и WebResponse используют SSL для связи с веб-узлами, поддерживающими SSL. Решение об использовании SSL принимается классом WebRequest на основе заданного URI. Если URI начинается с " https:", используется SSL; если URI начинается с" http:", используется незашифрованное соединение.

Это один работал для меня:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;