我有一个针对
.NET Framework 4.7.2
的 C# 应用程序,它试图将 HTTP POST
发送到远程服务器。我收到以下异常:“基础连接已关闭:无法为 SSL/TLS 安全通道建立信任关系。”。在 Postman 中的完全相同的服务器上尝试完全相同的 HTTP POST 工作得很好,所以我的应用程序中一定遗漏了一些东西。在使用我创建的 HttpClient
实例发送消息之前,我将安全协议设置为 Tls12
:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
我还需要在我的应用程序中设置什么来确保远程服务器不会关闭我的连接?
编辑:这是用于发送请求和接收响应的代码片段。出于隐私原因,我隐藏了包含响应的类的名称。
using (var client = new HttpClient())
{
try
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
response = client.SendAsync(message, HttpCompletionOption.ResponseContentRead).Result;
var paymentResponse = response.GetData<PaymentResponseDto>();
var responseAsString = JsonConvert.SerializeObject(paymentResponse);
// do something with the response
编辑:我们在客户的网络中创建了一个相同的测试环境——得到了同样的错误。在异常堆栈中,我看到:异常:System.AggregateException:发生一个或多个错误。 ---> System.Net.Http.HttpRequestException: 发送请求时出错。 ---> System.Net.WebException:基础连接已关闭:无法为 SSL/TLS 安全通道建立信任关系。 ---> System.Security.Authentication.AuthenticationException: 根据验证程序,远程证书无效。
有什么想法吗?正如 Mate 所建议的,这与 Tls 1.2 协议有关吗?同样,服务器是 Windows Server 2012 R2。我让客户研究更新到 Server 2016 的可能性。