HTTPS SSL-соединение не является доверенным, несмотря на то, что сертификат в порядке - PullRequest
0 голосов
/ 08 июля 2019

У меня есть 2 сайта, размещенных на Windows 2012 R2 IIs 8.5. Один из них - это экземпляр umbraco, а другой - API на основе ядра .Net (назовем его MyApi). Я хочу выполнить определенные действия по поиску на umbraco, чтобы umbraco звонил в api, который вызывает Umbraco / Api. Вызов на MyApi в порядке, однако вызов от MyApi к Umbraco / Api является проблемой. Журналы API Umbraco:

Не удалось выполнить поиск System.Net.Http.HttpRequestException: при отправке запроса произошла ошибка. ---> System.Net.WebException: базовое соединение было закрыто: не удалось установить доверительные отношения для безопасного канала SSL / TLS. ---> System.Security.Authentication.AuthenticationException: удаленный сертификат недействителен в соответствии с процедурой проверки.

Сами сертификаты предоставляются внутренним органом нашего клиента, которому доверен корень в хранилище сервера. Изначально у нас возникли проблемы с сертификатами, так как они пропустили первую запись DNS, которую мы используем для вызова API (записи DNS еще не созданы, мы используем запись в «хостах»), но это должно быть уже фикус.

Я обновил обработчик ошибок SSL в коде, чтобы он регистрировал ошибку и номер в SSL Enum.

                            System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            System.Net.ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => 
            {
                _logger.LogError("Received TLS errror " + ((int)sslPolicyErrors).ToString());
                return false;
            };

            _logger.LogDebug("Search starting");
            if (model.Username != null)
            {
                model.Favourites = _workplaceContext.GetUserFavourites(_dataContext, model.Username);
            }
            else if (model.JustFavourites)
            {
                return BadRequest();
            }
            using (var client = new HttpClient())
            {


                client.BaseAddress = new Uri(_configuration.GetValue<string>("UmbracoApiUrl"));
                _logger.LogDebug("Searching for addres " + new Uri(_configuration.GetValue<string>("UmbracoApiUrl")));
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(
                    new MediaTypeWithQualityHeaderValue("application/json"));
                var json = JsonConvert.SerializeObject(model);
                using (var stringContent = new StringContent(json, Encoding.UTF8, "application/json"))
                {
                    var response = await client.PostAsync("workplace/search", stringContent);
                    if (response.IsSuccessStatusCode)
                    {
                        _logger.LogDebug("Search API Call success");
                        var jsonResponse = await response.Content.ReadAsStringAsync();
                        var responseModel = JsonConvert.DeserializeObject<SearchResponseModel>(jsonResponse);
                        _logger.LogDebug("Search response TotalCount = " + responseModel.TotalCount);
                        return responseModel;
                    }
                    else
                    {
                        _logger.LogDebug("Search API Call status - " + response.StatusCode);
                        return StatusCode((int)response.StatusCode);
                    }
                }
            }

Первоначально мы получили ошибку номер 2. Теперь мы просто получаем номер 0, с которым не должно быть проблем. Несмотря на это, соединения все еще не работают. Я прочитал различные статьи об этом и включил поиск и устранение неисправностей в веб-конфигурации Umbraco, но не нашел никакой полезной информации. Мне нужен метод для устранения неполадок MyApi. Может ли кто-то указать мне, как устранить неполадки с такой же степенью детализации, как у umbraco (я не очень знаком с основными приложениями .NET)?

Интересная часть журнала ошибок:

2019-07-08 13:35:32.1745||DEBUG|XXXApi.Controllers.WorkplaceController|Search starting 
2019-07-08 13:35:32.1901||DEBUG|XXXApi.Controllers.WorkplaceController|Searching for addres https://xxx.yy.zz/umbraco/api/ 
2019-07-08 13:35:32.2682||ERROR|XXXCApi.Controllers.WorkplaceController|Received TLS errror 0 
2019-07-08 13:35:32.2682||ERROR|XXXApi.Controllers.WorkplaceController|Search failed System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.
   at System.Net.TlsStream.EndWrite(IAsyncResult asyncResult)
   at System.Net.PooledStream.EndWrite(IAsyncResult asyncResult)
   at System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar)
   --- End of inner exception stack trace ---
...