FumadocsZDecode
网络 & HTTP

HTTP 与 HTTPS

HTTPS 在 HTTP 的基础上加入了 SSL/TLS 层,解决了 HTTP 明文传输带来的三个核心问题:窃听、篡改、身份冒充。

HTTP vs HTTPS

维度HTTPHTTPS
传输方式明文SSL/TLS 加密
窃听风险有(账号密码可被截获)无(内容加密)
篡改风险有(内容可被注入广告)无(完整性校验)
身份验证数字证书验证服务端身份
默认端口80443
握手延迟TCP 三次握手TCP 握手 + TLS 握手
SEO普通搜索引擎优先收录

TLS 1.3 将握手压缩至 1-RTT(首次)和 0-RTT(会话恢复),现代网络下 HTTPS 与 HTTP 的性能差距可忽略不计。

TLS 握手流程

TLS 握手的目标是:在不安全的网络上,让双方协商出一个只有彼此知道的会话密钥,后续通信用该密钥对称加密。

ECDHE 握手(TLS 1.2,主流)

步骤方向内容
Client HelloC → S支持的加密套件 + 随机数 A
Server HelloS → C选定加密套件 + 随机数 B + 证书(含公钥)+ ECDHE 椭圆曲线公钥(带签名)
Client Key ExchangeC → S验证证书 → 发送客户端 ECDHE 公钥 → 双方独立算出共享密钥 → Change Cipher Spec
Server FinishedS → CChange Cipher Spec + 握手摘要验证

双方凑齐随机数 A + 随机数 B + ECDHE 共享密钥,推导出相同的会话密钥,后续通信切换为对称加密。

RSA 握手(TLS 1.2,旧方案)

第三步改为:客户端生成 Pre-master Secret,用服务端证书公钥加密后发送,服务端用私钥解密。三个随机数合并生成会话密钥。

RSA 方案的致命缺陷:无前向安全性。私钥一旦泄露,所有历史加密流量均可被离线解密。TLS 1.3 已移除 RSA 密钥交换。

ECDHE vs RSA

维度ECDHERSA
前向安全性✅ 有(每次握手临时生成密钥对,会话结束即销毁)❌ 无(私钥泄露导致历史流量全部可解密)
计算复杂度较高(椭圆曲线运算)较低
TLS 1.3 支持✅ 保留❌ 已移除

SSL/TLS 版本演进

版本年份要点
SSL 2.01995首个公开版本,存在多个安全漏洞
SSL 3.01996引入消息完整性校验,后被 POODLE 攻击淘汰
TLS 1.01999SSL 3.0 的标准化演进版本
TLS 1.22008引入 AES-GCM、SHA-256,目前广泛部署
TLS 1.32018握手简化为 1-RTT、支持 0-RTT 恢复、移除 RSA 密钥交换和旧加密算法

证书与信任链

HTTPS 的身份验证依赖证书信任链:服务端证书由 CA(证书颁发机构)签发,CA 根证书预装在操作系统和浏览器中。浏览器验证三项:

  • 证书是否由受信任 CA 签发
  • 证书域名是否与请求域名匹配
  • 证书是否在有效期内且未被吊销

自签名证书在技术上等同于 CA 证书,区别在于没有第三方背书,浏览器会显示安全警告。内网环境可将自签名根证书手动安装到系统信任列表中使用,对外服务须使用受信任 CA 签发的证书。

0-RTT 的限制

TLS 1.3 的 0-RTT 会话恢复使用上次会话的密钥加密早期数据,存在重放攻击风险:攻击者可原样重发 0-RTT 数据包。因此 0-RTT 数据只应用于幂等请求(如 GET),不得用于转账、下单等非幂等操作。

On this page