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 握手流程如下:

  1. Client Hello:客户端向服务器发送支持的 TLS 版本、密码套件列表、随机数(Client Random)等。
  2. Server Hello:服务器从客户端列表中选择一个密码套件和 TLS 版本,并发送自己的随机数(Server Random)和数字证书。
  3. 证书验证:客户端验证服务器证书的合法性(是否由可信 CA 签发、是否过期、域名是否匹配等)。
  4. 密钥交换:客户端生成预主密钥(Pre-Master Secret),使用服务器证书中的公钥加密后发送给服务器。服务器使用私钥解密得到预主密钥。
  5. 会话密钥生成:客户端和服务器分别使用 Client Random、Server Random 和 Pre-Master Secret 通过伪随机函数(PRF)生成相同的会话密钥(对称密钥)。
  6. Finished 消息:双方使用会话密钥加密一条 Finished 消息发送给对方,验证握手过程是否被篡改以及密钥是否正确。
关键点:握手完成后,后续的 HTTP 数据将使用协商好的对称加密算法(如 AES)和会话密钥进行加密传输,确保通信的机密性与完整性。

下图展示了 TLS 1.2 握手的核心交互流程:

TLS 1.2 握手流程概览 客户端 (Client) 服务器 (Server) ① Client Hello (TLS版本, 密码套件, Client Random) ② Server Hello + 证书 (选定密码套件, Server Random, 数字证书) ③ 验证服务器证书 ④ 密钥交换 (用服务器公钥加密的 Pre-Master Secret) ⑤ 生成会话密钥 ⑤ 生成会话密钥 ⑥ Finished (加密) (验证握手完整性) ⑥ Finished (加密)
注意:上述流程基于 TLS 1.2。TLS 1.3 对握手过程进行了大幅简化和优化,将握手往返次数从 2-RTT 减少到 1-RTT(首次连接),并移除了不安全的密码套件,提升了安全性和性能。

1.4 HTTPS 的核心安全属性

  • 机密性(Confidentiality):通过对称加密算法(如 AES、ChaCha20)加密传输数据,防止中间人窃听。
  • 完整性(Integrity):通过消息认证码(MAC,如 HMAC)或认证加密(AEAD,如 AES-GCM)确保数据在传输过程中未被篡改。
  • 身份认证(Authentication):通过数字证书和公钥基础设施(PKI)验证服务器的真实身份,防止中间人冒充。