C# 应用程序在切换到 TLS 1.2 后无法再访问网站 - GetResponse() 失败

标签 c# .net winforms

我们有一个内部应用程序可以向我们的供应商站点发出 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/

相关文章:

C#:没有重复的骰子排列

c# - 新的 vb.net 增强功能?

c# - 如何检测windows phone是否插入了windows 7电脑?

C# Web浏览器锚定

c# - 使用 MVC 模型来填充和验证剑道多选?

c# - 有什么解决方案可以在程序中使用不可猜测的链接吗?

C#初学者问题

c# - protobuf-net:序列化一个空列表

c# - 在 LINQ 表达式中加入对象

c# - 如何查看远程IP和端口是否可用?