ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

为了解决C# httplient访问https服务端出现HandshakeFailure的问题,把https原理学了一遍,我尼玛

2022-07-03 17:34:04  阅读:144  来源: 互联网

标签:httplient 密码 尼玛 套件 https 服务器 服务端 客户端


后端API使用Httpclient访问一个https服务端接口时出现HandshakeFailure,也就是握手失败

postman调用没问题

python  requests verify=False 调用也没问题

以下是握手失败可能的原因:

 

 

 详情参考:https://developpaper.com/how-to-fix-the-ssl-tls-handshake-failed-error/ 

本次问题的原因是
客户端服务器向服务端sayhello时,会发送客户端服务器配置的密码套件列表(cipher suites),服务端接收到之后根据自身支持的密码套件选择其中一种,此时,如果客户端发来的密码套件列表没有服务端支持的,服务端就会响应握手失败错误

解决办法

1、找到服务端支持的密码套件

  a.使用postman成功调用服务端接口后,在console里可以找到对应的服务端密码套件

  b.可以使用网络监控工具(wireshark)对请求进行监控并查找服务端支持的密码套件

2、在客户端服务器中进行配置

  a.打开组策略,找到compute configuration -> Administrative Template -> Network -> SSL Configuration Settings -> SSL Cipher Suite Order ,打开,在里面追加新的密码套件

  b.重启服务器

 

https 原理扩展

上图描述了整个TLS协议握手的过程

1、密码套件作用

密码套件本质就是一种对称加密算法(如:AES)用于解密服务端响应报文,加密客户端请求报文,以及解密客户端请求报文,加密服务端响应报文

2、会话秘钥生成及作用

生成方式:由客户端和服务器握手时生成的几个随机数以及预主秘钥通过固定算法生成的秘钥

作用:用作协商好的密码套件的key

标签:httplient,密码,尼玛,套件,https,服务器,服务端,客户端
来源: https://www.cnblogs.com/Newd/p/16426230.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有