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

  return sid;
}

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

对于带有 HTTP 的 URL,这可以正常工作。但是使用 HTTPS 是行不通的。我得到这个异常(exception):

The request was aborted: Could not create SSL/TLS secure channel.

目前,我在 WLB 后面只有 2 台服务器,另外一台在防火墙后面有一个公共(public) 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 中被禁用。

关于c# - 对 SSL 的 HttpWebRequest 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/228931/

相关文章:

c# - 在 C# 中,如何单向序列化不可序列化的对象?

java - Webview SSL 认证错误不受信任

ssl - AES, key 是如何分配的?

c# - 既然可以继承普通类,为什么还需要抽象类?

c# 表单集合值到 Int 列表

c# - 错误 : C# The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel

c# - 使用 Httpwebrequest 发送文件

.net - 通过身份验证自动从网站下载图片,第二部分

c# - 使用 c# 和 asp.net 将 HTML 内容转换为 Pdf

ssl - Docker 容器 SSL 证书