HTTPS 协议

HTTPS = HTTP + TLS协议/SSL协议,在 HTTP 基础上增加加密层,端口 443。 RFC 2818(2000)定义 HTTPS,实质是"HTTP over TLS"。

1. 网络拓扑

scss 复制代码
┌─────────────────────────────────────────────────────────────────┐
│                  HTTPS 分层加密拓扑                              │
│                                                                 │
│  ┌──────────┐                              ┌──────────┐        │
│  │ 浏览器    │ ←── TCP 443 ──────────────→ │ Web 服务器│        │
│  │ (客户端)  │                              │          │        │
│  │          │  分层架构:                   │          │        │
│  │ ┌──────┐ │  ┌─────────────┐             │ ┌──────┐ │        │
│  │ │HTTP  │ │  │ HTTP 语义   │ ← 不变 ──→  │ │HTTP  │ │        │
│  │ │应用层│ │  │ 请求/响应   │             │ │应用层│ │        │
│  │ └──────┘ │  ├─────────────┤             │ └──────┘ │        │
│  │ ┌──────┐ │  │ TLS 加密层  │ ← 透明 ──→  │ ┌──────┐ │        │
│  │ │TLS   │ │  │ 加密/认证   │             │ │TLS   │ │        │
│  │ │安全层│ │  │ 完整性     │             │ │安全层│ │        │
│  │ └──────┘ │  ├─────────────┤             │ └──────┘ │        │
│  │ ┌──────┐ │  │ TCP 传输层  │ ← 不变 ──→  │ ┌──────┐ │        │
│  │ │TCP   │ │  │ 可靠字节流 │             │ │TCP   │ │        │
│  │ └──────┘ │  └─────────────┘             │ └──────┘ │        │
│  └──────────┘                              └──────────┘        │
│                                                                 │
│  证书信任链验证:                                               │
│  ┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐ │
│  │ 服务器   │ ←─ │ 中间 CA  │ ←─ │ 根 CA    │ ←─ │ 系统     │ │
│  │ 证书     │    │ 证书     │    │ 证书     │    │ 信任库   │ │
│  │ *.com    │    │ (签发者) │    │ (自签)   │    │ (预置)   │ │
│  └──────────┘    └──────────┘    └──────────┘    └──────────┘ │
│       签名验证 ──→ 签名验证 ──→ 信任锚点                       │
│                                                                 │
│  连接建立开销:                                                 │
│  HTTP:  1-RTT (TCP握手)                                         │
│  HTTPS: 2-3 RTT (TCP + TLS 1.2) 或 1-RTT (TLS 1.3)             │
│  HTTPS+0-RTT: 0-RTT 恢复(仅幂等请求安全)                     │
└─────────────────────────────────────────────────────────────────┘

2. 设计哲学

HTTPS 不是新协议,而是HTTP 运行在 TLS 之上。设计思路是分层组合:

复制代码
应用层语义:  HTTP 请求/响应(不变)
安全层:      TLS 加密/认证/完整性
传输层:      TCP 可靠传输(不变)

专家视角 :HTTPS 的伟大在于HTTP 完全不用改。所有 Web 应用代码、中间件、缓存语义照旧,TLS 在下层透明地加解密。这是分层架构的教科书案例------在正确层次解决问题,不污染上层。

3. 完整连接建立流程

下图为 TLS 1.2 的完整握手(2 RTT,含 ServerKeyExchange / ChangeCipherSpec);TLS 1.3 已精简为 1 RTT 且 ServerHello 之后消息全部加密,详见 TLS协议。

lua 复制代码
客户端                                    服务器
  |                                         |
  | --- TCP SYN ---------------------------> |  (1) TCP 三次握手
  | <-- TCP SYN-ACK ------------------------ |
  | --- TCP ACK ---------------------------> |
  |                                         |
  | --- TLS ClientHello -------------------> |  (2) TLS 握手
  |     (支持的密码套件、随机数、SNI)         |
  | <-- TLS ServerHello ------------------- |
  |     (选定的密码套件、随机数)              |
  | <-- TLS Certificate ------------------- |
  |     (服务器证书链)                       |
  | <-- TLS ServerKeyExchange -------------- |
  |     (DH 公开参数)                        |
  | <-- TLS ServerHelloDone ---------------- |
  | --- TLS ClientKeyExchange -------------> |
  |     (加密的 PreMasterSecret / DH 公钥)   |
  | --- TLS ChangeCipherSpec --------------> |
  | --- TLS Finished ----------------------> |
  |     (加密的握手摘要)                     |
  | <-- TLS ChangeCipherSpec --------------- |
  | <-- TLS Finished ----------------------- |
  |                                         |
  | =** 加密 HTTP 通信 **=================> |  (3) 应用数据
  |                                         |

专家视角 :HTTPS 首次连接需要 2-RTT TCP+TLS + 证书验证。TLS 1.3 优化到 1-RTT,0-RTT 恢复甚至 0-RTT------但 0-RTT 有重放攻击风险,仅适合幂等请求。

4. 核心安全机制

机制 防御目标 实现方式
加密 窃听(机密性) 对称加密(AES-GCM/ChaCha20-Poly1305)
证书 中间人冒充(认证) CA 签发 X.509 证书,客户端验证证书链
完整性 篡改 AEAD 或 HMAC
前向安全 长期密钥泄露不危及旧通信 ECDHE 临时密钥对
降级保护 强制降级到弱算法 TLS_FALLBACK_SCSV / TLS 1.3 移除弱算法

5. 证书验证深度

证书验证是 HTTPS 安全的最关键环节,也是最容易被忽略的:

5.1. 验证链

复制代码
服务器证书 → 中间 CA 证书 → 根 CA 证书(系统信任库)

验证步骤:

  1. 证书链构建:服务器发送证书链,客户端逐级向上找签发者
  2. 签名验证:用上级 CA 公钥验证下级证书的签名
  3. 有效期检查:notBefore ≤ 当前时间 ≤ notAfter
  4. 主机名匹配:证书 SAN(Subject Alternative Name)匹配请求的域名
  5. 吊销检查:OCSP(在线)或 CRL(离线)检查证书是否被吊销

专家视角 :证书验证做错等于没有加密。常见错误:

  • 忽略证书错误继续连接(curl -k、Python verify=False)
  • 不验证主机名(只验证证书链不验证域名)
  • 信任所有证书(TrustAllManager)
  • 不检查吊销状态(OCSP Stapling 可减少开销)

5.2. 证书透明度(CT)

  • RFC 6962,证书必须提交到 CT Log,Log 返回签名收据(SCT)
  • 浏览器要求 EV 证书和 2018+ 新签证书必须包含 SCT
  • 目的:让误签证书可被发现(CA 被入侵或恶意签发)

6. HTTP vs HTTPS

对比项 HTTP HTTPS
端口 80 443
加密 无 TLS/SSL
证书 不需要 需要 CA 证书
首次延迟 1-RTT(TCP) 2-3 RTT(TCP+TLS)
服务器开销 低 TLS 握手 CPU + 证书验证
安全性 明文,可窃听/篡改 加密,防窃听/篡改
现代地位 已淘汰 强制(HTTP/2/3 事实上要求 TLS)

7. 性能优化

优化项 说明 效果
TLS 1.3 1-RTT 握手 减少 50% 握手延迟
Session Resumption 复用会话,0-RTT 恢复连接近零延迟
OCSP Stapling 服务器附带 OCSP 响应 省去客户端在线查吊销
HTTP/2 多路复用 减少连接数,省多次握手
ECC 证书 ECDSA 替代 RSA 证书更小,握手更快
False Start 握手未完成即发数据 减少 1-RTT(TLS 1.2)
HSTS 强制 HTTPS 省去 307 重定向

7.1. HSTS 详解

ini 复制代码
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
  • max-age:浏览器在此期间强制 HTTPS(31536000 = 1 年)
  • includeSubDomains:子域名也强制
  • preload:申请加入浏览器内置 HSTS 列表(首次访问也强制 HTTPS)

专家视角 :HSTS 解决的是首次访问的降级攻击 ------攻击者在首次 HTTP 请求时劫持 302 重定向。preload 列表是终极方案(Chrome/Firefox 内置数千域名),但申请需谨慎:提交后只能通过官方 removal 流程申请撤销,且要等浏览器新版本发布才能生效(周期以月计),期间无法回到 HTTP。

相关推荐
情 九1 小时前
Dify HTTP 请求节点实战:发送 JSON、解析响应与处理异常
网络协议·http·json·dify
ITxiaobing20236 小时前
海外广告投放的 IP 定位服务怎么选?一份基于实测数据的选型参考
网络协议·tcp/ip·php
Lsetea8 小时前
curl -I检查HTTPS返回405:HEAD、GET与证书验收分层排查
linux·http·https·ssl证书·curl
我命由我123459 小时前
Python 开发 - Python 虚拟环境
运维·开发语言·后端·python·http·https·java-ee
承渊政道9 小时前
Linux网络学习【传输层协议UDP】
linux·网络·网络协议·学习·ubuntu·udp
Chery11409 小时前
DPE5500 SPI以太网协议栈芯片详解:10/100M以太网、硬件TCP/IP与国产替代方案
arm开发·网络协议·tcp/ip
zxanz110 小时前
SSL 证书该怎么申请?操作复杂吗?
网络·网络协议·ssl
syagain_zsx13 小时前
WebSocket 教程:websocketpp 写 echo 服务端
linux·网络·c++·websocket·网络协议·工具库
溪语流沙14 小时前
【Web全栈进阶】Nginx反向代理 + HTTPS:正式上线
前端·vue.js·python·nginx·https·fastapi
2501_9160088914 小时前
马甲包过审卡在哪?Ipa Guard 能做的和做不到的
android·小程序·https·uni-app·iphone·webview