我们有一个内部应用程序可以向我们的供应商站点发出 XML 调用。出于 PCI 合规性和安全原因,他们开始禁用除 TLS 1.1 和 TLS 1.2 之外的所有功能。他们已经根据这一新要求建立了一个测试站点,供我们进行测试。
我们的应用程序(C#、Windows Forms 应用程序、.NET 4.5) 可以很好地连接到他们当前的站点。
当我尝试调用他们的新测试站点时,它在 GetRequestStream()
调用中失败,并显示“基础连接已关闭:发送时发生意外错误。”
如果我更新应用程序并设置: System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12
然后它通过 GetRequestStream()
获取并在 GetResponse()
调用上失败,并显示“基础连接已关闭:连接意外关闭。”
我尝试了很多东西,但都没有用。我正在设置 UserAgent,我尝试设置 KeepAlive = false,...
如果我在浏览器中转到供应商 URL,我可以很好地找到它。我的 C#
应用程序有问题
有什么想法吗?我显然无权访问他们的服务器。我的机器上是否有我需要更改的设置?
最佳答案
我认为您的请求很可能在 TLS 协商阶段失败。我自己也遇到过类似的问题,通常归结为必须使用网络协议(protocol)分析器(例如 wireshark)来跟踪客户端和服务器之间的通信并确定消息传递停止的位置。如果 TLS 协商失败,服务器将终止连接,您将收到与上述类似的错误。
关于C# 应用程序在切换到 TLS 1.2 后无法再访问网站 - GetResponse() 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35658263/