【问题标题】:HttpWebRequest to SSL fails对 SSL 的 HttpWebRequest 失败
【发布时间】:2010-09-18 17:45:56
【问题描述】:

我正在使用此代码向给定 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 开始就没有在浏览器中使用过。

【问题讨论】:

    标签: c# ssl httpwebrequest


    【解决方案1】:

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

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

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
    

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-03
        • 2010-09-19
        • 1970-01-01
        相关资源
        最近更新 更多