Я создал сайт в ядре asp.net 2.1. На этом веб-сайте мы вызываем сторонние веб-интерфейсы HTTPS с использованием httpclient. Мой веб-сайт работает нормально, когда я развернут на сервере общего хостинга Smarterasp.net, но когда я развернут на сервере Windows 2016 с настройками прокси, он выдает следующую ошибку. Это произошло только для HTTPS APi. Для non-https api он отлично работает на windows server 2016.
Исключение сбоя при входе в систему System.Net.Http.HttpRequestException: при отправке запроса произошла ошибка. ---> System.Net.Http.WinHttpException: ошибка 12175, вызывающая WINHTTP_CALLBACK_STATUS_REQUEST_ERROR, «Произошла ошибка безопасности».
в System.Threading.Tasks.RendezvousAwaitable 1.GetResult()
at System.Net.Http.WinHttpHandler.StartRequest(WinHttpRequestState state)
--- End of inner exception stack trace ---
at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task
1 sendTask, запрос HttpRequestMessage, CancellationTokenSource cts, Boolean disposeCts)
Я провел некоторое исследование и на основании этого я установил следующий код, но все еще получаю ошибку выше. Работает нормально для non-Https api.
AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);
var handler = new HttpClientHandler();
if (ProxySettings.Current.UseProxy)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
handler.SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls;
handler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) =>
{
return true;
};
var proxy = new WebProxy();
if (!string.IsNullOrWhiteSpace(ProxySettings.Current.ProxyHost) && ProxySettings.Current.ProxyPort != 0)
{
proxy = new WebProxy(ProxySettings.Current.ProxyHost, ProxySettings.Current.ProxyPort);
}
proxy.UseDefaultCredentials = ProxySettings.Current.UseDefaultCredentials;
if (!string.IsNullOrWhiteSpace(ProxySettings.Current.ProxyUrl))
proxy.Address = new Uri(ProxySettings.Current.ProxyUrl);
if (ProxySettings.Current.HasNetworkCredentials)
{
var credentials = new NetworkCredential();
credentials.UserName = ProxySettings.Current.NetworkUserName;
credentials.Password = ProxySettings.Current.NetworkPassword;
if (!string.IsNullOrWhiteSpace(ProxySettings.Current.NetworkDomain)) credentials.Domain = ProxySettings.Current.NetworkDomain;
proxy.Credentials = credentials;
}
handler = new HttpClientHandler
{
UseProxy = true,
Proxy = proxy,
};
}
Не могли бы вы помочь получить решение?