🔒 HTTPS 工作原理

HTTPS = HTTP + TLS/SSL,在传输层对数据进行加密,确保通信的机密性、完整性和身份认证

🔐

加密传输

所有数据通过 TLS 加密隧道传输,即使被截获也无法读取明文内容

📜

身份认证

通过数字证书(CA 签发)验证服务器身份,防止中间人伪造

数据完整

MAC 消息认证码确保数据在传输过程中未被篡改

TLS 握手流程

建立安全连接的核心过程(TLS 1.2 握手,共 7 步)

💻
客户端
Client (浏览器)
🖥️
服务器
Server (Web 服务器)
1

ClientHello C → S

客户端发送支持的 TLS 版本加密套件列表(如 ECDHE-RSA-AES128-GCM-SHA256)、随机数 Client Random 和可选的 SNI(Server Name Indication)

2

ServerHello S → C

服务器从客户端列表中选择 TLS 版本加密套件,发送 随机数 Server Random,以及 数字证书(含公钥)

3

证书验证 客户端

客户端验证证书链:服务器证书 → 中间 CA → 根 CA,检查有效期、域名匹配、签名合法性。根 CA 证书预装在操作系统/浏览器信任库中

服务器证书
example.com
中间 CA
DigiCert SHA2
根 CA
DigiCert Global Root
4

密钥交换(ECDHE) 双向

客户端根据证书中的公钥参数,生成 Pre-Master Secret,通过 ECDHE(椭圆曲线 Diffie-Hellman)算法,双方各自计算出相同的 会话密钥(Session Key)。私钥不参与密钥传输,实现前向安全

🔑
公钥
包含在证书中
用于验证签名
🗝️
私钥
仅服务器持有
永不传输
🤝
会话密钥
双方独立计算
用于对称加密
5

ChangeCipherSpec C → S

客户端发送 ChangeCipherSpec 消息,通知服务器后续消息将使用协商好的 会话密钥 进行对称加密,并发送 Finished 消息(加密后的握手摘要)

6

ChangeCipherSpec S → C

服务器同样发送 ChangeCipherSpec 和加密的 Finished 消息。双方验证彼此的 Finished 消息,确认握手未被篡改

7

✅ 安全通道建立

握手完成!后续所有 HTTP 请求/响应都通过 会话密钥 进行对称加密传输(如 AES-GCM),配合 HMAC 保证数据完整性

HTTP 请求
明文
AES-GCM
对称加密
密文传输
TLS 隧道
AES-GCM
对称解密
HTTP 响应
明文

核心加密技术

HTTPS 综合使用非对称加密、对称加密和散列算法实现安全通信

🔤 非对称加密

用于握手阶段的密钥交换和身份认证

常用算法:
RSA
2048 / 4096 bit
ECDHE
椭圆曲线 DH
ECDSA
椭圆曲线签名
特点:公钥加密,私钥解密。速度慢,仅用于握手阶段交换会话密钥。ECDHE 支持前向安全(PFS)——即使长期私钥泄露,历史会话密钥也不会被推导。

⚡ 对称加密

用于握手完成后实际数据的加密传输

常用算法:
AES-128-GCM
AEAD 加密
AES-256-GCM
AEAD 加密
ChaCha20-Poly1305
AEAD 加密
特点:加密解密使用同一密钥,速度快(比非对称快 100-1000 倍)。GCM 模式同时提供加密和认证(AEAD),无需额外 HMAC。

🧮 散列 / 摘要算法

用于验证数据完整性和生成 MAC

常用算法:
SHA-256
SHA-384
HMAC-SHA256
作用:对传输数据生成摘要,接收方重新计算并比对,确保数据未被篡改。证书签名也依赖散列算法。

🔗 数字证书体系

PKI 信任链确保服务器身份可信

签发流程:
① 服务器生成 CSR(证书签名请求),包含公钥和域名
② CA 机构验证服务器身份(域名所有权等)
③ CA 用自己的私钥对 CSR 签名,签发数字证书
④ 客户端通过 CA 公钥验证证书签名 → 建立信任

HTTP vs HTTPS 对比

一目了然的区别

对比项 HTTP HTTPS
默认端口 80 443
安全性 明文传输 加密传输
证书要求 不需要 需要 CA 签发的 SSL/TLS 证书
加密类型 无加密 非对称加密(握手)+ 对称加密(传输)
数据完整性 无法验证,易被篡改 HMAC / AEAD 保证完整性
SEO 影响 搜索引擎会降权 Google / 百度优先收录
性能开销 无额外开销 握手增加 1-2 RTT,现代硬件影响可忽略

完整数据流

从浏览器输入 URL 到页面渲染的全过程

1️⃣ DNS 解析
域名 → IP 地址(可通过 DoH/DoT 加密 DNS 查询)
2️⃣ TCP 三次握手
SYN → SYN-ACK → ACK(建立可靠连接)
3️⃣ TLS 握手(如上图 7 步)
协商加密参数、验证证书、交换密钥、建立安全通道
4️⃣ 加密 HTTP 请求/响应
所有数据通过对称加密隧道传输(AES-GCM / ChaCha20)
5️⃣ 页面渲染
浏览器解析 HTML、加载资源、执行 JS → 显示页面 🎉