C# .NET核心重新安装HTTPS错误

C# .NET核心重新安装HTTPS错误,c#,.net-core,refit,C#,.net Core,Refit,我有下面的代码,它使用Refit进行HTTPS调用。它可以从一个以.NET framework 4.6.1为目标的控制台应用程序中工作 当我从针对.NET Core 2.1的控制台应用程序运行完全相同的代码时,我得到一个错误: 无法建立SSL连接。。。处理证书时发生未知错误 我正在使用重新安装版本4.5.6 System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtoc

我有下面的代码,它使用Refit进行HTTPS调用。它可以从一个以.NET framework 4.6.1为目标的控制台应用程序中工作

当我从针对.NET Core 2.1的控制台应用程序运行完全相同的代码时,我得到一个错误:

无法建立SSL连接。。。处理证书时发生未知错误

我正在使用重新安装版本4.5.6

System.Net.ServicePointManager.SecurityProtocol =
    SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

var baseAddress = new Uri(BaseHttpsAddress);
var httpClientHandler = new HttpClientHandler
{
    ClientCertificateOptions = ClientCertificateOption.Automatic
};

var httpClient = new HttpClient(httpClientHandler) { BaseAddress = baseAddress, Timeout = _requestTimeout };

var service = RestService.For<IMyService>(httpClient);

var result = await service.GetUsers();
System.Net.ServicePointManager.SecurityProtocol=
SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
var baseAddress=新Uri(BaseHttpsAddress);
var httpClientHandler=新的httpClientHandler
{
ClientCertificateOptions=ClientCertificateOptions.Automatic
};
var httpClient=newhttpclient(httpClientHandler){BaseAddress=BaseAddress,Timeout=\u requestTimeout};
var service=RestService.For(httpClient);
var result=await service.GetUsers();
事实上,当以.NETCore2.1为目标时,我所有的HTTPS调用都失败了,但我的HTTP调用工作正常


在.NET Core 2.1应用程序中使用Refit是否有一些配置或其他方法可以让HTTPS调用正常工作?

您需要告诉ServicePointManager使用TLS(适当版本)协议接受连接。尝试这是针对.NET4.5的。但是,这同样适用于.NET Core。

常规.NET会自动检查安装的Windows证书,而.NET Core不会


因此,对于.NET Core,我需要手动添加证书,并且它起到了作用。

我试图通过下面的代码接受所有服务器证书为有效。。但是,在实时中,您可以添加逻辑来验证服务器证书

System.Net.ServicePointManager.SecurityProtocol =
            SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

....
 ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true; 
...
// your https call goes here
....

不幸的是,添加SecurityProtocol=SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;后,它仍然无法工作。。。我更新了问题中的代码,当时我尝试说SSL3已经过时,不再受支持