通过代理服务器访问HTTPS站点

1 vb.net https proxy

我正在添加代码以使用代理服务器访问Internet.从正常(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)
Run Code Online (Sandbox Code Playgroud)

一旦我将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)
Run Code Online (Sandbox Code Playgroud)

syb*_*eon 5

通过Web代理的HTTPS请求与标准HTTP请求不同.常规HTTP请求将使用GET方法.但是,HTTPS请求需要使用CONNECT方法.然后,代理将仅建立到服务器的隧道.后续消息将通过代理隧道直接在客户端和服务器之间发送.代理无法解释其间流动的数据.

在正常情况下:

Client -+- [CONNECT] ---> Proxy --- [DIRECT TCP] -+-> Server
        |                   |                     |
        +-------------[ENCRYPTED TCP]-------------+
Run Code Online (Sandbox Code Playgroud)

我对VB代码不够熟悉,不知道是不是发生了什么.但是,我怀疑它不是.最简单的检查方法是拦截发送给代理的消息.确保它以"CONNECT ..."开头.