為了解決C# httplient訪問https服務(wù)端出現(xiàn)HandshakeFailure的問題,把https原理學(xué)了一遍,我尼瑪
后端API使用Httpclient訪問一個https服務(wù)端接口時出現(xiàn)HandshakeFailure,也就是握手失敗
postman調(diào)用沒問題
python requests verify=False 調(diào)用也沒問題
以下是握手失敗可能的原因:

詳情參考:https://developpaper.com/how-to-fix-the-ssl-tls-handshake-failed-error/
本次問題的原因是
客戶端服務(wù)器向服務(wù)端sayhello時,會發(fā)送客戶端服務(wù)器配置的密碼套件列表(cipher suites),服務(wù)端接收到之后根據(jù)自身支持的密碼套件選擇其中一種,此時,如果客戶端發(fā)來的密碼套件列表沒有服務(wù)端支持的,服務(wù)端就會響應(yīng)握手失敗錯誤
解決辦法
1、找到服務(wù)端支持的密碼套件
a.使用postman成功調(diào)用服務(wù)端接口后,在console里可以找到對應(yīng)的服務(wù)端密碼套件
b.可以使用網(wǎng)絡(luò)監(jiān)控工具(wireshark)對請求進(jìn)行監(jiān)控并查找服務(wù)端支持的密碼套件
2、在客戶端服務(wù)器中進(jìn)行配置
a.打開組策略,找到compute configuration -> Administrative Template -> Network -> SSL Configuration Settings -> SSL Cipher Suite Order ,打開,在里面追加新的密碼套件
b.重啟服務(wù)器
https 原理擴(kuò)展

上圖描述了整個TLS協(xié)議握手的過程
1、密碼套件作用
密碼套件本質(zhì)就是一種對稱加密算法(如:AES)用于解密服務(wù)端響應(yīng)報文,加密客戶端請求報文,以及解密客戶端請求報文,加密服務(wù)端響應(yīng)報文
2、會話秘鑰生成及作用
生成方式:由客戶端和服務(wù)器握手時生成的幾個隨機(jī)數(shù)以及預(yù)主秘鑰通過固定算法生成的秘鑰
作用:用作協(xié)商好的密碼套件的key
版權(quán)聲明
作者:扶我起來我還要敲
地址:http://www.rzrgm.cn/Newd/p/16426230.html
? Newd 尊重知識產(chǎn)權(quán),引用請注出處
廣告位
(虛位以待,如有需要請私信)
浙公網(wǎng)安備 33010602011771號