我們知道,當進行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中的擴展資訊和密碼套件資訊以及順序?
請高手解答!
uj5u.com熱心網友回復:

你要改原始碼的節奏
uj5u.com熱心網友回復:
沒有方法嗎?uj5u.com熱心網友回復:
頂起,讓更多的人看到uj5u.com熱心網友回復:
這么大的社區,沒人懂解決嗎?uj5u.com熱心網友回復:
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.
uj5u.com熱心網友回復:
mark一下,我也在找方法轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/7428.html
標籤:網絡編程
上一篇:選單項插入ICO圖示的問題
