詳解.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)文章
Asp.Net各種超時(shí)問(wèn)題總結(jié)
在數(shù)據(jù)庫(kù)或者請(qǐng)求操作時(shí),如果選擇的時(shí)間段過(guò)短或操作數(shù)據(jù)量過(guò)大,就會(huì)遇到"請(qǐng)求超時(shí)"的的問(wèn)題,網(wǎng)絡(luò)上提供很多解決方案,但普遍不完善,根據(jù)個(gè)人經(jīng)驗(yàn)及參考網(wǎng)絡(luò)解決方案,先將其匯總2013-02-02
asp.net異步獲取datatable并顯示的實(shí)現(xiàn)方法
這篇文章主要介紹了asp.net異步獲取datatable并顯示的實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了asp.net一步操作datatable的相關(guān)技巧,需要的朋友可以參考下2016-03-03
詳解.NET中的加密算法總結(jié)(自定義加密Helper類(lèi)續(xù))
這篇文章主要介紹了詳解.NET中的加密算法總結(jié)(自定義加密Helper類(lèi)續(xù)) ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-12-12
.net開(kāi)發(fā)微信公眾平臺(tái)實(shí)例教程
這篇文章主要介紹了.net開(kāi)發(fā)微信公眾平臺(tái)的方法,對(duì)微信公眾平臺(tái)開(kāi)發(fā)的原理與相應(yīng)的.net實(shí)現(xiàn)方法都做了較為詳細(xì)的講述,非常實(shí)用,需要的朋友可以參考下2014-10-10
ASP.NET MVC5網(wǎng)站開(kāi)發(fā)文章管理架構(gòu)(七)
繼上一篇把member的用戶(hù)部分完成,現(xiàn)在開(kāi)始做文章管理部分。文章部分根據(jù)涉及顯示現(xiàn)實(shí)文章列表,發(fā)布文章,修改和刪除文章等功能。最終的實(shí)現(xiàn)目標(biāo)是使用權(quán)限來(lái)控制用戶(hù)是否能進(jìn)行相應(yīng)操作,管理員權(quán)限的會(huì)顯示全部文章列表和我的文章列表,普通用戶(hù)只顯示我的文章列表2015-09-09
asp.net 動(dòng)態(tài)創(chuàng)建TextBox控件及狀態(tài)數(shù)據(jù)如何加載
接著上文Asp.net TextBox的TextChanged事件你真的清楚嗎?這里我們來(lái)說(shuō)說(shuō)狀態(tài)數(shù)據(jù)時(shí)如何加載的,需要的朋友可以參考下2012-12-12
在ASP.Net?Core應(yīng)用程序中使用Bootstrap4
這篇文章介紹了在ASP.Net?Core應(yīng)用程序中使用Bootstrap4的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-01-01
如何利用FluentMigrator實(shí)現(xiàn)數(shù)據(jù)庫(kù)遷移
這篇文章主要給大家介紹了關(guān)于如何利用FluentMigrator實(shí)現(xiàn)數(shù)據(jù)庫(kù)遷移的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
.Net微信網(wǎng)頁(yè)開(kāi)發(fā)解決用戶(hù)在不同公眾號(hào)或在公眾號(hào)、移動(dòng)應(yīng)用之間帳號(hào)統(tǒng)一問(wèn)題
這篇文章主要介紹了.Net微信網(wǎng)頁(yè)開(kāi)發(fā)解決用戶(hù)在不同公眾號(hào)或在公眾號(hào)、移動(dòng)應(yīng)用之間帳號(hào)統(tǒng)一問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09

