标签:0x03 sea 公钥加密 http请求 加密 cer known hex 1.2
Content Type | Hex Code | Description |
---|---|---|
Change_Cipher_Spec | 0x14 | 指示加密方式的更改 |
Alert | 0x15 | 发出各种类型的错误信号 |
Handshake | 0x16 | 携带握手消息的记录 |
Application_Data | 0x17 | 加密的应用数据 |
Handshake Type | Hex Code |
---|---|
hello_request | 0x00 |
client_hello | 0x01 |
server_hello | 0x02 |
certificate | 0x0b |
server_key_exchange | 0x0c |
certificate_request | 0x0d |
server_hello_done | 0x0e |
certificate_verify | 0x0f |
client_key_exchange | 0x10 |
finished | 0x14 |
告诉服务端客户端期望的协议版本,算法套件和压缩方法。还包括一个32字节的随机数(client_random),由4字节的GMT Unix时间(从1970年开始的秒数)和28字节的随机数组成
TLS1.2中增加了可选的Hello扩展,格式如下
struct {
ExtensionType extension_type;
opaque extension_data<0..2^16-1>;
} Extension;
扩展的类型以及对应的规范可以在此链接查看
Hello扩展类型
字节 | 长度 | 值 | 描述 |
---|---|---|---|
00 | 1 | 16 | 记录内容类型 -- 握手消息 |
01-02 | 2 | 03 01 | SSL版本 -- TLSv1 |
03-04 | 2 | 00 61 | 记录长度 |
05 | 1 | 01 | 握手类型 -- Client_Hello |
06-08 | 3 | 00 00 5d | 消息长度(0x61-4 = 0x5d) |
09-0A | 2 | 03 01 | 客户端偏向的版本 -- TLSv1 |
0B-0E | 4 | 40 44 35 27 | GMT Unix时间 |
0C-2A | 28 | 5c ... 72 | 28字节随机数,和4字节的时间组成client_random |
2B | 1 | 00 | Session ID长度 (恢复会话时使用) |
2C-2D | 2 | 00 36 | 加密套件长度 -- 27个 (每个2字节) |
2E-63 | 54 | .... | 27个算法套件(TLS1.2 0xFF结尾?) |
64 | 1 | 01 | 压缩算法长度 |
65 | 1 | 00 | 压缩算法: NULL |
算法套件对应的编号可以在此链接查看
算法套件
也可以使用openssl ciphers -V ‘ECDSA+AES+SM3‘
告诉客户端服务器的选择,协议版本,算法套件,压缩方法。也包括一个32字节的随机数。
字节 | 长度 | 值 | 描述 |
---|---|---|---|
00 | 1 | 16 | 记录内容类型 -- 握手消息 |
01-02 | 2 | 03 01 | SSL版本 -- TLSv1 |
03-04 | 2 | 00 2a | 记录长度 |
05 | 1 | 02 | 握手类型 -- Server_Hello |
06-08 | 3 | 00 00 26 | 消息长度 |
09-0A | 2 | 03 01 | SSL版本 -- TLSv1 |
0B-0E | 4 | 40 44 35 27 | GMT Unix时间 |
0C-2A | 28 | cc ... b9 | 28字节随机数,和4字节的时间组成server_random |
2B | 1 | 00 | Session ID长度 (恢复会话时使用) |
2C-2D | 2 | 00 16 | 选择的加密套件 |
2E | 1 | 00 | 选择的压缩算法NULL |
扩展server hello不能出现扩展client hello中没有出现的扩展类型。
由正确顺序的X509证书链组成,第一个是服务端证书,后续是签发服务端证书的证书。客户端使用服务端证书的公钥来加密pre_master_secret或者验证server_key_exchange。
字节 | 长度 | 值 | 描述 |
---|---|---|---|
00 | 1 | 16 | 记录内容类型 -- 握手消息 |
01-02 | 2 | 03 01 | SSL版本 -- TLSv1 |
03-04 | 2 | 02 05 | 记录长度 |
05 | 1 | 0b | 握手类型 -- Certificate |
06-08 | 3 | 00 02 01 | 消息长度 |
09-0B | 3 | 00 01 fe | 证书长度 |
证书 |
空消息指示所有握手消息发送完毕,因为服务端可以在发送证书消息后发送一些可选的消息,所有需要。
字节 | 长度 | 值 | 描述 |
---|---|---|---|
00 | 1 | 16 | 记录内容类型 -- 握手消息 |
01-02 | 2 | 03 01 | SSL版本 -- TLSv1 |
03-04 | 2 | 00 04 | 记录长度 |
05 | 1 | 0e | 握手类型 -- Server_Hello_Done |
检查最后3字节 |
当使用RSA密钥交换时包含pre_master_secret,包含2字节的版本和46字节的随机数
字节 | 长度 | 值 | 描述 |
---|---|---|---|
00 | 1 | 16 | 记录内容类型 -- 握手消息 |
01-02 | 2 | 03 01 | SSL版本 -- TLSv1 |
03-04 | 2 | 00 86 | 记录长度 |
05 | 1 | 10 | 握手类型 -- Client_Key_Exchange |
06-08 | 3 | 00 00 82 | 消息长度 |
pre_master_secret(130字节,用服务端证书中的公钥加密) |
客户端证书地显式验证,只有当证书有签名能力时发送(除了那些包含固定DH参数的证书)
签名的数据是从Client_Hello开始所有发送和接收的握手消息(包括消息的类型和长度),但不包括本条消息
此消息是第一个受保护的消息,接收方必须验证内容正确。摘要计算包括所有握手消息但不包括本消息。 只是握手层可见的数据,不包括记录层头。(注意:change cipher spec, alerts和其他记录类型都不是握手消息)
verify_data
PRF(master_secret, finished_label, MD5(handshake_messages) +
SHA-1(handshake_messages)) [0..11];
16 03 03 00 50 14 00 00 0c 09 ef c6 0d 6b 32 27 86 e4 73 0c b1
HTTP请求消息:Get /test.html HTTP/1.0
HTTP响应消息
标签:0x03 sea 公钥加密 http请求 加密 cer known hex 1.2
原文地址:https://www.cnblogs.com/logchen/p/10403061.html