HTTP(超文本传输协议)与 HTTPS(超文本传输安全协议)是互联网上应用最广泛的数据通信协议。HTTPS 并非一种全新的应用层协议,而是在 HTTP 的基础上加入了 SSL/TLS 安全层,专门用于解决 HTTP 明文传输带来的安全隐患。
1. 核心区别对比
| 对比维度 | HTTP | HTTPS |
|---|---|---|
| 安全性 | 明文传输,数据易被窃听、篡改或伪造 | 加密传输,具备机密性、完整性和身份验证 |
| 默认端口 | 80 | 443 |
| URL 标识 | http://开头 | https://开头 |
| 证书需求 | 不需要 | 需要由受信任的 CA(证书颁发机构)颁发数字证书 |
| 性能开销 | 无加密开销,传输较快 | 存在加解密计算开销,速度稍慢(现代协议已大幅优化) |
| 浏览器标识 | 地址栏通常显示“不安全”警告 | 地址栏显示锁形图标,代表安全连接 |
| SEO 影响 | 不利于搜索引擎排名 | 搜索引擎(如 Google)优先收录,有利于 SEO |
2. HTTPS 的安全机制(三大核心)
HTTPS 通过以下三种机制弥补了 HTTP 的安全缺陷:
- 数据加密:采用对称加密与非对称加密相结合的方案。在建立连接时使用非对称加密安全地协商密钥,在后续的业务数据传输阶段使用对称加密(如 AES)对 URL、请求头、Token 等全部数据进行加密,防止中间人窃听。
- 身份验证:通过数字证书验证服务器的真实性。客户端(浏览器)内置了 CA 机构的公钥,通过验证服务器下发的数字证书,确保通信对象是真实的服务器而非恶意伪装的中间人。
- 数据完整性:通过消息认证码(MAC)或哈希函数,确保数据在传输过程中未被篡改。接收方可以验证收到的数据与发送方发送的完全一致。
3. HTTPS 的通信流程(TLS 握手)
HTTPS 在正式传输 HTTP 数据前,需要先进行 SSL/TLS 握手以建立安全通道:
- 客户端 Hello:客户端向服务器发起连接,发送支持的 TLS 版本、加密算法列表以及一个随机数(Client Random)。
- 服务器 Hello:服务器选择一种加密算法,连同自己的数字证书、公钥和另一个随机数(Server Random)发回给客户端。
- 验证证书:客户端验证服务器证书的有效性(是否由可信 CA 签发、是否过期、域名是否匹配)。
- 生成会话密钥:客户端生成一个预主密钥(Pre-Master Secret),用服务器的公钥加密后发送给服务器。服务器用自己的私钥解密获取该密钥。
- 开始加密通信:双方根据之前的三个随机数计算出相同的对称加密会话密钥(Session Key)。后续所有的 HTTP 请求和响应数据都使用此密钥进行加密传输。
4. 总结与适用场景
- HTTP 适用场景:由于缺乏安全性,目前主要仅用于内部网络、测试环境或传输完全不敏感的信息。
- HTTPS 适用场景:现代 Web 的标配。所有涉及用户隐私、账号登录、支付交易、API 调用的网站都必须使用 HTTPS。此外,由于主流浏览器对 HTTP 标记为“不安全”,且 HTTP/2 等新一代协议大多要求基于 HTTPS 运行,全面迁移到 HTTPS 已成为互联网发展的必然趋势。