QuanZhou's Wiki

HTTPS 加密过程解读

~/ Network#计算机基础

1. HTTPS 加密过程解读

这是之前面试中遇到的问题,当时没有完全回答上来,暴露出我对 HTTPS 的理解还很不足,这篇文章记录一下我重新学习 HTTPS 协议的过程,方便复习和更好地理解。

HTTP 在传输数据的过程中,所有的数据都是明文传输,比如客户端向服务端发送了密码等信息,中间者可以很轻易地劫持。HTTPS 通过一系列的加密,可以防止客户端发送的信息被劫持。

1.1 HTTPS 核心阶段拆解

HTTPS HTTPS 的握手过程(以主流的 TLS 1.2 为例)分为三个主要阶段:

第一阶段:握手协商 (Hello)

这个阶段就像是两台电脑在对暗号,确定大家都能听懂的语言。

  • 客户端(Client Hello):

    • 发送自己支持的 TLS 版本。
    • 发送一个 密码套件列表(Cipher Suites,包含支持的加密算法、哈希算法等)。
    • 发送一个 客户端随机数 (Client Random) r1r_1
  • 服务端(Server Hello):

    • 从列表中选出一套双方都支持的密码套件。
    • 发送一个 服务端随机数 (Server Random) r2r_2

第二阶段:身份验证 (Certificate)

  • 服务端:

    • 发送自己的数字证书 (Digital Certificate) 。证书里包含服务端的公钥和 CA 机构的签名。
  • 客户端(验证逻辑):

    • 客户端利用浏览器/操作系统内置的 CA 根证书去验证服务端证书的签名。
    • 确认证书里的域名和当前访问的域名一致,且证书未过期。
    • 如果验证通过,客户端就拿到了服务端的公钥

第三阶段:秘钥生成 (Key Exchange)

为了效率,HTTPS 不会一直用非对称加密,而是要生成一个只有双方知道的“对称秘钥”。

  • 客户端:

    • 生成第三个随机数:预主秘钥 (Pre-master Secret) r3r_3
    • 使用拿到的 服务端公钥 对这个预主秘钥进行加密,发送给服务端。
  • 服务端:

    • 使用自己的私钥进行解密,得到预主密钥。
  • 双方共同动作:

    • 此时双方手中都有 r1r_1,r2r_2 和预主密钥 r3r_3
    • 双方各自运行相同的算法,计算出最终的主密钥

TLS 1.2 RSA 握手时序:客户端与服务端依次完成参数协商、证书验证、预主密钥交换、会话密钥派生和加密切换

TLS 1.2(RSA 模式) 握手过程

为什么 HTTPS 不会被黑客劫持

这是我在看 HTTPS 协议时遇到的一个疑问,最开始客户端与服务端发送 r1r_1, r2r_2 以及 CA 证书和公钥的时候,这三样东西都被劫持了不会造成安全问题吗?

在 HTTPS (TLS) 的安全体系中,攻击者即使劫持了客户端随机数 r1r_1、服务端随机数 r2r_2 以及服务端公钥,依然无法破解通信或有效伪造合法服务端获取用户私密数据。这种防御能力源于协议设计的底层逻辑:公开参数的组合并不等同于机密参数的推导。

  1. “伪造客户端”与“身份准入”的区别

    需要区分**“建立加密通道”与“获取业务权限”**这两个概念:

    • 通道建立:任何人(包括黑客)都可以发起 TLS 握手与服务端建立连接。在这种情况下,黑客是作为“他自己”这个客户端与服务器建立加密信道,这本身并不违背 HTTPS 的设计目标。

    • 身份仿冒:如果黑客想伪造成“周同学”这个特定客户端,HTTPS 此时并非防线。身份识别通常由应用层(如 Cookie、Session、Token)完成。除非开启了双向 TLS 认证(mTLS),否则 TLS 协议本身并不负责验证客户端的特定用户身份,它只负责确保这条通道是机密的。

    • mTLS 的作用:在极高安全场景下,服务端会要求客户端也提供证书。如果黑客没有私钥,他将无法通过服务端对客户端证书的验证,从而无法建立连接。

  2. 核心机密变量 r3r_3 的非对称机密性在 TLS 握手流程中,真正决定安全性的变量是预主密钥(Pre-master Secret,r3r_3)。隔离生成:r3r_3 是由客户端在本地内存中独立生成的随机数,从未在网络上以明文形式出现。非对称加密机制:客户端使用服务端公钥对 r3r_3 进行加密。根据非对称算法(如 RSA)的特性,经过公钥加密的数据,其数学逆运算(解密)只能通过服务端持有的私钥完成。黑客的困境:攻击者虽然截获了公钥和加密后的 r3r_3 密文,但由于不具备私钥,无法通过计算还原出 r3r_3

  3. 会话密钥生成的“三向因子”绑定最终用于对称加密通信的**会话密钥(Session Key)**并非由 r1r_1r2r_2 直接生成,而是由 (r1,r2,r3)(r_1, r_2, r_3) 三者通过伪随机函数(PRF)共同派生。必要性约束:在派生公式中,r3r_3 作为高熵值的机密因子,是生成密钥的必要输入。计算壁垒:即便劫持者掌握了 r1r_1r2r_2,只要无法获取 r3r_3,就无法计算出最终的主密钥(Master Secret),进而无法生成对称加密所需的会话密钥。因此,攻击者无法解密后续的应用层数据。