13. HTTP 与 HTTPS 的区别(热度 451 · 高频选考)
Q: HTTP 和 HTTPS 有什么区别?
A:
对照表
| 维度 | HTTP | HTTPS |
|---|---|---|
| 协议 | 应用层明文 | HTTP + TLS/SSL |
| 端口 | 80 | 443(默认,可配置其他) |
| 安全性 | 明文,可窃听/篡改/冒充 | 加密 + 完整性校验 + 身份认证 |
| 证书 | 无 | 需 CA 签发证书(及私钥) |
| 性能 | 无加密开销 | 有握手与加解密开销(会话复用、HTTP/2、TLS1.3、AES-NI 缓解) |
| SEO | 无优势 | 搜索引擎加权 |
| 浏览器标识 | 涉及密码/卡片时常提示不安全 | 安全锁标 |
HTTPS 解决什么?(三类威胁)
| 威胁 | 攻击 | HTTPS 对策 |
|---|---|---|
| 窃听 | 截获明文 | 加密(对称会话密钥) |
| 篡改 | 中途改报文 | 完整性校验(MAC/AEAD、握手摘要) |
| 冒充 | 伪造服务器 | 身份认证(证书 + 非对称签名) |
HTTPS = HTTP over TLS。 语义与 HTTP 基本相同,差别在 socket 之上多了 TLS 记录层。握手增加 1~2 个 RTT(TLS1.3 更少);同连接可复用会话/票据;CPU 开销在 AES-NI 下可接受。迁移:301、HSTS、全站资源 HTTPS、证书自动续期(ACME)。
常见追问
追问 1:HTTPS 一定更安全吗?会不会仍有风险?
- 答题要点: 相对明文 HTTP 大幅提升机密性/完整性/身份认证,但仍可能:证书链被恶意根伪造、客户端关闭校验、应用层漏洞(XSS/CSRF/越权)、混合内容降级、用户忽略警告。HTTPS 不是「应用绝对安全」。
追问 2:端口 443 是安全的来源吗?
- 答题要点: 不是。安全来自 TLS 证书校验与密码学;443 只是默认约定。HTTPS 也可监听其他端口,HTTP 也可被错误地用在 443。
追问 3:为什么搜索引擎偏好 HTTPS?
- 答题要点: 保护用户隐私、减少中间人注入广告/劫持,提升整体生态信任;工程上也与 HTTP/2 部署习惯相关。SEO 是结果之一,不是协议安全机制本身。
易错点
| 易错说法 | 纠正 |
|---|---|
| 「HTTPS=HTTP 加个端口」 | 核心是 TLS:加密+完整性+认证 |
| 「HTTPS 完全防 XSS/SQL 注入」 | 传输层安全不替代应用安全 |
| 「HTTPS 太慢不能上」 | 现代优化后开销可接受,且是基本合规要求 |
| 「没有证书也能 HTTPS」 | 公共 HTTPS 需要可信证书;自签仅限实验 |
| 「80 和 443 混用无影响」 | 会影响 Cookie Secure、HSTS、中间设备策略 |
与选择题对照
- 主库 150: 第 74/91 题(443/HTTPS 组成)、第 84 题(HTTP 特点)、第 98/103/104/105 题(安全威胁)、第 99/113/114/115 题(加密与 TLS)、第 124 题(访问顺序)。
- 补题 16: 补-14(邮件明文/加密端口对照,可类比 HTTP/HTTPS)。
- 口述联动: 选择题考端口与组成;面试要落到「三类威胁 ↔ 三类安全属性」以及性能与迁移。
工程 / 抓包背景
- 对比抓包: Wireshark 中
tcp.port==80可直接读明文 HTTP;tcp.port==443应用数据加密(未配置密钥日志时)。 - curl:
curl -v http://example.com与curl -v https://example.com;观察SSL connection using...。 - Nginx:nginx
listen 80; return 301 https://$host$request_uri; listen 443 ssl; # ≤1.24 可在本行尾加 http2;1.25.1 起该参数标记为 deprecated(尚未移除) http2 on; # 1.25.1+ 推荐写法 ssl_certificate fullchain.pem; ssl_certificate_key privkey.pem; - HSTS:
Strict-Transport-Security: max-age=31536000; includeSubDomains强制 HTTPS。 - 排障:
openssl s_client验证书;curl -I看跳转链是否全 HTTPS。