应用层
约 958 字大约 3 分钟
2025-07-24
HTTPS
HTTPS 的加解密过程是怎样的?
HTTPS (Hypertext Transfer Protocol Secure) 的核心是在 HTTP 的基础上,通过 SSL/TLS (Secure Sockets Layer/Transport Layer Security) 协议对通信内容进行加密,以保证数据传输的安全性、完整性和身份认证。
其加解密过程主要分为两个阶段:握手阶段和数据传输阶段。
1. 握手阶段 (Handshake) - 非对称加密协商对称密钥
握手阶段的目标是,在客户端和服务器之间安全地协商出一套用于后续数据传输的对称加密密钥。这个过程主要使用非对称加密来保证密钥协商的安全性。
具体步骤如下:
Client Hello:客户端向服务器发起请求,并发送以下信息:
客户端支持的 SSL/TLS 协议版本。
一个客户端生成的随机数 (Random 1)。
客户端支持的加密套件列表 (Cipher Suites),包括加密算法、哈希算法等。
Server Hello:服务器收到请求后,从中选择一套加密套件,并向客户端返回以下信息:
确认使用的 SSL/TLS 协议版本。
一个服务器生成的随机数 (Random 2)。
确认使用的加密套件。
服务器的数字证书 (其中包含了服务器的公钥)。
客户端验证与密钥生成:
客户端收到服务器的响应后,首先会验证服务器数字证书的合法性(由受信任的 CA 机构颁发、未过期、域名匹配等)。
如果证书验证通过,客户端会再生成一个随机数 (Pre-master Secret)。
客户端使用从证书中获取的服务器公钥,对这个
Pre-master Secret
进行加密。
Client Key Exchange:客户端将加密后的
Pre-master Secret
发送给服务器。服务器解密与密钥生成:
服务器收到加密的
Pre-master Secret
后,使用自己的私钥进行解密,得到原始的Pre-master Secret
。至此,客户端和服务器都拥有了相同的三个随机数:
Random 1
、Random 2
和Pre-master Secret
。
生成会话密钥:客户端和服务器使用相同的算法,通过这三个随机数,各自独立地生成一个完全相同的会话密钥 (Session Key)。这个密钥就是后续用于对称加密的密钥。
Finished:双方各自发送一个
Finished
消息,该消息使用刚刚生成的会话密钥进行加密,以验证握手过程是否成功且未被篡改。如果双方都能正确解密对方的Finished
消息,则握手完成。
2. 数据传输阶段 - 对称加密
握手成功后,客户端和服务器之间已经建立了一个安全的通道。
加密:发送方(无论是客户端还是服务器)在发送应用层数据(如 HTTP 请求/响应)之前,会使用之前协商好的会话密钥和对称加密算法(如 AES)对数据进行加密。
解密:接收方收到加密数据后,使用相同的会话密钥和算法进行解密,得到原始数据。
总结
非对称加密:用于握手阶段,解决了密钥交换的问题。它的计算开销大,速度慢,不适合用于加密大量业务数据。
对称加密:用于数据传输阶段,解决了通信效率的问题。它的加解密速度快,开销小,适合加密业务报文。
数字证书:用于身份认证,解决了确认服务器身份、防止中间人攻击的问题。
通过这种混合加密机制,HTTPS 兼顾了安全性和性能,实现了端到端的数据加密传输。