Соединение HTTPS SSL не является доверенным, несмотря на то, что сертификат в порядке

У меня есть 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 ---

person Pepsin    schedule 08.07.2019    source источник
comment
Протестируйте используемый сервер на предмет реализации SSL/TLS: если сервер является общедоступным, вы можете использовать SSLLabs в противном случае testssl.sh   -  person Robert    schedule 08.07.2019
comment
Привет, к сожалению, на данный момент API доступны только во внутренней сети. Также у меня есть только среда Windows   -  person Pepsin    schedule 08.07.2019
comment
Можете ли вы получить доступ к серверу с помощью других реализаций, таких как браузер, т.е. проблема связана с вашим кодом или это проблема настройки сервера?   -  person Steffen Ullrich    schedule 08.07.2019
comment
Начните с захвата + регистрации + показа того, какой именно сертификат ваше приложение видит как исходящий от сервера, а затем вы можете дважды проверить, что авторитет необходим как доверенный для проверки сертификата. Возможно, вы получаете сертификат, отличный от того, который, по вашему мнению, вы получаете, или вы установили неправильный центр сертификации. Во всех случаях обсуждение проверки сертификатов без просмотра соответствующих сертификатов является трудным делом.   -  person Patrick Mevzek    schedule 08.07.2019
comment
Привет, Стефан: IE не позволяет мне получить доступ к этому месту из-за высокой политики безопасности) (не могу изменить его, доменная среда) Firefox недоволен сертификатом (поскольку он использует свое собственное хранилище и не знает издатель), но показывает мне полную цепочку. Привет, Патрик: Для захвата я использую запись system.diagnostic в веб-конфигурации Umbraco. У меня там интересное сообщение: Осталось 0 клиентских сертификатов на выбор.   -  person Pepsin    schedule 09.07.2019
comment
ОК, решение здесь: исходная ошибка была в сертификате и была исправлена, НО обратный вызов, возвращающий 0, который я использовал для отладки, вызвал проблему с маркировкой соединения как неудачную. 2 дня ушло на то, чтобы разобраться.   -  person Pepsin    schedule 14.08.2019


Ответы (1)


Решение: Исходная ошибка была в сертификате и была исправлена, НО обратный вызов, возвращающий false, который я использовал для отладки, вызвал проблему, пометив соединение как неудачное. 2 дня ушло на то, чтобы разобраться. Итак, с того момента, как я получил 0 в перечислении, это была просто ошибка в моем коде отладки.

О, и не забудьте отписаться от delgate.

person Pepsin    schedule 14.08.2019