我们有一个.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记录层:警报(级别:致命,描述:关闭通知)"