基本概念
SSL vs TLS
SSL(Secure Sockets Layer):安全套接字层,老版本
TLS(Transport Layer Security):传输层安全,SSL 的升级版
现在说的 "SSL 证书" 实际上都是 TLS,只是习惯叫法
版本演进:
SSL 1.0 → SSL 2.0 → SSL 3.0 → TLS 1.0 → TLS 1.1 → TLS 1.2 → TLS 1.3(当前主流)
🔑 三种加密技术
在深入握手过程前,先了解用到的加密方式:
1️⃣ 对称加密(速度快)
加密和解密用同一个密钥
例子:AES、DES
明文 + 密钥123 = 密文
密文 + 密钥123 = 明文
问题: 怎么安全地传递这个密钥?🤔
2️⃣ 非对称加密(更安全但慢)
有一对密钥:公钥(公开)+ 私钥(保密)
公钥加密,只能私钥解密
例子:RSA、ECC
明文 + 公钥 = 密文
密文 + 私钥 = 明文
3️⃣ 哈希算法(验证完整性)
单向加密,不可逆
例子:SHA-256、MD5
任意数据 → 固定长度摘要
(改动一个字符,摘要完全不同)
🤝 HTTPS 握手过程(核心!)
完整流程图
客户端(浏览器) 服务器
| |
|------ ① Client Hello -----------→ |
| (支持的加密套件、随机数A) |
| |
|←----- ② Server Hello ------------ |
| (选定的加密套件、随机数B) |
| |
|←----- ③ Certificate ------------- |
| (服务器证书+公钥) |
| |
|←----- ④ Server Hello Done ------- |
| |
|------ ⑤ Client Key Exchange ---→ |
| (用服务器公钥加密的随机数C) |
| |
|------ ⑥ Change Cipher Spec ----→ |
| (通知:后续用协商的密钥加密) |
| |
|------ ⑦ Finished ---------------→ |
| (握手消息的加密摘要) |
| |
|←----- ⑧ Change Cipher Spec ----- |
| |
|←----- ⑨ Finished --------------- |
| |
|====== 开始加密通信 ===============|
📝 逐步详解
Step 1: Client Hello 👋
客户端发送:
支持的 TLS 版本
支持的加密算法列表
随机数 A(用于后续生成会话密钥)
支持的压缩方法
Step 2: Server Hello 👋
服务器回应:
选定的 TLS 版本
选定的加密算法
随机数 B
Step 3: Certificate 📜
服务器发送:
数字证书(包含服务器公钥)
证书由 CA(证书颁发机构)签名
客户端验证证书:
1. 检查证书是否过期
2. 检查域名是否匹配
3. 验证 CA 签名(用 CA 的公钥)
4. 检查证书是否被吊销
Step 4: Server Hello Done
服务器表示:我说完了
Step 5: Client Key Exchange 🔑(关键步骤!)
客户端:
生成随机数 C(Pre-Master Secret)
用服务器公钥加密随机数 C
发送给服务器
此时双方都有:
随机数 A(明文)
随机数 B(明文)
随机数 C(只有用私钥才能解密)
Step 6-7: 生成会话密钥 🎯
双方独立计算:
会话密钥 = 函数(随机数A + 随机数B + 随机数C)
这个会话密钥用于对称加密实际数据!
客户端发送 Finished 消息(用会话密钥加密)
Step 8-9: 服务器确认
服务器也发送 Finished 消息
Step 10: 开始加密通信 ✅
后续所有数据用会话密钥进行对称加密传输
💡 为什么这样设计?
巧妙的混合加密方案:
握手阶段:非对称加密(RSA)
↓
协商出会话密钥
↓
数据传输:对称加密(AES)
原因:
🐢 非对称加密慢,只用来传密钥
🚀 对称加密快,用来传大量数据
🔐 结合两者优势,既安全又高效
🛡️ 数字证书的作用
证书包含什么?
{
"颁发给": "www.example.com",
"公钥": "MIIBIjANBgkq...",
"颁发者": "Let's Encrypt",
"有效期": "2024-01-01 至 2025-01-01",
"数字签名": "用CA私钥签名的哈希值"
}
验证链
根证书(操作系统内置)
↓ 签名
中间证书
↓ 签名
服务器证书
🎪 TLS 1.3 的改进
相比 TLS 1.2,TLS 1.3 更快更安全:
1. 握手简化:
TLS 1.2: 2-RTT(往返)
TLS 1.3: 1-RTT
0-RTT 模式:恢复连接时 0 往返!
2. 移除弱加密算法:
❌ 不再支持 RSA 密钥交换
✅ 强制使用前向保密(DHE、ECDHE)
3. 加密更多握手信息
🔍 实际抓包示例
使用 Wireshark 可以看到:
1. Client Hello [明文]
2. Server Hello [明文]
3. Certificate [明文]
4. ...
5. Application Data [密文] ← 这里开始就看不懂了!
🚨 常见攻击与防御
1. 中间人攻击(MITM)
攻击方式:拦截通信,替换证书
防御:证书验证、证书固定
2. 降级攻击
攻击方式:强制使用弱加密
防御:TLS 1.3 移除弱算法
3. 重放攻击
攻击方式:重复发送旧数据
防御:每次会话不同的随机数
📚 总结
HTTPS = HTTP + TLS 的核心思想:
✅ 用非对称加密安全地协商对称密钥
✅ 用对称加密快速传输数据
✅ 用数字证书验证服务器身份
✅ 用哈希算法保证数据完整性
一句话记忆:
握手用非对称(慢但安全地传密钥),通信用对称(快速传数据),证书保证你连的是真网站!