我正在使用此代码向请求的网址发出请求:

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后面只有2台服务器,而且防火墙后面有一台公共IP。如果我点击独立服务器,HTTPS请求工作正常 - 但是当我点击WLB时,我得到上述错误。

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

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

有帮助吗?

解决方案

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

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

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

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

其他提示

您可能需要考虑使用负载均衡器。我们使用的那些在不安全的HTTP连接上将HTTPS安全流量转发到其后面的服务器。负载均衡器和浏览器之间的连接仍然是安全的,但平衡器和Web服务器之间不需要安全协议的过头。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top