Https
概述
HTTPS(HyperText Transfer Protocol Secure)是 HTTP 的安全版本,用于在客户端和服务器之间安全传输数据。
它通过 SSL/TLS 协议对通信进行加密,确保数据的机密性和完整性。
SSL/TLS
SSL(Secure Sockets Layer)和 TLS(Transport Layer Security)是用于在网络上加密通信的协议。SSL 是早期版本,TLS 是其继任者,目前广泛使用的是 TLS。
版本演变
- SSL 1.0:未公开发布。
- SSL 2.0:1995 年发布,存在严重安全漏洞。
- SSL 3.0:1996 年发布,逐步被 TLS 取代。
- TLS 1.0:1999 年发布,基于 SSL 3.0。
- TLS 1.1:2006 年发布,修复了一些安全漏洞。
- TLS 1.2:2008 年发布,增加了更强的加密算法。
- TLS 1.3:2018 年发布,简化握手过程,提升安全性。可以支持 0-RTT
握手过程
TLS 的握手流程如下所示

TCP 三次握手
TLS 第一次握手
- 客户端发起 ClientHello, 携带加密算法,客户端随机数,版本号,SessionID, SNI 等
TLS 第二次握手
- 服务端发起 ServerHello, 携带加密算法,服务端随机数,版本号,SessionID, SNI 等
- 服务端发送证书
- 服务端发送 ServerHelloDone
TLS 第三次握手
- 客户端生成 pre-master key, 用证书中的公钥加密发给服务端
- 客户端根据 pre-master-key, 客户端随机数,服务端随机数生成对称加密秘钥,此后会用这个秘钥通信
- 客户端发送 ChangeCipherSpec,表示之后要用这个新生成的秘钥通信
TLS 第四次握手
- 服务端根据 pre-master-key, 客户端随机数,服务端随机数生成对称加密秘钥,此后会用这个秘钥通信
TLS 抓包示例
Client Hello

Server Hello + Certificate + Server Key Exchange + Server Hello Done


New Session Ticket + Change Cipher Spec + Encrypted Handshake Message

TLS(传输层安全协议)从 1.0 到 1.3 版本经过了多次升级和改进,提升了安全性、性能和效率。以下是主要的改进:
安全性提升:
- 弃用不安全的加密算法和协议:在 TLS 1.1 和 TLS 1.2 中逐渐弃用了 MD5 和 SHA-1 等不再安全的哈希算法,TLS 1.3 完全移除了这些不安全算法。
- 移除不安全的特性:TLS 1.3 移除了静态 RSA 和 Diffie-Hellman 密钥交换模式,采用更安全的前向保密算法。
握手协议改进:
- 简化握手过程:TLS 1.3 减少了握手过程中所需的往返次数,通常只需要一次往返时间(1-RTT),而 TLS 1.2 握手通常需要两次(2-RTT)。这大大减少了延迟。
- 只支持基于 AEAD 的加密模式:这增强了加密的安全性和协议的灵活性。
会话恢复:
- 使用会话票据:TLS 1.3 更广泛地使用会话票据机制来实现会话恢复,无需在服务器端保留大量状态信息。
性能提升:
- 0-RTT 早期数据:TLS 1.3 引入了 0-RTT(Zero Round Trip Time)模式,允许客户端在握手的同时发送数据,从而减少初次连接的延迟。但需小心使用以防再发送(replay attack)攻击。
协议设计:
- 更简洁,更容易分析:TLS 1.3 的协议设计简化,使其更加一致和安全,减少了潜在的攻击面和实现的复杂度。
这些改进共同努力,使得 TLS 1.3 比之前的版本更安全、更高效,并且更适合现代互联网需求。
参考资料
图解 SSL/TLS 协议 - 阮一峰的网络日志 (ruanyifeng.com)