Доступ к сайту HTTPS через прокси-сервер

Я добавляю код для использования прокси-сервера для доступа в Интернет. Код отлично работает при запросе файла из обычного (HTTP) местоположения, но не работает при доступе к защищенному местоположению (HTTPS).

Это код, который работает просто отлично:

URL = "http://UnSecureSite.net/file.xml"
Dim wr As HttpWebRequest = CType(WebRequest.Create(URL), HttpWebRequest)
Dim proxy As System.Net.IWebProxy
proxy = WebRequest.GetSystemWebProxy
wr.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials
Dim ws As HttpWebResponse = CType(wr.GetResponse(), HttpWebResponse)

// (more work here)

Как только я меняю URL-адрес на HTTPS, мне возвращается ошибка 407.

У кого-нибудь есть идеи?

URL = "https://SecureSite.net/file.xml"
Dim wr As HttpWebRequest = CType(WebRequest.Create(URL), HttpWebRequest)
Dim proxy As System.Net.IWebProxy
proxy = WebRequest.GetSystemWebProxy
wr.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials
Dim myCache As New CredentialCache()
myCache.Add(New Uri("https://SecureSite.net"), "Basic", New NetworkCredential(UserName, Password))
wr.Credentials = myCache
Dim ws As HttpWebResponse = CType(wr.GetResponse(), HttpWebResponse)

// (more work here)

person Community    schedule 15.04.2009    source источник


Ответы (1)


HTTPS-запрос через веб-прокси отличается от стандартного HTTP-запроса. Обычный HTTP-запрос будет использовать метод GET. Однако запрос HTTPS должен использовать метод CONNECT. Затем прокси просто установит туннель к серверу. Последующие сообщения будут отправляться напрямую между клиентом и сервером через прокси-туннель. Прокси-сервер не может интерпретировать данные, проходящие между ними.

В обычных ситуациях:

Client -+- [CONNECT] ---> Proxy --- [DIRECT TCP] -+-> Server
        |                   |                     |
        +-------------[ENCRYPTED TCP]-------------+

Я недостаточно знаком с кодом VB, чтобы знать, происходит ли это. Однако я подозреваю, что это не так. Самый простой способ проверить — перехватить сообщение, отправляемое на прокси. Убедитесь, что он начинается с "CONNECT...".

person sybreon    schedule 16.04.2009
comment
+1 Блестящий ответ. Я часто задавался вопросом, как работает HTTPS через веб-прокси (в работе!) - person Dead account; 16.04.2009