网络传输过程
https传输过程
客户端发起HTTPS请求
操作:用户在浏览器输入 https://www.example.com
技术细节:
客户端向服务器443端口发起TCP连接
发送Client Hello消息(包含支持的TLS版本、加密套件、客户端随机数)
安全意义:建立安全通信的起点
服务器返回数字证书
操作:服务器响应并发送数字证书
技术细节:
包含公钥A(通常为RSA/ECC公钥)
证书包含:域名、有效期、颁发机构、公钥信息
示例证书结构:
plaintext
证书版本:v3
序列号:00:aa:bb:cc...
签名算法:sha256WithRSA
颁发者:CN=DigiCert Global CA
有效期:2023-01-01 至 2024-12-31
主体:CN=www.example.com
公钥:RSA 2048位
X509v3扩展:
Subject Alternative Name: DNS:example.com
安全意义:提供服务器身份凭证
客户端验证证书
操作:客户端验证证书合法性
验证流程:
检查证书有效期
验证证书链(从服务器证书→中间CA→根CA)
检查CRL/OCSP吊销状态
验证域名匹配(防止钓鱼网站)
验证失败处理:
浏览器显示警告(如NET::ERR_CERT_INVALID)
用户可选择是否继续访问
生成会话密钥
操作:客户端生成随机对称密钥
技术细节:
生成256位随机数(称为Pre-Master Secret)
在TLS 1.3中称为"Shared Secret"
结合客户端随机数、服务器随机数生成最终会话密钥
math
会话密钥 = HKDF_Expand(
HKDF_Extract(Pre-Master, "TLS Key"),
ClientRandom + ServerRandom,
32
)
安全意义:确保每次会话使用唯一密钥
加密传输会话密钥
操作:用公钥A加密会话密钥
技术细节:
使用RSA加密:Ciphertext = (KEY^e) mod n
或使用ECDH密钥交换(更安全的前向保密)
TLS 1.3中默认使用ECDHE密钥交换
安全意义:防止中间人获取对称密钥
服务器解密会话密钥
操作:服务器用私钥B解密
技术细节:
RSA解密:KEY = (Ciphertext^d) mod n
此时双方拥有相同的会话密钥
安全意义:建立端到端的加密通道基础
切换加密模式
操作:双方发送ChangeCipherSpec
技术细节:
客户端→服务器:ChangeCipherSpec通知
服务器→客户端:ChangeCipherSpec响应
启用协商好的加密套件(如AES_256_GCM)
安全意义:正式启用加密通信
加密数据传输(客户端→服务器)
操作:客户端发送加密的HTTP请求
技术细节:
python
# 加密过程
ciphertext = AES_GCM_encrypt(
key=会话密钥,
plaintext="GET / HTTP/1.1...",
nonce=随机数,
auth_data=附加数据
)
实际数据包:
hex
17 03 03 00 30 # TLS头部
01 02 03 ... 3A # 加密后的应用数据
60 7B 91 A5 # 认证标签(GCM)
加密数据传输(服务器→客户端)
操作:服务器返回加密的HTTP响应
技术细节:
使用相同会话密钥解密请求
生成加密响应:
python
response = "HTTP/1.1 200 OK..."
encrypted_res = AES_GCM_encrypt(key, response)
性能优化:
TLS会话恢复(Session Tickets)
0-RTT数据(TLS 1.3特性)
连接关闭
操作:加密通信结束
技术细节:
发送加密的close_notify警报
安全关闭TCP连接
安全意义:防止截断攻击
关键安全机制总结:
双阶段加密:
非对称加密:安全传输会话密钥(RSA/ECDH)
对称加密:高效加密业务数据(AES/ChaCha20)
证书信任体系:
三级验证(服务器证书→中间CA→根CA)
OCSP在线证书状态检查
前向保密(PFS):
ECDHE密钥交换
每次会话生成唯一密钥
即使私钥泄露,历史会话仍安全
完整性保护:
HMAC-SHA256消息认证
AEAD模式(如AES-GCM)内置完整性校验
DNS传输过程
客户端发起DNS查询
操作:用户在浏览器输入域名(如 www.example.com)
技术细节:
生成DNS查询报文(UDP 53端口)
报文结构:
plaintext
Header:
ID: 0x4d20 // 随机事务ID
Flags: RD=1 // 递归查询请求
Questions: 1
Question Section:
QNAME: www.example.com
QTYPE: A // 请求IPv4地址
QCLASS: IN // Internet类
协议选择:
默认使用UDP(报文<512字节)
大响应自动切换TCP
解析器检查缓存
操作:本地DNS解析器查询缓存
检查内容:
浏览器DNS缓存
操作系统DNS缓存
路由器DNS缓存
ISP DNS服务器缓存
缓存时效:
根据TTL(Time to Live)值决定
典型TTL值:
根域名:48小时
TLD域名:24小时
主机记录:5分钟-1小时
查询根DNS服务器
操作:解析器向根DNS服务器发起查询
技术细节:
全球13组根服务器(a.root-servers.net ~ m.root-servers.net)
响应包含TLD服务器信息:
plaintext
Authority Section:
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
Additional Section:
a.gtld-servers.net. A 192.5.6.30
b.gtld-servers.net. A 192.33.14.30
关键点:根服务器不返回最终IP,只引导至正确TLD
查询顶级域(TLD)DNS
操作:解析器向.com TLD服务器查询
技术细节:
TLD服务器管理特定后缀(.com, .org, .cn等)
响应包含权威DNS信息:
plaintext
Authority Section:
example.com. 86400 IN NS ns1.example.com.
example.com. 86400 IN NS ns2.example.com.
Additional Section:
ns1.example.com. A 192.0.2.1
ns2.example.com. A 192.0.2.2
查询权威DNS服务器
操作:解析器向域名注册的权威DNS查询
技术细节:
权威服务器持有最终DNS记录
返回A记录(IPv4)或AAAA记录(IPv6):
plaintext
Answer Section:
www.example.com. 300 IN A 93.184.216.34
www.example.com. 300 IN A 93.184.216.35 // 可能多个IP
记录类型:
A:IPv4地址
AAAA:IPv6地址
CNAME:别名记录(如www→example.com)
MX:邮件服务器
TXT:文本验证信息
缓存并返回结果
操作:解析器缓存结果并返回客户端
缓存机制:
分层缓存:本地→ISP→公共DNS
缓存污染防护:
随机事务ID(16位)
随机源端口(DNS over TCP)
响应报文:
plaintext
Header:
ID: 0x4d20
Flags: QR=1, RA=1 // 响应+递归可用
Answer RRs: 1
Answer Section:
www.example.com. 300 IN A 93.184.216.34
客户端建立连接
操作:客户端使用IP建立TCP连接
后续流程:
TCP三次握手
如果是HTTPS:TLS握手
HTTP请求/响应
关键点:DNS只负责域名→IP转换,不参与后续通信