1、statem.c read_state_machine()
设置处理消息
客户端
tran:ossl_statem_client_read_transition
客户端处理消息:ossl_statem_client_process_message
post_process_message:ossl_statem_client_post_process_message()
2、statem_cInt.c ossl_statem_client_read_transition()
3、ossl_statem_client_process_message()
根据st->hand_state类型
现在是TLS_ST_CR_SRVR_HELLO (服务器回复的hello)
所以是:tls_process_server_hello()
4、tls_process_server_hello()
5、具体的报文数据。
记录头消息:
Content Type:记录层子协议类型,22代表握手
Version:版本,必须为0x0303,即TLS1.2
Length:后续数据长度
握手协议消息:
Handshake Type:2代表ServerHello
Length:后续数据长度
Version:03 03 |代表TLS1_2_VERSION
Random:随机数,32字节,前4字节为时间戳,后28字节为安全随机数 9A 8C 1B 4D 95 74 C7 8A 6D 94 C4 92 D1 35 18 F5 64 D2 34 C8 BA 76 20 FD 1A 70 FF D7 2C 05 D5 48 |随机数
Session ID:遗留字段,会话ID,TLS1.3以前的版本支持会话恢复,在TLS1.3已经用PSK替代,在兼容模式下,该字段必须非空。
20 | session的长度
BE 73 AD 2C 7A 60 51 24 8A 93 B6 53 5D 08 60 AA 8F 4E E9 6C 10 7E 8C 1C 60 1C 28 1D 1F 3F 63 8A |session的具体值
Cipher Suites:13 02 |密码套件相关的信息 TLS_AES_256_GCM_SHA384
Compression Methods:00 00 |不压缩
2E :后续的长度。
扩展supported_versions:支持的版本,必须设置为0x0304,即TLS1.3版本
00 2B | 代表TLSEXT_TYPE_supported_versions
00 02 |代表长度
03 04| TLS1_3_VERSION
扩展key_share:服务端共享密钥,其实就是密钥协商交换的公钥,采用x25519曲线,公钥长度为32字节
00 33 | 代表 TLSEXT_TYPE_key_share
00 24 | 此类型的长度代表长度
00 1D | 29,支持的曲线类型
00 20 | 公钥的长度
7A 6F 6A FE D2 A3 1C 2C 0A 05 E3 85 24 38 F3 F7 FE EB 6C 4C F9 33 81 F2 BA 71 08 29 FE 71 99 58 | 服务器公钥的值