Как использовать 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-зашифрованным контентом. Спасибо.
Ответы
Ответ 1
Вы делаете это правильно, но пользователи могут предоставлять URL-адреса сайтам, на которых установлены недействительные сертификаты ssl. Вы можете игнорировать эти проблемы с сертификатами, если вы поместите эту строку, прежде чем вы сделаете фактический веб-запрос:
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;
}
Ответ 2
Эта ссылка будет вам интересна: http://msdn.microsoft.com/en-us/library/ds8bxk2a.aspx
Для http-соединений классы WebRequest и WebResponse используют SSL для связи с веб-хостами, поддерживающими SSL. Решение использовать SSL производится классом WebRequest на основе его URI. Если URI начинается с "https:", используется SSL; если URI начинается с "http:", используется незашифрованное соединение.
Ответ 3
Это работало для меня:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;