进行https访问时,如何修改ClientHello消息?

ismycxp 2020-08-03 08:33:52
我们知道,当进行https访问时,客户端会首先发出ClientHello消息

ClientHello消息内容包含如下:

1. Version
协议版本(protocol version)指示客户端支持的最佳协议版本。从低到高依次 SSLv2、SSLv3、TLSv1、TLSv1.1、TLSv1.2,TLSv1.3

2. Random
随机数(random)字段包含32字节的数据。当然,只有28字节是随机生成的;剩余的4字节包含额外的信息,受客户端时钟的影响。4个字节以Unix时间格式记录了客户端的协调世界时间(UTC)。协调世界时间是从1970年1月1日开始到当前时刻所经历的秒数,那么时间是不断的上涨的,通过前4字节填写时间方式,有效的避免了周期性的出现一样的随机数。使得“随机”更加“随机”。随机数是用来生成对称密钥的。
在握手时,客户端和服务器都会提供随机数。这种随机性对每次握手都是独一无二的,在身份验证中起着举足轻重的作用。它可以防止重放攻击,并确认初始数据交换的完整性。

3. Session ID
在第一次连接时,会话ID(session ID)字段是空的,这表示客户端并不希望恢复某个已
存在的会话。在后续的连接中,这个字段可以保存会话的唯一标识。服务器可以借助会话ID在自己的缓存中找到对应的会话状态。
如果Session id length有值,对于 SSL 2.0 Session id length 0~16字节,其后的版本扩大到32字节。本报文中Session id length是0,后面就没有跟Session id,直接是Cipher suit length。
Session id并不一定是32字节,RFC规定可以0~32字节。只是Session id由服务器生成,服务器普遍采用OpenSSL,而OpenSSL基本只生成32字节的session id,如果碰到其他字节长度的Session id,切莫认为是异常client hello。

4. 其它扩展信息,如:server_name,supported_groups,key_share等等

5. 密码套件列表(Cipher Suites),如:

TLS_AES_128_GCM_SHA256
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA


----------------------------------------------------

我想请问的是,用wininet,winhttp(或者第三方HTTP库,如libcurl)进行https访问时,如何修改clienthello中的扩展信息和密码套件信息以及顺序?

请高手解答!



...全文
1423 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangbiyun 2020-11-11
  • 打赏
  • 举报
回复
修改openssl 整合curl
xktesla 2020-09-10
  • 打赏
  • 举报
回复
mark一下,我也在找方法
an_bachelor 2020-08-19
  • 打赏
  • 举报
回复
LibCurl不太清清楚 WinInet、Winhttp应该都没有非常细的选项 比如Winhttp仅能指定TLS版本,用WinhttpSetOption: WINHTTP_OPTION_SECURE_PROTOCOLS 设置一个无符号的长整数值,指定哪些安全协议是可以接受的。默认情况下,在 Windows 7 和 Windows 8 中仅启用 SSL3 和 TLS1。默认情况下,在 Windows 8.1 和 Windows 10 中仅启用 SSL3、TLS1.0、TLS1.1 和 TLS1.2。该值可以是以下一个或多个值的组合。 WINHTTP_OPTION_SECURE_PROTOCOLS Sets an unsigned long integer value that specifies which secure protocols are acceptable. By default only SSL3 and TLS1 are enabled. Can by a combination of one or more of the following values. WINHTTP_FLAG_SECURE_PROTOCOL_ALL The Secure Sockets Layer (SSL) 2.0, SSL 3.0, and Transport Layer Security (TLS) 1.0 protocols can be used. WINHTTP_FLAG_SECURE_PROTOCOL_SSL2 The SSL 2.0 protocol can be used. WINHTTP_FLAG_SECURE_PROTOCOL_SSL3 The SSL 3.0 protocol can be used. WINHTTP_FLAG_SECURE_PROTOCOL_TLS1 The TLS 1.0 protocol can be used. WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1 The TLS 1.1 protocol can be used. WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2 The TLS 1.2 protocol can be used.
ismycxp 2020-08-04
  • 打赏
  • 举报
回复
顶起,让更多的人看到
ismycxp 2020-08-04
  • 打赏
  • 举报
回复
这么大的社区,没人懂解决吗?
smwhotjay 2020-08-03
  • 打赏
  • 举报
回复
你要改源码的节奏
ismycxp 2020-08-03
  • 打赏
  • 举报
回复
没有方法吗?

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧