【问题标题】:ServicePointManager doesn't support https proxy?ServicePointManager 不支持 https 代理?
【发布时间】:2017-11-21 11:52:56
【问题描述】:

我在某些客户端上通过 Internet 请求 HTTPS 服务时遇到问题,当我尝试这样做时,会抛出“ServicePointManager 不支持使用 https 方案的代理”的异常。在某些客户端上,我的代码可以正常工作,但在某些客户端上却出现异常。我认为代码工作正常的客户有http代理,https流量来自http代理,这很好。

这个函数创建一个新的请求:

var req = (HttpWebRequest)WebRequest.Create(url);

// This thing is needed to get default proxy
// and user credentials written in iexplore
var proxy = req.Proxy;
if(proxy != null) {
    var puri = proxy.GetProxy(req.RequestUri);
    var prox = new WebProxy(puri.ToString());

    prox.Credentials = CredentialCache.DefaultCredentials;
    req.UseDefaultCredentials = true;
    req.Proxy = prox;
}

// Setting up custom cookies and UA
req.CookieContainer = Config.Cookies;
req.UserAgent = Config.UserAgent;

这就是我接受所有证书的方式:

ServicePointManager.ServerCertificateValidationCallback = 
(sender, cert, chain, sslpolicy) => true;

ServicePointManager 似乎实际上不支持通过 https 使用代理。我该如何解决这个问题?如果我以某种方式使 https WebRequest 通过 http 代理而不是 https 会怎样,如果可以,我该怎么做?

【问题讨论】:

  • 嗯,“这个东西是获取默认代理所必需的”是不正确的。默认代理通常使用 HttpWebRequest.Proxy = WebRequest.GetSystemWebProxy() 设置。然后,这取决于您尝试在哪里进行身份验证。如果是通过 NTLM/Kerberos,则不支持代理身份验证。
  • @Jimi,不过这个东西可以用。
  • 你说它不适合你们中的一些人。您正在配置的代理是您的本地代理,而不是远程代理。如果遥控器不让您通过 Https 通过,请尝试通过 Http 调用它。这通常是可能的。
  • @Jimi,我正在使用 iexplore 中设置的代理设置,它需要 iexplore 中设置的用户凭据和代理地址。我不知道每个客户使用什么代理以及他/她使用什么凭证来访问互联网。此代码应该并且可以与 http 代理一起正常工作。问题是 ServicePointManager 不适用于 https 代理。
  • 总结一下:这是已知的问题。通过在构建代理 Uri 时不使用 https 架构并使用 http 来解决。在其他情况下,设置 BypassOnLocal 而不指定默认代理。

标签: c# .net https proxy


【解决方案1】:

是的,你是对的,ServicePointManager 似乎不支持 https 方案的代理。

如果您将方案从 HTTPS 更改为 HTTP,它将正常工作。

这只是客户端和代理之间的初始请求,不安全或不通过 SSL。通过代理隧道传输的流量是否加密取决于服务器。

如果您尝试通过 HTTP 代理访问任何 SSL 服务器,流量仍然是加密的。

假设您仍然尝试通过 HTTPS 代理访问 HTTP 服务器,流量未加密。

【讨论】:

    猜你喜欢
    • 2010-10-31
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 2022-01-12
    • 1970-01-01
    相关资源
    最近更新 更多