Ошибка 12175 при вызове WINHTTP_CALLBACK_STATUS_REQUEST_ERROR Произошла ошибка безопасности - PullRequest
0 голосов
/ 01 ноября 2018

Я создал сайт в ядре 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,
            };
        }

Не могли бы вы помочь получить решение?

...