杨斌
发布于 2025-08-25 / 8 阅读
0
0

HTTPS协议的加密过程

HTTPS协议的加密过程是一个非常经典且重要的核心知识点。它不仅仅是对称加密,而是一套精巧的混合加密系统,兼顾了安全性和效率。

其核心过程被称为 TLS 握手(因为现在使用的都是TLS协议,但人们习惯上仍常称之为SSL握手)。

为了更直观地理解整个过程,我们可以将其与一个经典的“安全通信”类比:

类比:如何安全地交换秘密信件?

  1. 客户端打招呼(Client Hello):你好!我想建立安全通信。我支持的密码套件(比如TLS_AES_128_GCM_SHA256)和我的客户端随机数(Client Random)给你。

  2. 服务器回应(Server Hello):好的!我选择我们都支持的TLS_AES_128_GCM_SHA256这个密码套件。这是我的服务器随机数(Server Random)和我的SSL证书(包含我的公钥)。

  3. 验证证书(Authentication):客户端检查证书是否由可信的CA签发、是否在有效期内、域名是否匹配等。(验证对方身份

  4. 生成预主密钥(Pre-Master Secret):客户端生成另一个随机数(Pre-Master Secret),用证书里的服务器公钥加密,然后发送给服务器。(安全地交换第三个秘密数字

  5. 生成会话密钥(Session Keys):客户端和服务器现在都拥有三个值:Client Random、Server Random 和 Pre-Master Secret。它们双方使用相同的算法,根据这三个随机数独立生成完全相同的一对主密钥(Master Secret),进而衍生出本次会话的会话密钥(Session Keys),包括用于加密的对称密钥和用于验证数据完整性的MAC密钥。

  6. 握手完成,安全通信:此后,双方的所有应用数据(HTTP请求/响应)都使用刚刚生成的、只有他们俩知道的会话密钥进行对称加密和解密,传输效率非常高。

整个过程的核心思想是:使用非对称加密的安全特性来安全地交换一个对称加密的密钥,然后使用高效快速的对称加密来加密实际传输的数据。


下面是详细的文字分步解析:

HTTPS加密过程详细步骤(TLS握手)

整个过程旨在实现三个目标:

  1. 身份认证:确认我访问的服务器就是它声称的那个服务器(而不是钓鱼网站)。

  2. 协商密钥:为后续的通信生成一个只有双方知道的、临时的对称加密密钥(称为“会话密钥”)。

  3. 加密传输:使用协商好的会话密钥对HTTP数据进行加密和解密。

第一步:Client Hello (客户端打招呼)

  • 当你在浏览器输入https://网址并回车后,客户端(浏览器)会向服务器的443端口发送一个“Client Hello”消息。

  • 这个消息包含:

    • 客户端支持的TLS/SSL协议版本(如TLS 1.2, TLS 1.3)。

    • 客户端生成的随机数(Client Random),用于后续生成密钥。

    • 客户端支持的密码套件列表(Cipher Suites)。密码套件是一个集合,定义了后续将使用哪些加密算法、密钥交换算法和哈希算法(例如:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256)。

第二步:Server Hello (服务器回应)

  • 服务器收到“Client Hello”后,会返回一个“Server Hello”消息。

  • 这个消息包含:

    • 服务器选择的TLS协议版本(从客户端支持的版本中选一个双方都支持的最高版本)。

    • 服务器生成的随机数(Server Random),用于后续生成密钥。

    • 服务器选择的密码套件(从客户端提供的列表中选一个它认为最安全的)。

  • 同时,服务器会发送它的 SSL证书。这个证书包含了服务器的公钥、域名、颁发机构(CA)、有效期等信息。

第三步:证书验证 (客户端验证服务器身份)

  • 这是最关键的身份认证步骤。

  • 客户端(浏览器)收到服务器的证书后,会进行一系列验证:

    • 检查证书是否由自己信任的证书颁发机构(CA) 签发(检查CA的数字签名)。

    • 检查证书是否在有效期内。

    • 检查证书上绑定的域名是否与正在访问的域名一致。

  • 如果验证失败,浏览器会弹出严重的警告提示,告诉你连接不安全。如果验证通过,则继续下一步。

第四步:密钥交换 (Pre-Master Secret 交换)

  • 客户端再生成一个随机数,称为 Pre-Master Secret

  • 客户端使用服务器证书中提供的公钥对这个 Pre-Master Secret 进行加密,然后将加密后的结果发送给服务器。

  • 由于这个 Pre-Master Secret 是用服务器的公钥加密的,因此只有持有对应私钥的服务器才能解密它。这确保了即使被第三方截获,也无法解密出原始的 Pre-Master Secret。

第五步:生成会话密钥 (Session Keys)

  • 现在,客户端和服务器都拥有了三个相同的随机数:Client RandomServer RandomPre-Master Secret

  • 双方使用相同的密钥派生函数,根据这三个随机数,独立地在本地计算生成相同的“主密钥”(Master Secret)

  • 再由主密钥进一步生成本次会话所使用的对称加密密钥(Session Keys),用于后续数据的加密和解密。

第六步:握手完成,加密通信

  • 客户端和服务器互相发送一个“Finished”消息,表示握手阶段已经完成。

  • 从此之后,所有的 HTTP 请求和响应数据(比如你提交的表单、网站返回的HTML页面)都将使用刚刚生成的会话密钥进行对称加密后传输。

  • 双方使用这个密钥进行加密和解密,效率非常高,保证了通信的机密性和完整性。

总结特点

  1. 混合加密机制:结合了非对称加密(用于安全地交换Pre-Master Secret)和对称加密(用于高效加密实际数据)的优点。

  2. 前向保密(Forward Secrecy):现代常用的密钥交换算法(如ECDHE)能为每次会话生成独一无二的临时密钥。即使服务器私钥未来被盗,也无法解密过去被截获的通信流量。

  3. 身份认证:通过PKI公钥基础设施和CA颁发的数字证书,确保你连接的是真实的服务器,而非中间人攻击者。

希望这个详细的解释能帮助你彻底理解HTTPS的加密过程!


评论