https 在web端的交互流程

当用户通过浏览器访问一个配置了 HTTPS 的网站时,其数据交互流程可以清晰地分为两大阶段:

1. TLS 握手连接 

浏览器和服务器建立一个安全的、加密的通信通道。这个过程的核心是验证服务器身份,并协商出一个只有双方知道的“会话密钥”。

2. 安全的 HTTP 数据通信。

在安全的通道建立之后,所有后续的 HTTP 请求和响应(包括网页、图片、API 数据等)都使用协商好的密钥进行加密后传输。

 

第一阶段:TLS 握手(建立安全通道)

这个阶段发生在任何实际的网页数据发送之前。以目前最主流的 TLS 1.2/1.3 为例,其核心流程如下:

第1步:Client Hello (客户端打招呼)
浏览器向服务器发送一个请求,内容主要包括:

  • 支持的 TLS 版本:如 TLS 1.2, 1.3。

  • 支持的密码套件列表:一套加密算法组合,比如 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

  • 一个随机数:Client Random,用于后续生成密钥。

  • SNI:服务器名称指示,告诉服务器用户想访问哪个网站(重要于虚拟主机)。

第2步:Server Hello (服务器回应)
服务器收到请求后,选择并返回一个合适的配置:

  • 选定的 TLS 版本。

  • 选定的密码套件。

  • 它的数字证书:这个证书包含了服务器的公钥,并由证书颁发机构(CA)签名,以证明其身份。

  • 一个随机数:Server Random,同样用于后续生成密钥。

【关键环节:证书验证】
浏览器收到证书后,会进行一系列严格的验证:

  1. 验证签发者:检查证书是否由其信任的 CA(如 DigiCert, Let‘s Encrypt)签发。浏览器和操作系统内置了受信任的 CA 列表。

  2. 验证有效期:检查证书是否在有效期内。

  3. 验证域名:检查证书中绑定的域名是否与用户正在访问的域名一致。

  4. 验证证书链:逐级验证,直到一个受信任的根证书。
    如果任何一项验证失败,浏览器会向用户显示严重的警告(例如 “您的连接不是私密连接”)。

第3步:密钥交换与验证 (Pre-Master Secret 生成)
证书验证通过后,浏览器信任了服务器的身份。

  • 浏览器再生成一个 Pre-Master Secret。

  • 浏览器使用服务器的公钥(从证书中获取)对这个 Pre-Master Secret 进行加密,然后发送给服务器。

  • 只有拥有对应私钥的服务器才能解密这个信息。

第4步:生成会话密钥
现在,双方(浏览器和服务器)都拥有了三个值:Client RandomServer Random 和 Pre-Master Secret。它们使用之前协商好的密码套件中的密钥交换算法,各自独立地计算出相同的“会话密钥”。

第5步:握手结束与验证
双方互相发送一条“Finished”消息,这条消息是用刚刚生成的会话密钥加密的。目的是告诉对方:“我的握手计算完成了,并且密钥是正确的,我们可以开始加密通信了。”

至此,安全通道已经建立! 后续所有的应用数据都将使用这个高效、唯一的“会话密钥”进行加密和解密。

 

第二阶段:安全的 HTTP 数据通信(TLS 记录协议)

在安全通道建立后,正常的 HTTP 请求和响应才开始,但此时它们被封装在 TLS 层中。

第6步:发送加密的 HTTP 请求

  • 浏览器将原始的 HTTP 请求(例如 GET /index.html)准备好。

  • TLS 层会使用会话密钥对这个 HTTP 请求进行加密。

  • 加密后的数据被分成多个 TLS 记录,然后通过网络发送给服务器。

第7步:服务器解密并处理请求

  • 服务器收到加密的 TLS 记录。

  • 使用相同的会话密钥进行解密,得到原始的 GET /index.html 请求。

  • 服务器处理这个请求,准备好响应数据(例如 index.html 文件的内容)。

第8步:返回加密的 HTTP 响应

  • 服务器将 HTTP 响应进行加密。

  • 同样,加密后的数据被分成 TLS 记录,发回给浏览器。

第9步:浏览器解密并渲染

  • 浏览器收到加密的 TLS 记录。

  • 使用会话密钥解密,得到原始的 HTML、CSS、JavaScript 等数据。

  • 浏览器开始渲染网页,并可能为页面中的其他资源(如图片、样式表)发起新的 HTTPS 请求,重复 第6-8步,但由于 TLS 握手已经完成,这些后续请求会直接复用之前建立的安全通道,效率更高。

 

posted @ 2025-11-27 21:26  wangssd  阅读(1)  评论(0)    收藏  举报