0

我有以下代码,它使用 Refit 进行 HTTPS 调用。它适用于针对 .NET 框架 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();

事实上,当面向 .NET Core 2.1 时,我的所有 HTTPS 调用都失败了,但我的 HTTP 调用工作正常。

是否有一些配置或某些东西可以让 HTTPS 调用在使用 Refit 的 .NET Core 2.1 应用程序中工作?

4

3 回答 3

1

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

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

....
 ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true; 
...
// your https call goes here
....
于 2018-08-29T07:26:35.947 回答
0

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

因此,对于 .NET Core,我需要手动添加证书并且它可以工作。

于 2018-08-28T16:15:33.247 回答
0

您需要告诉 ServicePointManager 接受使用 TLS(适当版本)协议的连接。尝试.NET 4.5 中的 Default SecurityProtocol。这个适用于 .NET 4.5。但是,这同样适用于 .NET Core。

于 2018-08-28T11:38:44.977 回答