我正在使用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中执行任务。
答案 0 :(得分:0)
感谢所有为这个问题提供帮助的人。
我通过在本地组策略中禁用“ TLS密码套件顺序”并重新启动服务器来解决此问题-解决问题需要两个步骤。
问题不是消息中指出的TLS版本,而是使用的密码。似乎服务器使用的密码未按策略指定的自定义顺序列出。