WebRequest + SSL + proxy (NTLM)
От: lexile  
Дата: 17.02.09 16:05
Оценка:
Собственно, что имеем: Vista, .NET Framework 3.5 SP1
Делаю запрос к некоторому ресурсу https://aaa.bbb.ccc/, используя WebRequest. Код примерно такой:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://aaa.bbb.ccc/ddd/");
request.ClientCertificates.Add(x509Certificate);
IWebProxy webProxy = WebRequest.DefaultWebProxy;
webProxy.Credentials = CredentialCache.DefaultCredentials;
request.Proxy = webProxy;
request.GetResponse().Close();

На выходе получаю 407 — Proxy authorization required. При том, что IE без проблем проходит через проксю и получает заветную страничку.
Если посмотреть пакетики, которые идут на прокси, то видно, что значение заголовка Proxy-Authorization отличатеся от такового, посылаемого експлорером.
Конвертим значения этих заголовков из Base64, получаем:
"NTLM <кракозябры><user><domain>" - значение заголовка из запроса браузера
"NTLM <кракозябры>" - значение заголовка из запроса WebRequest

Получается, что WebRequest пытается использовать пустые имя/домен. Прямое указание Credential'ов WebRequest'у (request.Proxy.Credentials = new CredentialCache(......)) и всякие другие шаманства не помогают, то же значение заголовка и, в итоге 407.
Собственно, есть KB Article со схожими симптомами: http://support.microsoft.com/kb/928563
В статейке написано:

Note This problem does not occur in the Microsoft .NET Framework 1.1.

Попробовал собрать под .NET 1.1, и действительно все заработало — WebRequest успешно получил заветную страничку.
Странно то, что этот фикс уже входит в сервис паки для .NET Framework, и, соответственно, у меня все должно работать.
Вопрос в том, сталкивался ли кто-нибудь с такой проблемой, и можно ли как-нибудь заставить это работать на фреймворке 2.0?
Любые идеи и предложения приветствуются
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.