200字
SSL/TLS 工作原理详解 🔐
2025-12-02
2025-12-02

基本概念

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 🔑(关键步骤!)

客户端:

  1. 生成随机数 C(Pre-Master Secret)

  2. 用服务器公钥加密随机数 C

  3. 发送给服务器

此时双方都有:

  • 随机数 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 的核心思想:

  1. ✅ 用非对称加密安全地协商对称密钥

  2. ✅ 用对称加密快速传输数据

  3. ✅ 用数字证书验证服务器身份

  4. ✅ 用哈希算法保证数据完整性

一句话记忆:

握手用非对称(慢但安全地传密钥),通信用对称(快速传数据),证书保证你连的是真网站!

评论