詳解.NET Core 使用HttpClient SSL請(qǐng)求出錯(cuò)的解決辦法
問(wèn)題
使用 HTTP Client 請(qǐng)求 HTTPS 的 API 時(shí)出現(xiàn) The certificate cannot be verified up to a trusted certification authority
異常,并且證書(shū)已經(jīng)傳入。
下面就是問(wèn)題代碼:
public class Program { public static void Main(string[] args) { var url = @"https://xxx.xxx.xxx.xxx:xxxx/xxx-web/services/xxxx?wsdl"; var handler = new HttpClientHandler { ClientCertificateOptions = ClientCertificateOption.Manual, ClientCertificates = { new X509Certificate2(@"E:\cert\rootTrust.cer","11111111"), new X509Certificate2(@"E:\cert\middleTrust.cer","11111111"), new X509Certificate2(@"E:\cert\wskey.pfx","ws654321") } }; var webRequest = new HttpClient(handler); var result = webRequest.GetStringAsync(url).GetAwaiter().GetResult(); Console.WriteLine(result); } }
原因
因?yàn)樵诎l(fā)出 HTTPS 請(qǐng)求的時(shí)候,HttpClient 都會(huì)檢查 SSL 證書(shū)是否合法。如果不合法的話,就會(huì)導(dǎo)致拋出異常信息,而對(duì)方給出的證書(shū)是自簽發(fā)的測(cè)試接口的證書(shū),所以不是一個(gè)合法的 SSL 證書(shū)。
解決
在 HttpClientHandler
當(dāng)中會(huì)有一個(gè) ServerCertificateCustomValidationCallback
事件,該事件用于判定證書(shū)驗(yàn)證是否通過(guò)。我們可以掛接該事件,然后邏輯編寫(xiě)為直接返回 true
結(jié)果,這樣就會(huì)忽略掉證書(shū)異常的情況。
最新的代碼如下:
public class Program { public static void Main(string[] args) { var url = @"https://xxx.xxx.xxx.xxx:xxxx/xxx-web/services/xxxx?wsdl"; var handler = new HttpClientHandler { ServerCertificateCustomValidationCallback = (message, certificate2, arg3, arg4) => true, ClientCertificateOptions = ClientCertificateOption.Manual, ClientCertificates = { new X509Certificate2(@"E:\cert\rootTrust.cer","11111111"), new X509Certificate2(@"E:\cert\middleTrust.cer","11111111"), new X509Certificate2(@"E:\cert\wskey.pfx","ws654321") } }; var webRequest = new HttpClient(handler); var result = webRequest.GetStringAsync(url).GetAwaiter().GetResult(); Console.WriteLine("xx"); } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- .NET Core中使用HttpClient的正確姿勢(shì)
- .Net Core下HTTP請(qǐng)求IHttpClientFactory示例詳解
- .NET Core中HttpClient的正確打開(kāi)方式
- .NET Core 2.1中HttpClientFactory的最佳實(shí)踐記錄
- ASP.NET Core針對(duì)一個(gè)使用HttpClient對(duì)象的類(lèi)編寫(xiě)單元測(cè)試詳解
- .NET Core使用HttpClient進(jìn)行表單提交時(shí)遇到的問(wèn)題
- Asp.Net Core2.1前后使用HttpClient的兩種方式
- .net Core 使用IHttpClientFactory請(qǐng)求實(shí)現(xiàn)
- .NET CORE HttpClient的使用方法
相關(guān)文章
詳解.Net Core 權(quán)限驗(yàn)證與授權(quán)(AuthorizeFilter、ActionFilterAttribute)
這篇文章主要介紹了.Net Core 權(quán)限驗(yàn)證與授權(quán)(AuthorizeFilter、ActionFilterAttribute),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04ASP.NET數(shù)據(jù)庫(kù)存取圖片的方法
這篇文章主要為大家詳細(xì)介紹了ASP.NET數(shù)據(jù)庫(kù)如何存取圖片,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01如何使用ASP.NET MiniAPI 調(diào)試未匹配請(qǐng)求路徑
ASP.NET MiniAPI是一個(gè)輕量級(jí)的Web API框架,它可以讓我們快速地構(gòu)建和部署RESTful服務(wù),本文給大家介紹使用ASP.NET MiniAPI 調(diào)試未匹配請(qǐng)求路徑的方法,感興趣的朋友一起看看吧2024-01-01ASP.NET 文件斷點(diǎn)續(xù)傳實(shí)現(xiàn)代碼
在文件下載的時(shí)候,使用斷點(diǎn)續(xù)傳可以將上次未下載完成的文件繼續(xù)下載,該功能在開(kāi)發(fā)文件下載的時(shí)候非常重要。這里我將介紹一種比較簡(jiǎn)單的斷點(diǎn)續(xù)傳功能的實(shí)現(xiàn)方法,僅供初學(xué)者參考使用2012-06-06解決ASP.NET回傳后div滾動(dòng)條位置復(fù)位的問(wèn)題(利用隱藏控件原理)
這篇文章主要介紹了解決ASP.NET回傳后div滾動(dòng)條位置復(fù)位的問(wèn)題,中心思想是用一個(gè)隱藏控件保存當(dāng)前scorll值?;貍骰貋?lái)后根據(jù)scrollTop的值,然后在Page_Load中重新設(shè)置scrollTop2014-01-01asp.net 組件開(kāi)發(fā)中的內(nèi)嵌資源引用
asp.net 組件開(kāi)發(fā)中的內(nèi)嵌資源引用實(shí)現(xiàn)代碼,需要的朋友可以參考下。2011-12-12Automation服務(wù)器不能創(chuàng)建對(duì)象的多種解決辦法
這篇文章主要介紹了Automation服務(wù)器不能創(chuàng)建對(duì)象的多種解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01