4

我们有一个 .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 Record Layer: Alert (Level: Fatal, Description: Close Notify)”

  1. 有没有一种方法可以为单个请求将 SecurityProtocol 设置为 Ssl3?
  2. 当 SecurityProtocol = Tls | 时我们还能做些什么吗?ssl3 允许请求工作吗?
  3. 有什么我可以告诉我们的第三方,运行 Lotus-Domino 服务器来解决他们这边的连接问题。
4

0 回答 0