HTTPS 详细工作流程 深入解析为什么HTTPS是安全的

一、HTTPS整体流程

HTTPS 的工作流程可分为 TCP连接建立TLS握手协商安全数据传输 三个阶段:

[客户端]                [服务器]
│                       │
├── 1. TCP三次握手       → (建立网络连接)
│                       │
├── 2. TLS握手(4阶段)   → (协商加密参数、验证身份)
│                       │
└── 3. 加密通信          → (传输应用数据)

二、详细步骤说明

1. TCP三次握手(底层网络连接)

  • 目的:确保客户端和服务器之间网络可达。
  • 流程:
    1. 客户端发送 SYN 包(请求连接)。
    2. 服务器回复 SYN-ACK 包(确认请求并同步序列号)。
    3. 客户端发送 ACK 包(确认握手完成)。
  • 结果:双方建立可靠的 TCP 连接。

2. TLS握手(加密协商)

TLS 握手是 HTTPS 的核心,分为以下 4个阶段

阶段1:ClientHello
  • 客户端发起请求:
    • 支持的 TLS 版本(如 TLS 1.2/1.3)。
    • 支持的密码套件(如 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256)。
    • 客户端生成的随机数(Client Random)。
  • 作用:告知服务器自身的安全能力。
[客户端] → {ClientHello} [服务器]
            包含:TLS版本、密码套件、Client Random

阶段2:ServerHello
  • 服务器响应:
    • 选中的 TLS 版本和密码套件(从客户端提供的列表中选取)。
    • 服务器证书(包含公钥和域名信息)。
    • 服务器生成的随机数(Server Random)。
  • 作用:确认加密方式,证明服务器身份。
[服务器] → {ServerHello, Certificate} [客户端]
            包含:TLS版本、密码套件、Server Random、证书

阶段3:证书验证与密钥协商
  • 客户端验证证书:

    • 检查证书是否由可信 CA 签发。
    • 域名是否匹配(如证书域名是 google.com,则客户端访问的 URL 必须是 google.com)。
    • 证书是否过期。
  • 密钥生成:

    • 客户端生成 预主密钥(Pre-Master Secret),并通过服务器公钥加密后发送。
    • 密钥交换算法:
      • RSA:直接用服务器公钥加密 Pre-Master Secret。
      • ECDHE:通过椭圆曲线临时密钥交换,更安全(防长期泄露风险)。
  • 示例(ECDHE):

    [客户端] → {Encrypted Pre-Master Secret} [服务器]
                (使用服务器公钥加密)
    

阶段4:生成会话密钥
  • 双方根据以下数据生成对称密钥:
    • Client Random(客户端随机数)
    • Server Random(服务器随机数)
    • Pre-Master Secret(预主密钥)
  • 生成的密钥类型:
    • 对称加密密钥(如 AES-256,用于加密数据)。
    • MAC 密钥(如 HMAC-SHA256,用于数据完整性校验)。
    • 初始化向量(IV)(用于防止重放攻击)。
  • 密钥分发:
    • 所有密钥通过协商的密码套件加密后传输。
[客户端] → {ChangeCipherSpec} [服务器]
            表示后续通信将加密
[服务器] → {ChangeCipherSpec} [客户端]
[客户端] → {ServerFinished} [服务器]
[服务器] → {ClientFinished} [客户端]

3. 安全数据传输

  • 数据加密:
    • 使用对称密钥(如 AES)加密 HTTP 数据。
    • 每个数据块附加 MAC(消息认证码),验证数据完整性。
  • 心跳机制:
    • 定时发送空数据包,检测连接是否存活,防止中间人攻击。
[客户端] → {Encrypted Data + MAC} [服务器]
[服务器] → {Encrypted Data + MAC} [客户端]

三、完整流程图(文字版)

┌───────────────┐          ┌───────────────┐
│   客户端      │          │   服务器      │
└───────┬───────┘          └───────┬───────┘
       ├──────────────────────┼──────────────────────┤
       │ 1. TCP三次握手        │                    │
       │ (建立网络连接)        │                    │
       └──────────────────────┼──────────────────────┘
       ├──────────────────────┼──────────────────────┤
       │ 2. TLS握手            │                    │
       │   ├── ClientHello     │                    │
       │   ├── ServerHello +    │                    │
       │   │  证书              │                    │
       │   ├── 密钥协商(ECDHE/RSA)│                    │
       │   └── 生成会话密钥      │                    │
       └──────────────────────┼──────────────────────┘
       ├──────────────────────┼──────────────────────┤
       │ 3. 加密通信            │                    │
       │   ├── 数据加密(AES)   │                    │
       │   └── MAC校验           │                    │
       └──────────────────────┼──────────────────────┘
└───────────────┴───────┘          ┌───────────────┴───────┘

四、为什么HTTPS是安全的

4.1、核心保障机制

1. 证书与公钥的信任体系

  • 证书签名
    服务器的公钥绑定在 SSL/TLS 证书中,证书由权威 CA(证书颁发机构) 签名。

    • 客户端验证证书有效性(域名匹配、未过期、CA 可信)。
    • 即使公钥泄露,只要证书未被篡改且 CA 可信,客户端仍能确认公钥属于合法服务器。
  • 证书吊销
    若证书私钥泄露,CA 会立即吊销证书,客户端通过 OCSP(在线证书状态协议)CRL(证书撤销列表) 检查证书状态,阻止使用已吊销证书。

2. 密钥交换算法(前向保密)

  • ECDHE(椭圆曲线迪菲-赫尔曼密钥交换)

    • 服务器生成临时公私钥对(临时密钥),仅用于本次握手。
    • 客户端用临时公钥加密预主密钥,服务器用临时私钥解密。
    • 即使长期公钥泄露,攻击者也无法通过临时公钥推导出会话密钥。
  • 前向保密(Forward Secrecy)
    每次会话生成独立的会话密钥,与长期密钥(证书私钥)无关。

    • 攻击者窃取长期私钥后,仍无法解密历史会话数据。

3. 握手过程的安全传输

  • 非对称加密保护握手数据

    • 在协商对称密钥前,客户端和服务器通过非对称加密(如 RSA 或 ECDHE)传输敏感数据。
    • 例如:客户端用服务器公钥加密预主密钥(Pre-Master Secret),只有服务器私钥能解密。
  • 密钥协商算法

    • 客户端提供支持的密码套件(如 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384),服务器从中选择最安全的选项。
    • 防止算法降级攻击:客户端优先支持 TLS 1.3,禁用弱算法(如 SSLv2/3、RC4、SHA-1)。

4. 协议版本与随机

  • TLS 版本协商

    • 客户端声明支持的 TLS 版本(如 1.2/1.3),服务器选择最高兼容版本。
    • 防止旧版协议漏洞被利用(如 POODLE 攻击)。
  • 随机数生成

    • 客户端和服务器在握手时生成随机数(Client Random 和 Server Random),结合预主密钥生成唯一会话密钥。
    • 防止重放攻击:每次会话的随机数不同,密钥唯一。

4.2、具体防御场景

1. 防止公钥泄露

  • 公钥本身是公开信息(包含在证书中),无需保密。

  • 风险场景 :若攻击者获取公钥,能否破解通信?
    不能:因为攻击者无服务器私钥无法解密,实际加密使用的是对称密钥(由预主密钥生成),而预主密钥通过非对称加密(如 ECDHE)传输。

2. 防止算法被篡改

客户端主导协商 :客户端提供支持的密码套件列表,服务器只能从中选择。

  • 例如:客户端仅支持 AES-256,服务器无法强制使用 AES-128
  • 防御算法降级攻击(如弱化加密强度)。

3. 防止中间人攻击(MITM)

  • 证书验证:客户端检查证书域名是否匹配(如 example.com),并验证证书链至根 CA。

    • 若攻击者伪造证书,域名不匹配(如 example.net),浏览器会提示「不安全」。
  • SNI(服务器名称指示)

    • 在 TLS 握手阶段,客户端通过 SNI 字段告知服务器域名,服务器返回对应证书。
    • 防止多域名服务器被攻击者定向到错误证书。

4.3、对比 HTTP 明文传输

场景 HTTP HTTPS
公钥传输 无公钥交换机制。 通过证书发送公钥,CA 签名确保可信。
算法协商 无安全协商,易被降级攻击。 客户端主导选择强安全算法。
数据加密 明文传输,易被窃听篡改。 对称加密(AES)保护数据。
身份认证 无证书验证,易受钓鱼攻击。 证书验证确保服务器身份。
前向保密 无此机制,长期私钥泄露可破解历史数据。 临时密钥隔离,历史数据安全。

4.4、安全总结

HTTPS 通过 证书信任链前向保密的密钥交换协议协商机制,确保了以下安全性:

  1. 服务器身份可信:证书验证防止中间人伪造服务器。
  2. 算法安全可控:客户端强制使用强加密算法。
  3. 密钥不可预测随机数和临时密钥确保会话唯一性。
  4. 历史数据保护:前向保密机制隔离长期密钥与会话密钥。

即使攻击者截获了握手过程中的算法和公钥信息,也无法破解后续加密通信,因为:

  • 公钥是公开的,用于加密预主密钥(需私钥解密)。
  • 临时密钥与会话密钥独立于长期密钥。
  • 客户端仅支持安全算法,拒绝弱算法协商。

五、总结

HTTPS 通过 TCP + TLS 构建了一个安全通道,核心是 「用非对称加密交换对称密钥」,最终实现数据的加密传输和身份认证。整个过程就像在公共电话亭里安装了一个「加密盒子」,只有通话双方能听到真实内容。

推荐阅读 《HTTP 详细工作流程》

版权声明:
作者:ht
链接:https://www.techfm.club/p/201612.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>