C# 对SSL的HttpWebRequest失败

C# 对SSL的HttpWebRequest失败,c#,ssl,httpwebrequest,C#,Ssl,Httpwebrequest,我正在使用以下代码向给定URL发出请求: private static string GetWebRequestContent(string url) { string sid = String.Empty; HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url); req.KeepAlive = false; using (HttpWebResponse res = (HttpWebResponse)r

我正在使用以下代码向给定URL发出请求:

private static string GetWebRequestContent(string url)
{
  string sid = String.Empty;

  HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
  req.KeepAlive = false;

  using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
  {
    using (StreamReader sr = new StreamReader(res.GetResponseStream()))
    {
      sid = sr.ReadToEnd().Trim();
    }
  }

  return sid;
}
我用它来测试工作负载平衡器的粘性,它后面有3台服务器。它们都有一个名为sid.HTM的静态HTM文件,其中写入了服务器的服务器ID

对于带有HTTP的URL,这很好。但使用HTTPS则不起作用。我得到一个例外:

请求被中止:无法创建SSL/TLS安全通道

目前,我在WLB后面只有两台服务器,在防火墙后面有一台独立的公共IP服务器。如果我点击独立服务器,HTTPS请求可以正常工作——但当我点击WLB时,我会出现上述错误

有一件事:为了在单一服务器和WLB之间切换,我使用我的hosts文件。我的域的DNS记录此时指向单个服务器。所以我在我的hosts文件中放了一个记录来点击WLB。这不应该造成问题


我的问题:HttpWebRequest使用哪些SSL凭据/证书?如果它使用40位DES或56位DES,这就是原因,因为它们在WLB中被禁用。但是自从IE3和Netscape 1和2以来,这些证书就没有在浏览器中使用过。

它在我的浏览器中运行得非常好

我在发布问题1分钟后找到了解决方案:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

这意味着HTTPWebRebug使用TLS 1——我不知道,但是我假设是40位DES或56位DES,它在WLB中被禁用。

有可能需要考虑负载均衡器。我们使用的是通过不安全的HTTP连接将HTTPS安全通信转发给它后面的服务器。负载平衡器和浏览器之间的连接仍然是安全的,但平衡器和web服务器之间不需要过度使用安全协议

我们希望在web服务器上检测安全连接,但最初从未看到HTTPS连接。就在那时,我们意识到平衡器后面的交通是不安全的。一旦我们知道就有意义了

我们现在要做的是将所有进入平衡器(端口443)的安全流量转发到端口81(Altenactive HTTP),然后将所有正常HTTP流量(端口80和81)转发到端口80。然后我们可以检查web服务器上的端口,知道80是不安全的,81是浏览器和平衡器之间的安全流量,尽管事实上它在web服务器上都是HTTP