2

我正在使用此代码向给定 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 后面只有 2 台服务器,另外一台在防火墙后面有一个公共 IP。如果我点击独立服务器,HTTPS 请求可以正常工作 - 但是当我点击 WLB 时,我会收到上述错误。

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

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

4

2 回答 2

7

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

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

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

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

于 2008-10-23T08:31:05.903 回答
0

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

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

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

于 2008-10-23T08:40:57.473 回答