首页/计算机网络/06-application/HTTPS协议 🔗 在 Obsidian 中打开
计算机网络 · 06-application

HTTPS协议

难度 ★★★重要度 ★★★★★ 考查频率 低 计算机网络/应用层TLSSSL数字证书加密握手
速查
$HTTPS = HTTP + TLS/SSL$,在 HTTP 基础上增加机密性、完整性、身份验证。HTTP 端口 80,HTTPS 端口 443。采用混合加密:非对称协商对称密钥,对称加密实际数据;通过CA 数字证书验证服务器身份。

一、基本概念

$HTTPS = HTTP + TLS/SSL$,在 HTTP 基础上增加加密和身份验证。

特性HTTPHTTPS
端口80443
加密明文TLS 加密
证书不需要需要 CA 证书
性能略慢(握手开销)
安全性

HTTPS 解决的问题

  1. 机密性:加密传输内容
  2. 完整性:防止篡改
  3. 身份验证:验证服务器身份

二、TLS/SSL 协议栈

┌───────────────────────────┐
│        应用层 (HTTP)        │
├───────────────────────────┤
│   TLS记录协议 (TLS Record)  │
├───────────────────────────┤
│   TLS握手协议               │
│   TLS密码变更协议           │
│   TLS告警协议               │
├───────────────────────────┤
│        TCP                 │
├───────────────────────────┤
│        IP                  │
└───────────────────────────┘

三、对称加密与非对称加密

对称加密

  • 加密和解密使用相同密钥
  • 速度快
  • 问题:密钥如何安全传输?
  • 算法:AES、DES、3DES、ChaCha20

非对称加密

  • 公钥加密,私钥解密(加密)
  • 私钥签名,公钥验证(签名)
  • 速度慢
  • 解决密钥分发问题
  • 算法:RSA、ECC、Diffie-Hellman

HTTPS 的混合加密

阶段1(非对称): 用非对称加密协商对称密钥
阶段2(对称): 用对称密钥加密实际数据

四、数字证书

证书内容(X.509)

┌──────────────────────────────┐
│         数字证书 (X.509)       │
├──────────────────────────────┤
│ 版本号 / 序列号 / 签名算法      │
│ 颁发者(issuer)                │
│ 有效期                        │
│ 使用者(subject) = 网站域名     │
│ 使用者公钥                     │  ← 关键
│ CA的数字签名                   │  ← 关键
└──────────────────────────────┘

CA(证书颁发机构)

  • 受信任的第三方机构
  • 验证网站身份后签发证书
  • 浏览器内置受信任 CA 列表

证书信任链

根CA (Root CA)  ← 浏览器内置信任
    │ 签发
    ▼
中间CA (Intermediate CA)
    │ 签发
    ▼
网站证书 (leaf certificate)

五、TLS 握手过程(TLS 1.2,RSA)

客户端                              服务器
  │  ① ClientHello (版本/套件/随机数)  │
  │ ─────────────────────────────────→ │
  │  ② ServerHello (选定版本/套件/随机数)│
  │  ③ Certificate (服务器证书)         │
  │  ④ ServerHelloDone                 │
  │ ←───────────────────────────────── │
  │  ⑤ ClientKeyExchange (预主密钥,公钥加密)│
  │  ⑥ ChangeCipherSpec                │
  │  ⑦ Finished                         │
  │ ─────────────────────────────────→ │
  │  ⑧ ChangeCipherSpec ⑨ Finished     │
  │ ←───────────────────────────────── │
  │  ═══ 加密应用数据 ═══              │

密钥生成过程

客户端随机数 + 服务器随机数 + 预主密钥
                │
        密钥派生函数(KDF)
                │
    主密钥(Master Secret)
                │
    会话密钥: 加密密钥、MAC密钥、IV

六、TLS 1.3 改进

  1. 握手从 2-RTT 降为 1-RTT
  2. 支持 0-RTT 恢复
  3. 移除不安全算法(RSA 密钥交换、CBC 模式等)
  4. 必须使用前向保密(ECDHE/DHE)
客户端 → ClientHello + 密钥共享 → 服务器
服务器 → ServerHello + 密钥共享 + 证书 + Finished
客户端 → Finished
═══ 1-RTT 加密通信 ═══
0-RTT 风险客户端缓存上次会话信息,首消息即带加密数据;安全性较低(可能重放攻击)。

七、密码套件(Cipher Suite)

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
│    │      │       │     │    │
│    │      │       │     │    └─ PRF哈希
│    │      │       │     └─ 分组密码模式
│    │      │       └─ 对称加密算法
│    │      └─ 身份验证算法
│    └─ 密钥交换算法
└─ 协议
套件安全性性能
ECDHE-RSA-AES256-GCM-SHA384
ECDHE-RSA-AES128-GCM-SHA256
ECDHE-ECDSA-AES256-GCM-SHA384

八、前向保密(Forward Secrecy)

即使服务器私钥泄露,之前的加密通信也无法被解密。

  • 使用临时密钥(Ephemeral Key)
  • 每次会话生成新的临时密钥对
  • 会话结束后销毁临时私钥

ECDHE(椭圆曲线 Diffie-Hellman 临时密钥):

客户端生成临时密钥对 $(a, g^{a})$,服务器生成 $(b, g^{b})$;交换公钥 $g^{a} \leftrightarrow g^{b}$;共享密钥 $g^{(ab)}$。

记忆卡片

HTTPS 在 HTTP 基础上增加了什么?
机密性(加密)、完整性(防篡改)、身份验证(CA 证书验服务器身份)。
TLS 握手核心步骤?
ClientHello → ServerHello + 证书 → 客户端验证书 → 密钥交换 → 双方生成会话密钥 → 加密通信。
什么是前向保密?如何实现?
私钥泄露后历史通信仍安全;每次会话用临时密钥(ECDHE),会话后销毁临时私钥。
TLS 1.3 相对 1.2 改进?
握手 2-RTT→1-RTT、支持 0-RTT、必须前向保密、移除不安全算法。

交互动画 · TLS 1.2 握手流程

客户端服务器 ① ClientHello ② ServerHello ③ Certificate ④ ServerHelloDone ⑤ ClientKeyExchange ⑥ ChangeCipherSpec ⑦ Finished ⑧⑨ ChangeCipherSpec+Finished ═══ 加密应用数据 ═══
点击「下一步」逐步查看 TLS 1.2 RSA 握手消息(共 9 步)
① 协商② 认证③ 密钥交换④ 切换加密⑤ 加密通信
手动模式
TLS 1.2 共 2-RTT 完成握手(RSA 密钥交换)
示意图:握手分「协商—认证—密钥交换—切换加密」四阶段,之后进入加密通信。

相关知识点

http-protocol dns-domain-name-system

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。