HttpWebRequest到SSL失败

Mar*_*nHN 2 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)req.GetResponse())
  {
    using (StreamReader sr = new StreamReader(res.GetResponseStream()))
    {
      sid = sr.ReadToEnd().Trim();
    }
  }

  return sid;
}
Run Code Online (Sandbox Code Playgroud)

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

对于带有HTTP的URL,这可以正常工作.但是使用HTTPS它不起作用.我得到这个例外:

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

目前,我只有2台WLB后面的服务器,另一台独立于防火墙后面的公共IP.如果我点击独立服务器,HTTPS请求工作正常 - 但是当我点击WLB时,我得到上述错误.

一件事:为了在命中单个服务器和WLB之间切换我使用我的主机文件.我的域的DNS记录目前指向单个服务器.所以我在主机文件中放入一条记录来点击WLB.这不应该导致问题......

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

Mar*_*nHN 7

它在我的浏览器中完美运行.

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

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
Run Code Online (Sandbox Code Playgroud)

这意味着HttpWebRequest正在使用TLS 1.0 - 我不知道,但我认为这是40位DES或56位DES,在WLB中被禁用.