一、核心对比
HTTP (HyperText Transfer Protocol)是超文本传输协议,明文传输 ,不安全。HTTPS (HyperText Transfer Protocol Secure)是 HTTP 的安全版本,在 HTTP 之下加入了 TLS/SSL 加密层,确保数据传输的机密性、完整性和身份认证。
| 维度 | HTTP | HTTPS |
|---|---|---|
| 安全性 | 明文传输,易被窃听、篡改、劫持 | 加密传输,防窃听、防篡改、防冒充 |
| 协议层 | 应用层直接基于 TCP | 应用层 → TLS/SSL → TCP |
| 默认端口 | 80 | 443 |
| 证书 | 不需要 | 需要 SSL/TLS 证书(由 CA 机构颁发) |
| 性能 | 更快(无加密开销) | 稍慢(握手和加密解密有开销) |
| SEO | 搜索引擎标记"不安全" | 搜索引擎优先收录,排名加权 |
| URL 前缀 | http:// |
https:// |
二、HTTPS 的加密原理
HTTPS 并非单独的新协议,而是 HTTP over TLS/SSL:
HTTP 数据
↓
TLS/SSL 层(加密 + 认证 + 完整性校验)
↓
TCP 传输层
↓
IP 网络层
TLS 提供三大保障:
- 机密性:对称加密传输数据,第三方无法窃听内容。
- 完整性:消息认证码(MAC)校验,防止数据被篡改。
- 身份认证:数字证书验证服务器身份,防止 DNS 劫持/钓鱼网站。
三、TLS 握手过程
HTTPS 在 TCP 三次握手之后,还要进行 TLS 握手(以 TLS 1.2 为例,1-RTT):
客户端 服务器
| |
| ① Client Hello |
| (支持的 TLS 版本 + 加密套件 + 随机数) |
| --------------------------------------> |
| |
| ② Server Hello |
| (选定 TLS 版本 + 加密套件 + 随机数) |
| + 证书(含公钥) |
| <-------------------------------------- |
| |
| ③ Client Key Exchange |
| (用公钥加密预主密钥 Pre-master Secret) |
| + Change Cipher Spec |
| --------------------------------------> |
| |
| ④ Change Cipher Spec + Finished |
| <-------------------------------------- |
| |
[双方用协商的密钥进行对称加密通信]
TLS 1.3 优化 :握手压缩为 1-RTT(甚至 0-RTT),速度大幅提升。
四、数字证书与 CA 机制
为什么需要证书?
- 防止中间人攻击:客户端需要确认"跟我通信的确实是目标服务器,不是冒充者"。
证书验证流程:
- 服务器向 CA(Certificate Authority,证书颁发机构) 申请证书,提交公钥和域名信息。
- CA 验证域名所有权后,用 CA 的私钥对服务器公钥和域名进行签名,生成证书。
- 客户端(浏览器)内置了各大 CA 的公钥,收到证书后用 CA 公钥验证签名。
- 验证通过 → 信任该服务器;验证失败 → 提示"证书不受信任"。
常见证书类型:
- DV(Domain Validation):只验证域名,最便宜,个人/小站常用。
- OV(Organization Validation):验证企业身份,地址栏显示公司名。
- EV(Extended Validation):最严格验证,地址栏曾显示绿色公司名(现多数浏览器已取消绿条)。
五、HTTP 为什么不安全?
三种典型攻击:
| 攻击类型 | 原理 | HTTPS 如何防御 |
|---|---|---|
| 窃听(Sniffing) | 明文传输,抓包工具(Wireshark)可直接看到内容 | 对称加密,密文不可读 |
| 篡改(Tampering) | 中间人修改传输内容(如注入广告、跳转钓鱼页) | MAC 校验,篡改后校验失败 |
| 冒充(Spoofing) | DNS 劫持到假网站,伪造服务器身份 | 数字证书验证,假网站无合法证书 |
六、性能差异与优化
HTTPS 比 HTTP 慢吗?
- TLS 握手:增加 1-2 个 RTT(TLS 1.3 已优化到 1-RTT 甚至 0-RTT)。
- 加密解密:CPU 开销增加约 5%-10%,现代硬件(AES-NI 指令集)已可忽略。
- 证书传输:证书链可能增加几 KB 流量。
优化手段:
- TLS 1.3:减少握手往返。
- 会话复用(Session Resumption):跳过完整握手。
- OCSP Stapling:服务器预先获取证书状态,避免客户端单独查询 CA。
- HTTP/2 + HTTPS:多路复用、头部压缩,实际体验往往比 HTTP/1.1 更快。
七、常见问题
Q1:HTTPS 一定安全吗?
答: 不是绝对安全。如果用户主动信任了恶意证书、或客户端被植入根证书(如公司内网监控),HTTPS 仍可能被中间人解密。另外,HTTPS 只保护传输过程,不保护服务器端的数据泄露。
Q2:为什么 HTTPS 要同时用对称加密和非对称加密?
答:
- 非对称加密(RSA/ECDHE):用于握手阶段交换对称密钥,解决"密钥如何安全传递"的问题。
- 对称加密(AES):用于后续数据传输,速度快、开销低。
- 如果全程用非对称加密,性能会差 100 倍以上。
Q3:HTTP 可以升级到 HTTPS 吗?怎么升?
答:
- 申请 SSL 证书(Let's Encrypt 免费,或购买商业证书)。
- 服务器配置证书和私钥(Nginx/Apache/IIS)。
- 强制 301 重定向 HTTP → HTTPS。
- 开启 HSTS(HTTP Strict Transport Security),告诉浏览器以后自动用 HTTPS 访问。
Q4:什么是 HSTS?
答: 一种安全策略机制,服务器通过响应头 Strict-Transport-Security: max-age=31536000 告诉浏览器:未来一年内,该域名必须使用 HTTPS 访问,即使用户输入 http:// 也不允许降级。防止 SSL Strip 攻击。
八、总结
HTTP 是"裸奔",数据在公网上明文传输,任何人都能看、能改、能冒充。
HTTPS 是"穿盔甲" ,通过 TLS 加密 + 证书认证,确保只有通信双方能读懂内容,且对方身份真实可信。现代互联网,HTTPS 是标配,HTTP 正在被淘汰。