Appearance
HTTP 与 HTTPS 区别
一、HTTP 与 HTTPS 有哪些区别?
HTTPS = HTTP + TLS/SSL 加密层,即"在 HTTP 之下、TCP 之上"插入一层安全协议,对 HTTP 的报文进行加密后再通过 TCP 传输。
| 对比项 | HTTP | HTTPS |
|---|---|---|
| 全称 | 超文本传输协议 | 超文本传输安全协议(HTTP over TLS) |
| 端口 | 80 | 443 |
| 传输层之上 | 直接 TCP | TCP + TLS/SSL 加密层 |
| 安全性 | 明文传输,易被窃听、篡改、冒充 | 加密传输,防窃听/篡改/冒充 |
| 证书 | 不需要 | 需要 CA 颁发的数字证书 |
| 握手开销 | 无额外握手 | 需 TLS 握手(增加 RTT 延迟) |
| 性能 | 略快 | 略慢(加解密、握手),但影响很小 |
| SEO | 普通 | 搜索引擎优先(Google/百度加权) |
| 计费/监管 | — | 国内建站需 ICP 备案,部分场景强制 HTTPS |
注意:HTTPS 不是独立于 HTTP 的新协议,应用层语义(方法、状态码、头部)完全一致,只是传输过程被加密了。
二、HTTPS 解决了 HTTP 的哪些问题?
HTTP 是明文协议,存在三大安全威胁,HTTPS 通过 TLS 一一对应解决:
1. 窃听(信息泄漏)→ 加密
- 问题:HTTP 数据在链路上明文传输,中间人(路由器、代理、公共 Wi-Fi)可轻易抓包读取账号、密码、Cookie。
- 解决:HTTPS 用对称加密加密业务数据,密钥通过握手安全协商,第三方无法解密。
2. 篡改(数据被修改)→ 完整性校验
- 问题:中间人可插入广告、篡改页面内容、修改响应(如注入恶意脚本)。
- 解决:TLS 用 MAC(消息认证码)/ AEAD 校验每一条记录的完整性,数据被改会被立即发现并丢弃。
3. 冒充(身份伪造)→ 身份认证
- 问题:攻击者可以伪造一个假网站(如仿冒银行页面)骗取用户信息(钓鱼)。
- 解决:HTTPS 依赖 CA 数字证书验证服务器身份,浏览器确认证书可信且域名匹配后才建立连接。
一句话:HTTPS 提供了机密性(加密)、完整性(校验)、真实性(身份认证)三大保障。
补充:HTTPS 还能防重放攻击(通过序号/Nonce 机制)和降级攻击(通过 TLS 版本协商与扩展)。
三、HTTPS 是如何建立连接的?其间交互了什么?
HTTPS 连接建立分两个阶段:TCP 三次握手(建立可靠传输)+ TLS 握手(协商密钥、验证身份)。下面以最常见的 TLS 1.2(RSA 密钥交换) 和 TLS 1.3 思路说明。
整体交互流程
客户端 服务器
| |
| ===== TCP 三次握手 ===== |
| ---- SYN -------------------------> |
| <--- SYN + ACK ------------------- |
| ---- ACK -------------------------> |
| |
| ===== TLS 握手 ===== |
| ---- Client Hello -----------------> | ① 支持的 TLS 版本、密码套件列表、客户端随机数
| |
| <--- Server Hello ----------------- | ② 选定的版本/套件、服务器随机数
| <--- Certificate ------------------ | ③ 服务器数字证书(含公钥)
| <--- Server Key Exchange --------- | ④ (DH 类) 服务器公钥参数
| <--- Server Hello Done ------------ |
| |
| ---- Client Key Exchange --------→ | ⑤ 用证书公钥加密「预主密钥」(RSA) 或发公钥参数 (DH)
| ---- Change Cipher Spec --------→ | ⑥ 通知:之后用协商密钥加密
| ---- Finished (加密) ------------→ | ⑦ 校验握手完整性
| |
| <--- Change Cipher Spec --------- |
| <--- Finished (加密) ------------- | ⑧ 服务器同样确认
| |
| ===== 应用数据(对称加密传输)===== |
| <--- 加密的 HTTP 响应 ----------- |关键交互步骤说明
① Client Hello(客户端 → 服务器)
- 客户端随机数
Client Random - 支持的 TLS 版本、密码套件(Cipher Suites)列表
- 支持的压缩方法、扩展(如 SNI)
② Server Hello(服务器 → 客户端)
- 服务器随机数
Server Random - 从客户端列表中选定的 TLS 版本、密码套件
③ Certificate(服务器 → 客户端)
- 服务器发送 X.509 数字证书,内含服务器公钥和域名信息。
- 客户端据此验证:证书是否由可信 CA 签发、是否在有效期、域名是否匹配、是否吊销(OCSP/CRL)。
④ / ⑤ 密钥交换
- RSA 方式:客户端生成
Pre-Master Secret,用证书里的服务器公钥加密后发送;服务器用私钥解密。双方再用Client Random + Server Random + Pre-Master派生出相同的会话密钥(对称密钥)。 - DH/ECDHE 方式(更优,支持前向安全):双方交换公开参数,各自计算出相同的预主密钥,私钥不传输。即使服务器私钥日后泄露,历史通信也无法被解密(前向保密 PFS)。
⑥ / ⑦ / ⑧ Change Cipher Spec 与 Finished
- 双方约定切换为对称加密。
Finished消息用新密钥加密,包含之前所有握手消息的 MAC,用于校验握手过程未被篡改。
最终产出的密钥
握手完成后,双方得到相同的对称会话密钥,后续 HTTP 请求/响应都用它加解密(如 AES-GCM)。对称加密性能高,适合大量数据传输;非对称加密只用在建握手阶段,兼顾安全与效率。
四、TLS 1.2 与 TLS 1.3 的握手差异
| 对比项 | TLS 1.2 | TLS 1.3 |
|---|---|---|
| 握手往返 | 2-RTT(含证书) | 1-RTT;重连可 0-RTT |
| 密钥交换 | RSA / DH 都支持(RSA 无前向安全) | 仅 ECDHE(强制前向安全) |
| 密码套件 | 多种,含弱算法 | 精简,移除 RSA 密钥交换、RC4、CBC 等弱算法 |
| 加密阶段 | Change Cipher Spec 后才加密 | 早期数据即加密,更安全 |
| 性能 | 较慢 | 更快 |
五、核心概念小结
- 对称加密:加密解密用同一把密钥(如 AES),快,但密钥分发困难。
- 非对称加密:公钥加密、私钥解密(如 RSA/ECDHE),慢,用于安全协商密钥和证书签名。
- 数字证书 / CA:CA 用私钥给服务器公钥签名,客户端用 CA 公钥验证,形成信任链。
- 前向保密(PFS):每次会话用独立临时密钥,长期私钥泄露也不影响历史通信。
一句话记忆:HTTP 明文裸奔,HTTPS 靠 TLS 加密 + 证书认证;连接建立先 TCP 握手再 TLS 握手,握手用非对称加密安全协商出对称密钥,之后全程对称加密传输。