Я делаю веб-запрос в приложении winforms. Я обеспечиваю проверку пользовательских сертификатов, так как:Почему мой ServicePointManager.ServerCertificateValidationCallback игнорируется?
ServicePointManager.ServerCertificateValidationCallback +=
new RemoteCertificateValidationCallback(certValidator.ValidateRemoteCertificate);
где certValidator.ValidateRemoteCertificate является
public bool ValidateRemoteCertificate(object sender, X509Certificate certificate,
X509Chain chain, SslPolicyErrors policyErrors)
{
return false;
}
Как вы можете видеть, этот обратный вызов должен отклонить все сертификаты сервера и закрыть любые попытки соединения.
Моя проблема заключается в том, что этот обратный вызов полностью игнорируется. Я отправляю запрос https и работает как шарм. Наблюдая за этим в отладчике, я вижу, что ValidateRemoteCertificate
никогда не вызывается.
Почему мой обратный вызов замены никогда не возвращался?
EDIT: LB попросил WebRequest, так вот она:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(sourceUrl);
request.UseDefaultCredentials = true;
request.UserAgent = "Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))";
request.KeepAlive = false;
request.Headers.Add("Accept-Language", "en-us,en;q=1.0");
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
EDIT 2: Это, вероятно, связаны между собой, но в файле .config Поручаю его использовать настроенный прокси-сервер следующим образом:
<system.net>
<defaultProxy useDefaultCredentials="true"/>
</system.net>
EDIT 3: Ниже приведен полный, минимальный пример, демонстрирующий поведение. Я ожидаю, что в этом примере выйдет исключение, потому что все сертификаты должны быть отклонены, но все работает отлично.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
namespace SPMCertCallbackDemonstrator
{
class Program
{
static void Main(string[] args)
{
ServicePointManager.ServerCertificateValidationCallback = delegate { return false;};
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.google.com");
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
}
}
}
Почему мой обратный вызов замены никогда не перезвонил?
'Я отправляю запрос https и работает как шарм. 'Где код для этого? –
Отредактировано для включения кода запроса https. – Eric
В какой момент вы фактически регистрируете обратный вызов валидации? При запуске приложения или ...? –