我正在使用这段代码向给定的 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/