簡體   English   中英

盡管證書很好,但不信任HTTPS SSL連接

[英]HTTPS SSL Connection not trusted, despite certificate being fine

我在Windows 2012 R2 IIs 8.5上托管了2個sitet。 一種是umbraco實例,另一種是基於.Net核心的api(我們稱其為MyApi)。 我想在umbraco上執行某些搜索操作,因此umbraco會調用api,該api會回調Umbraco / Api。 調用MyApi很好,但是從MyApi到Umbraco / Api的調用是有問題的。 Umbraco api日志:

搜索失敗System.Net.Http.HttpRequestException:發送請求時發生錯誤。 ---> System.Net.WebException:基礎連接已關閉:無法建立SSL / TLS安全通道的信任關系。 ---> System.Security.Authentication.AuthenticationException:根據驗證過程,遠程證書無效。

證書本身由客戶的內部權威機構提供,該權威機構是服務器存儲中受信任的根。 現在,最初我們已經遇到了證書問題,因為它們錯過了我們用於api調用的第一個DNS記錄(尚未創建DNS記錄,我們在“主機”中使用記錄),但現在應該是fiex。

我已經在代碼中更新了SSL錯誤處理程序,因此它在SSL枚舉中記錄了錯誤和編號。

                            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的Web配置中啟用了故障排除功能,但沒有找到任何有用的信息。 我需要對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 ---

解決方案:原始錯誤是在證書中並得到修復,但是回調用於返回的false我用於調試導致標記連接失敗的問題。 大概花了兩天時間。 因此,自從我在枚舉中得到0的那一刻起,那只是我的調試代碼中的錯誤。

哦,別忘了取消訂閱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM