分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

.net core 2.0 HTTPS request fails using HttpClient 安全错误

发布时间:2023-09-06 02:03责任编辑:郭大石关键词:暂无标签

最近.net core 项目中遇到一个问题,通过Httpclient 访问https的接口报错,错误如下:

WinHttpException: A security error occurred ???System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() ???System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) ???System.Runtime.CompilerServices.ConfiguredTaskAwaitable+ConfiguredTaskAwaiter.GetResult() ???System.Net.Http.WinHttpHandler+<StartRequest>d__105.MoveNext()HttpRequestException: An error occurred while sending the request. ???System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() ???System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) ???System.Runtime.CompilerServices.ConfiguredTaskAwaitable+ConfiguredTaskAwaiter.GetResult() ???System.Net.Http.HttpClient+<FinishSendAsync>d__58.MoveNext() ???System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() ???System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) ???System.Runtime.CompilerServices.TaskAwaiter.GetResult() ???MyApp.Web.Controllers.HomeController.Test() in HomeController.cs ???????var response = client.GetAsync("https://someurl.com/api.php?arg1=some&arg2=test").GetAwaiter().GetResult(); ???lambda_method(Closure , object , Object[] ) ???Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker+<InvokeActionMethodAsync>d__27.MoveNext()

通过排查发现是.NETFramework 4.6包括一个新的安全特性,它阻止连接的不安全密码和散列算法。

可以通过下面的解决方案处理:

using (var handler = new HttpClientHandler()){ ???handler.ServerCertificateCustomValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true; ???handler.SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls; ???using (HttpClient client = new HttpClient(handler)) ???{ ???????string requestObjJson = requestObj.ToJson(); ???????var address = new Uri($"https://yourcompany.com/"); ???????string token = GetToken(); ???????client.BaseAddress = address; ???????client.DefaultRequestHeaders.Accept.Clear(); ???????client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); ???????client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); ???????var contentData = new StringContent(requestObjJson, System.Text.Encoding.UTF8, "application/json"); ???????using (var response = await client.PostAsync("yourcompany/api", contentData)) ???????{ ???????????var content = response.Content.ReadAsStringAsync(); ???????????var taskResult = content.Result; ???????????JObject resultObj = JObject.Parse(taskResult); ???????????return resultObj; ???????} ???}}

 需要注意的是,对于.NET core 2.0,您需要使用HttpClientHandler而不是ServicePointManager.

.net core 2.0 HTTPS request fails using HttpClient 安全错误

原文地址:https://www.cnblogs.com/InfyHarry/p/9302304.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved