服务器升级后,C#服务无法连接到Web服务

时间:2020-10-15 10:28:01

标签: c# asp.net ssl

我正在使用HttpClient.PostAsync在远程(内部LAN)服务器上调用REST Web服务(统一端点管理,但我怀疑这是否相关)。该调用引发了如下异常:

10/15/2020 5:05:25 AM An error occurred while sending the request.
10/15/2020 5:05:25 AM    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
10/15/2020 5:05:25 AM The underlying connection was closed: An unexpected error occurred on a send.
10/15/2020 5:05:25 AM    at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context)
   at System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar)
10/15/2020 5:05:25 AM Authentication failed because the remote party has closed the transport stream.
10/15/2020 5:05:25 AM    at System.Net.TlsStream.EndWrite(IAsyncResult asyncResult)
   at System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar)

该错误似乎表明存在某种TLS错误。该证书由内部CA颁发,该内部CA通过组策略信任。我可以通过将JSON数据,URL和标头粘贴到Postman中来进行完全相同的调用,并且可以正常工作。我可以在Firefox中打开服务器URL,没有问题,尽管在Edge上出现错误“在高级设置中打开TLS 1.0,TLS 1.1和TLS 1.2”,但是这样做对.NET服务没有任何影响。边缘。在.NET中,我还通过手动将TLS选项指定为1.0、1.1和1.2进行了相同的操作。对于SSL 2.0和SSL 3.0,我也做了同样的事情,但是没有任何变化。

根据软件供应商,它应该使用TLS 1.2。我不能在服务器端更改太多,因为它是专有软件。

有什么想法吗?我需要再次使它工作,但是自从更新服务器之前,代码就没有更改,并且REST API规范保持不变(由Postman确认)。

我正在.NET Framework 4.6.1(ASP.NET)上运行代码。流程有点奇怪,因为我在一个服务器上有一个运行在PHP(Laravel)上的Web界面,该接口将调用发送到另一台服务器(这就是我遇到的问题)上的.NET Web服务。依次调用Tomcat服务器,并在.NET中执行任务。

1 个答案:

答案 0 :(得分:0)

感谢所有为这个问题提供帮助的人。

我通过在本地组策略中禁用“ TLS密码套件顺序”并重新启动服务器来解决此问题-解决问题需要两个步骤。

问题不是消息中指出的TLS版本,而是使用的密码。似乎服务器使用的密码未按策略指定的自定义顺序列出。