C# 透明代理在通过https访问时提供SSL错误

C# 透明代理在通过https访问时提供SSL错误,c#,https,proxy,C#,Https,Proxy,在我的公司环境中,有一个透明的代理,需要凭据才能访问internet(每四小时一次)。在我的应用程序中,我成功地传递了如下凭据: var client = new WebClient(); client.Credientals = new NetworkCredential("username", "password"); string result = client.DownloadString("http://..."); // this works! 但是,当我的初始请求指向“https

在我的公司环境中,有一个透明的代理,需要凭据才能访问internet(每四小时一次)。在我的应用程序中,我成功地传递了如下凭据:

var client = new WebClient();
client.Credientals = new NetworkCredential("username", "password");
string result = client.DownloadString("http://...");
// this works!
但是,当我的初始请求指向“https://”url时,会引发异常:“基础连接已关闭:无法为SSL/TLS安全通道建立信任关系。”

现在,我目前的工作是:

  • 捕获访问“https://”url时引发的WebException
  • 将我的凭据添加到任意“http://”站点的新请求中
    • (这将“打开”互联网四个小时的窗口)
  • 返回并重试“https://”请求

我想知道是否有更好/更干净的方法来做到这一点?

您现在使用的是带有身份验证的HTTP代理。到现在为止,一直都还不错。但它不适用于HTTPS请求,原因如下:

SSL/TLS是端点安全。这意味着数据必须通过单一加密通道在客户端和服务器之间发送

当您连接到HTTP代理时,您告诉它“获取远程资源并将其发送给我”,这与端点安全性相矛盾。在这里,您没有与远程服务器的直接连接,并且无法验证其凭据。代理还可以窥视您的数据

通常,可以使用HTTPS连接到常规HTTP代理,也可以要求HTTP代理访问HTTPS资源,但这会破坏安全性,因为在这两种情况下,客户端无法验证服务器的凭据,HTTP代理可以记录或更改传输的数据

HTTPS代理以不同的方式工作。在这里,您告诉HTTPS代理服务器“连接到远程地址,然后只重新发送传递的内容”。通过这种方式,代理在客户端和服务器之间创建一个不透明的安全通道,从而保护端点安全。实际上,HTTPS代理可以用于隧道任何流量,不一定是SSL

因此,您需要通过发送连接请求(包括身份验证)来建立隧道,然后通过同一通道发送常规HTTP GET(URL中没有主机/地址)-此请求将发送到目标服务器,而不是代理服务器


我非常怀疑您的网络客户端是否可以在发送请求之前建立一个隧道。作为一种选择,您可以使用我们的SecureBackbox产品包,该产品包允许您访问HTTP和HTTPS资源,并支持HTTPS代理(在SecureBackbox中称为WebTunneling)和身份验证。

您现在使用的是带有身份验证的HTTP代理。到现在为止,一直都还不错。但它不适用于HTTPS请求,原因如下:

SSL/TLS是端点安全。这意味着数据必须通过单一加密通道在客户端和服务器之间发送

当您连接到HTTP代理时,您告诉它“获取远程资源并将其发送给我”,这与端点安全性相矛盾。在这里,您没有与远程服务器的直接连接,并且无法验证其凭据。代理还可以窥视您的数据

通常,可以使用HTTPS连接到常规HTTP代理,也可以要求HTTP代理访问HTTPS资源,但这会破坏安全性,因为在这两种情况下,客户端无法验证服务器的凭据,HTTP代理可以记录或更改传输的数据

HTTPS代理以不同的方式工作。在这里,您告诉HTTPS代理服务器“连接到远程地址,然后只重新发送传递的内容”。通过这种方式,代理在客户端和服务器之间创建一个不透明的安全通道,从而保护端点安全。实际上,HTTPS代理可以用于隧道任何流量,不一定是SSL

因此,您需要通过发送连接请求(包括身份验证)来建立隧道,然后通过同一通道发送常规HTTP GET(URL中没有主机/地址)-此请求将发送到目标服务器,而不是代理服务器


我非常怀疑您的网络客户端是否可以在发送请求之前建立一个隧道。作为一种选择,您可以使用我们的SecureBackbox产品包,它允许您访问HTTP和HTTPS资源,并支持HTTPS代理(在SecureBackbox中称为WebTunneling)和身份验证。

这似乎是个坏主意。是否确实要在清除中公开潜在的敏感数据?没有敏感数据通过清除发送(据我所知)。我添加到一般“http”请求的凭据被透明代理截获。然后我重试原始的“https”请求(由于透明代理已经对我进行了身份验证,现在可以正常工作了)。听起来您构建的是中间人服务器或直通服务器,而不是真正的代理(类似但不同)。无论哪种方式,如果您允许代理的用户允许任何站点通过它,您都可能会暴露敏感数据。基本上,我只是试图传递我的凭据,使公司互联网允许我访问互联网。当我将它们添加到http请求时,一切都正常,但当我将它们添加到https请求时,会出现SSL错误。可能是他们设立公司代理的方式?我不确定类似于:这似乎是个坏主意。是否确实要在清除中公开潜在的敏感数据?没有敏感数据通过清除发送(据我所知)。我添加到一般“http”请求的凭据被透明代理截获。然后我重试原始的“https”请求(由于透明代理已经对我进行了身份验证,现在可以正常工作了)。听起来您构建的是中间人服务器或直通服务器,而不是真正的代理(类似但不同)。无论哪种方式,如果您允许代理的用户允许任何站点通过它,您都可以