1. HTTPS 概述
1.1 HTTPS 的定义
HTTPS(HyperText Transfer Protocol Secure,超文本传输安全协议)是 HTTP 的安全版本。它在标准的 HTTP 协议之上,通过 SSL/TLS(Secure Sockets Layer / Transport Layer Security,安全套接层/传输层安全)协议对通信内容进行加密、完整性校验和身份认证,从而保护数据在客户端与服务器之间传输时的机密性与完整性。
核心目标:HTTPS 旨在解决 HTTP 明文传输带来的三大安全风险:窃听(Eavesdropping)、篡改(Tampering)和冒充(Impersonation)。
1.2 HTTP 与 HTTPS 的核心区别
下表从多个维度对比 HTTP 与 HTTPS 的差异:
| 对比维度 | HTTP | HTTPS |
|---|---|---|
| 协议基础 | HTTP over TCP | HTTP over SSL/TLS over TCP |
| 默认端口 | 80 | 443 |
| 数据加密 | 明文传输,无加密 | 使用对称加密 + 非对称加密混合加密 |
| 身份认证 | 无服务器身份验证 | 通过数字证书验证服务器身份 |
| 数据完整性 | 无完整性校验,易被篡改 | 使用消息认证码(MAC)保证完整性 |
| 性能开销 | 较低,无加密握手 | 较高,需 TLS 握手协商密钥 |
| URL 前缀 | http:// | https:// |
| 搜索引擎权重 | 较低,被标记为不安全 | 较高,有利于 SEO |
1.3 HTTPS 的工作原理:SSL/TLS 握手流程概览
HTTPS 的核心在于 SSL/TLS 握手协议。该握手过程在 TCP 连接建立之后进行,用于协商加密算法、交换密钥并验证服务器身份。一个简化的 TLS 1.2 握手流程如下:
- Client Hello:客户端向服务器发送支持的 TLS 版本、密码套件列表、随机数(Client Random)等。
- Server Hello:服务器从客户端列表中选择一个密码套件和 TLS 版本,并发送自己的随机数(Server Random)和数字证书。
- 证书验证:客户端验证服务器证书的合法性(是否由可信 CA 签发、是否过期、域名是否匹配等)。
- 密钥交换:客户端生成预主密钥(Pre-Master Secret),使用服务器证书中的公钥加密后发送给服务器。服务器使用私钥解密得到预主密钥。
- 会话密钥生成:客户端和服务器分别使用 Client Random、Server Random 和 Pre-Master Secret 通过伪随机函数(PRF)生成相同的会话密钥(对称密钥)。
- Finished 消息:双方使用会话密钥加密一条 Finished 消息发送给对方,验证握手过程是否被篡改以及密钥是否正确。
关键点:握手完成后,后续的 HTTP 数据将使用协商好的对称加密算法(如 AES)和会话密钥进行加密传输,确保通信的机密性与完整性。
下图展示了 TLS 1.2 握手的核心交互流程:
注意:上述流程基于 TLS 1.2。TLS 1.3 对握手过程进行了大幅简化和优化,将握手往返次数从 2-RTT 减少到 1-RTT(首次连接),并移除了不安全的密码套件,提升了安全性和性能。
1.4 HTTPS 的核心安全属性
- 机密性(Confidentiality):通过对称加密算法(如 AES、ChaCha20)加密传输数据,防止中间人窃听。
- 完整性(Integrity):通过消息认证码(MAC,如 HMAC)或认证加密(AEAD,如 AES-GCM)确保数据在传输过程中未被篡改。
- 身份认证(Authentication):通过数字证书和公钥基础设施(PKI)验证服务器的真实身份,防止中间人冒充。