【计算机知识】一个Https请求的过程详细解读


好的!下面我们将从 底层原理出发,详细讲解一个 HTTPS 请求的完整过程,涵盖从客户端发起请求,到最终获得响应的每一个关键步骤,包括涉及的协议、加密技术、握手流程等,并在最后提供一个清晰的 时序图(Sequence Diagram) 来直观展示整个过程。

一、什么是 HTTPS?

HTTPS(HyperText Transfer Protocol Secure) 是 HTTP 的安全版本,它在 HTTP 和 TCP 之间加了一层 TLS/SSL 协议,用来对通信内容进行 加密、身份认证和数据完整性保护

  • HTTP:明文传输,不安全。
  • HTTPS = HTTP + TLS/SSL(加密层),安全可靠。

TLS(Transport Layer Security)是 SSL(Secure Sockets Layer)的升级版本,目前广泛使用的是 TLS 1.2 和 TLS 1.3

二、HTTPS 请求的底层原理和流程

一个完整的 HTTPS 请求过程可以分为以下几个核心阶段:

  1. DNS 解析
  2. TCP 三次握手
  3. TLS/SSL 四次握手(核心安全环节)
  4. HTTP 请求与响应(加密通道已建立)
  5. 连接关闭(可选的 TLS 四次挥手)

下面我们逐步详细讲解每个阶段。

阶段 1:DNS 解析(Domain Name System)

目标: 将域名(如 www.example.com)解析为对应的 IP 地址(如 93.184.216.34)。

  • 客户端首先检查本地的 hosts 文件DNS 缓存
  • 如果没有找到,就向 配置的 DNS 服务器 发出查询请求;
  • DNS 服务器返回目标域名的 IP 地址 给客户端;

🧠 这一步是 明文 的,但与 HTTPS 的安全性无直接关系,属于网络定位的基础步骤。

阶段 2:TCP 三次握手(建立可靠连接)

客户端通过解析得到的 IP 和默认的 443 端口(HTTPS),与服务器建立 TCP 连接

TCP 三次握手过程:

  1. 客户端 → 服务器:发送 SYN 包(同步序列号),表示请求建立连接。
  2. 服务器 → 客户端:回复 SYN-ACK 包,表示收到请求并同意建立连接。
  3. 客户端 → 服务器:发送 ACK 包,连接建立成功。

✅ 此时,客户端和服务器之间建立起了一条可靠的、有序的、基于字节流的 TCP 连接,但数据还是明文的(还没加密)。

阶段 3:TLS/SSL 四次握手(关键安全环节 🔐)

这是 HTTPS 的核心部分,目的是在不安全的网络上协商出一个 安全的加密通信通道

TLS 握手的主要任务包括:

  • 验证服务器身份(通过数字证书)
  • 协商加密算法和密钥
  • 生成会话密钥(用于对称加密通信)
  • 建立安全上下文

TLS 1.2 和 TLS 1.3 的握手过程略有不同,下面以 TLS 1.2(更通用,便于理解) 为例详细讲解。

🔐 TLS 1.2 四次握手详细过程

目标:协商加密套件、验证身份、交换密钥,最终建立对称加密通信通道。

第一步:Client Hello(客户端 → 服务器)

客户端向服务器发送:

  • 支持的 TLS 版本(如 TLS 1.2)
  • 支持的 加密套件列表(如 RSA + AES + SHA256)
  • 一个随机数 Client Random
  • (可选)支持的压缩方法、SNI(Server Name Indication,用于虚拟主机)

🎯 SNI 很重要,它告诉服务器:“我要访问哪个域名”,因为一台服务器可能托管多个 HTTPS 站点。

第二步:Server Hello(服务器 → 客户端)

服务器回应:

  • 选择的 TLS 版本
  • 选择的 加密套件(如 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256)
  • 一个随机数 Server Random
  • 服务器的 数字证书(含公钥)
  • (可选)服务器的 公钥参数(如 ECDHE 的参数)
  • (可选)Server Hello Done 标志

📌 数字证书 包含:

  • 服务器域名
  • 服务器公钥
  • 证书颁发机构(CA)信息
  • 有效期等

它用于证明“我是真正的 www.example.com”。

第三步:客户端验证证书 + 密钥交换

客户端收到证书后:

  1. 验证证书是否可信:

    • 检查证书是否过期
    • 是否由受信任的 CA 签发
    • 证书链是否完整
    • 域名是否匹配

    ✅ 通常通过操作系统的 CA 根证书库,或浏览器内置的信任库验证。

  2. 生成一个随机数 Pre-Master Secret,并用服务器的 公钥(来自证书)加密,发送给服务器。

  3. 生成会话密钥(Master Secret / Session Key):

    • 客户端和服务器都有:Client Random、Server Random、Pre-Master Secret
    • 利用密钥导出函数(PRF)生成相同的 对称加密密钥,用于后续通信。

🔑 从此之后,通信使用 对称加密(如 AES),因为对称加密性能更高。

第四步:Server Final(服务器 → 客户端)

服务器:

  • 用自己的 私钥 解密得到 Pre-Master Secret
  • 根据 Client Random、Server Random、Pre-Master Secret,生成相同的会话密钥
  • 可能发送一个 Finished 消息,表示握手完成

客户端也发送 Finished 消息

✅ 至此,TLS 握手完成!双方已经协商好加密算法和密钥,接下来所有 HTTP 数据都会被加密传输。

阶段 4:加密的 HTTP 通信

一旦 TLS 握手完成,客户端和服务器之间的通信就处于 加密的安全通道 中。

此时,客户端通过该加密连接发送 HTTP 请求(如 GET /index.html),服务器返回 HTTP 响应(如 HTML 页面、JSON 数据等)。

🔒 所有 HTTP 内容都经过对称加密(如 AES),即使被中间人截获,也无法解密内容。

阶段 5:连接关闭(可选)

  • 可以使用 TCP 四次挥手 关闭连接;
  • 也可以复用连接(HTTP Keep-Alive),减少握手开销;
  • 如果使用 TLS 1.3,握手过程更快更安全(后面会提到)。

三、TLS 1.3 握手(更简洁、更安全 ⚡)

TLS 1.3 是 TLS 1.2 的升级版,大幅简化了握手过程,只需要 1-RTT(一次往返)即可完成握手,并且 剔除了不安全的加密算法

简要流程:

  1. Client Hello:包含支持的加密套件 + 一个随机数 + “密钥分享”参数(如 DH 参数)
  2. Server Hello:选择加密套件 + 随机数 + 证书 + 会话密钥相关参数
  3. 客户端验证证书 + 计算密钥,然后直接发送加密的 HTTP 请求

✅ TLS 1.3 通常只需要 1 次往返(1-RTT),甚至在某些情况下支持 0-RTT(但有安全风险)

四、HTTPS 请求的完整时序图(Sequence Diagram)

下面是使用 Mermaid 语法绘制的时序图,展示了从客户端发起 HTTPS 请求,到最终获得响应的完整交互过程,重点突出 TLS 握手

客户端 (Client) DNS 服务器 (Server) 证书机构 (CA) 1. DNS 查询域名 解析 www.example.com 返回 IP 地址 2. TCP 三次握手 SYN SYN-ACK ACK TCP 连接已建立(端口 443) 3. TLS 握手(TLS 1.2) Client Hello (TLS版本、加密套件列表、Client Random、SNI) Server Hello (TLS版本、选中的加密套件、Server Random、数字证书) (可选)Server Key Exchange, Server Hello Done 客户端验证证书 生成 Pre-Master Secret(用服务器公钥加密) 发送给服务器 用私钥解密 Pre-Master Secret 生成相同的会话密钥,发送 Finished 生成相同的会话密钥,发送 Finished ✅ TLS 握手完成,加密通道已建立 4. 加密的 HTTP 请求 HTTPS 请求(GET /index.html,内容已加密) HTTPS 响应(HTML/JSON,内容已加密) 5. 可选:TCP 四次挥手关闭连接 客户端 (Client) DNS 服务器 (Server) 证书机构 (CA)

五、总结:HTTPS 请求的底层流程一览表

步骤阶段协议/技术作用
1域名解析DNS将域名转为 IP 地址
2建立连接TCP三次握手,建立可靠传输通道
3安全握手TLS/SSL协商加密算法、验证身份、交换密钥,建立加密通道
4加密通信HTTP over TLS所有 HTTP 数据通过加密通道传输
5连接关闭TCP可选的连接终止过程

六、补充:为什么需要 HTTPS?

问题HTTP 的缺陷HTTPS 的解决
窃听数据明文传输,容易被窃听数据加密,防止中间人监听
篡改数据可被篡改数据完整性校验(MAC / Hash)
伪装无法确认对方身份数字证书验证服务器身份
会话劫持Cookie 等敏感信息易被盗加密保护 + 安全 Cookie 策略

七、延伸知识(可选深入学习)

  • 数字证书的签发与信任链
  • RSA / ECC / DH 密钥交换算法原理
  • TLS 1.3 的 1-RTT / 0-RTT 握手优化
  • HTTP/2 或 HTTP/3 over HTTPS
  • 如何配置 Nginx 的 HTTPS(包括证书部署、强制跳转、HSTS 等)

✅ 总结一句话:

一个 HTTPS 请求的本质,就是在 TCP 连接之上,通过 TLS 协议建立一个加密的安全通道,确保数据传输的保密性、完整性与真实性,然后再在此通道上传输 HTTP 数据。

相关文献

【知识科普】DNS(域名解析服务)深入解读
【知识科普】一篇文章带你了解什么是http以及https
【知识科普】HTTPS 加密中信息的可见性详解
一文教你弄懂网络协议栈以及报文格式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

问道飞鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值