ServicePointManager.SecurityProtocol = Tls |时,WebRequest失败SSL3

时间:2013-09-20 17:54:01

标签: .net ssl lotus-domino webrequest

我们有一个.Net 4应用程序,它向运行Lotus-Domino的第三方服务器发出https请求。我们使用System.Net.WebRequest来发出请求。当ServicePointManager.SecurityProtocol设置为默认值时,即Tls | Ssl3,然后请求失败。特别是WebRequest.GetResponse抛出异常:WebException:"请求被中止:无法创建SSL / TLS安全通道。"

代码就像这样简单:

WebRequest request = WebRequest.Create("https://SOMEURLHERE");

using (HttpWebResponse response = (HttpWebResponse) request.GetResponse())
{
    using (StreamReader responseReader = new StreamReader(response.GetResponseStream()))
    {
          string responseTest = responseReader.ReadToEnd();
    }
}

将ServicePointManager.SecurityProtocol更改为Ssl3可使请求成功。使用此作为修复程序会带来一些挑战。 ServicePointManager.SecurityProtocol是静态的,因此更改它将更改应用程序中的所有请求。这是我们不想做的事情。更改它,然后在请求不合适之后将其重置为默认值,因为我们的应用程序从多个步骤发出http请求,引入锁定将有效地迫使我们在可能冗长的Web服务调用期间运行单线程。

第三方Lotus-Domino服务器不支持TLS。

我查看了Wireshark中的请求/响应,但是我不熟悉协议,因此我无法看到任何有意义的内容。

未验证证书无法解决问题,例如ServicePointManager.ServerCertificateValidationCallback = delegate {return true; };

我确实从服务器看到此响应:" SSLv3记录层:警报(级别:致命,描述:关闭通知)"

  1. 我们有办法为单个请求设置SecurityProtocol为Ssl3吗?
  2. 当SecurityProtocol = Tls |时,我们可以做的其他事情Ssl3允许请求工作吗?
  3. 我可以告诉我们的第三方,运行Lotus-Domino服务器以解决他们这方面的连接问题。

0 个答案:

没有答案