【问题标题】:Accessing HTTPS site through Proxy Server通过代理服务器访问 HTTPS 站点
【发布时间】:2010-10-19 16:28:02
【问题描述】:

我正在添加代码以使用代理服务器访问 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)

只要我将 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)

【问题讨论】:

    标签: vb.net proxy https


    【解决方案1】:

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

    正常情况下:

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

    我对 VB 代码不够熟悉,不知道是否发生了这种情况。但是,我怀疑它不是。最简单的检查方法是拦截发送到代理的消息。确保它以“CONNECT ...”开头。

    【讨论】:

    • +1 绝妙的答案。我经常想知道 HTTPS 是如何通过网络代理工作的(在工作中!)
    猜你喜欢
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多