# HTTP 和 HTTPS 有什么区别?
Table of Contents
HTTP 和 HTTPS 有什么区别?
HTTP 与 HTTPS 的区别
【核心定义】
HTTP(超文本传输协议)是一种明文传输的应用层协议,而 HTTPS 是在 HTTP 基础上通过 SSL/TLS 协议提供加密、身份认证和数据完整性保护的安全传输协议。
【关键要点】
-
安全性本质不同
HTTP 所有数据以明文传输,无加密、无身份验证、无完整性校验;HTTPS 通过 SSL/TLS 协议实现端到端的加密传输,防止窃听、篡改和冒充。 -
默认端口不同
HTTP 默认使用 80 端口;HTTPS 默认使用 443 端口。 -
协议栈差异
HTTP 直接建立在 TCP 之上;HTTPS 在 TCP 和 HTTP 之间加入了 SSL/TLS 安全层,形成 TCP → SSL/TLS → HTTP 的协议栈。 -
证书机制要求
HTTPS 必须使用数字证书(通常由 CA 颁发)进行服务器身份认证,建立信任链;HTTP 无证书要求。 -
性能开销
HTTPS 因加密解密、证书验证等操作,会带来额外的 CPU 计算开销和网络延迟(可通过 TLS 握手优化、会话复用等技术缓解)。
【深度推导/细节】
SSL/TLS 握手流程(以 TLS 1.2 为例)
Step 1 – Client Hello
客户端向服务器发送支持的 TLS 版本、加密套件列表、随机数(Client Random)。
Step 2 – Server Hello
服务器选择 TLS 版本和加密套件,发送随机数(Server Random)和数字证书(包含公钥)。
Step 3 – 证书验证与密钥交换
客户端验证证书有效性(CA 链、有效期、域名匹配等)。验证通过后,生成预主密钥(Pre-Master Secret),用服务器公钥加密后发送。
Step 4 – 会话密钥生成
客户端和服务器分别使用 Client Random、Server Random 和 Pre-Master Secret,通过相同的密钥派生函数生成相同的会话密钥(Session Key),用于后续对称加密。
Step 5 – 加密通信开始
双方使用会话密钥进行对称加密通信,保证后续 HTTP 数据传输的机密性和完整性。
关键数字与设计考量
- 443 端口:IANA 为 HTTPS 分配的默认端口,与 80 端口隔离,便于防火墙规则配置。
- 证书有效期:通常为 1-2 年,平衡安全性与管理成本。过期需续期,防止长期密钥泄露风险。
- 密钥长度:RSA 密钥通常 2048 位以上,ECC 密钥 256 位,在安全强度和计算性能间取得平衡。
【关联/对比】
HTTP/1.1 vs HTTP/2 vs HTTPS
- HTTP/1.1 和 HTTP/2 是协议版本,可运行在明文(HTTP)或加密(HTTPS)通道上。
- HTTP/2 的多路复用、头部压缩等特性在 HTTPS 上同样适用,且现代浏览器要求 HTTP/2 必须基于 HTTPS。
SSL vs TLS
- SSL(Secure Sockets Layer)是 Netscape 开发的早期协议,已淘汰(SSL 3.0 存在 POODLE 漏洞)。
- TLS(Transport Layer Security)是 SSL 的标准化升级,目前主流版本为 TLS 1.2 和 TLS 1.3。
- TLS 1.3 大幅简化握手过程,减少 RTT,移除不安全算法,安全性更高。
对称加密 vs 非对称加密在 HTTPS 中的应用
- 非对称加密(RSA/ECC):仅用于握手阶段的身份认证和密钥交换,计算开销大。
- 对称加密(AES/ChaCha20):用于握手后的数据传输,性能高效。
- 混合加密体系:结合两者优势,既保证密钥安全交换,又保证数据传输效率。
『面试官追问』
-
HTTPS 是否绝对安全?有哪些潜在风险?
- 证书颁发机构(CA)被攻破可能导致伪造证书。
- 中间人攻击(MITM)在用户忽略证书警告时可能发生。
- 协议实现漏洞(如 Heartbleed)、降级攻击、密码套件配置不当等。
-
TLS 1.3 相比 TLS 1.2 有哪些重要改进?
- 握手从 2-RTT 减少到 1-RTT(0-RTT 可选但需谨慎使用)。
- 移除不安全的加密算法(如 RC4、SHA-1、CBC 模式)、静态 RSA 密钥交换。
- 密钥交换与身份认证分离,前向安全性成为默认要求。
-
如何优化 HTTPS 性能?
- 启用 TLS 会话复用(Session ID/Ticket)减少握手开销。
- 使用 OCSP Stapling 避免客户端单独查询证书状态。
- 选择 ECC 证书(比 RSA 证书更小、计算更快)。
- 开启 HTTP/2 多路复用,减少连接数。
-
为什么现代浏览器将 HTTP 标记为“不安全”?
- 明文传输易被窃听(公共 Wi-Fi 风险)。
- 缺乏完整性保护导致内容可能被篡改(运营商广告注入)。
- 无法验证服务器身份,网络钓鱼风险增加。
-
自签名证书与 CA 签发证书的区别?
- 自签名证书可自行生成,成本低,但浏览器会显示警告(不被信任的根证书)。
- CA 签发证书经过第三方机构验证,被操作系统和浏览器预置信任,无警告显示。
- 生产环境必须使用 CA 签发证书;自签名证书仅适用于内部测试环境。
总结:HTTPS 不是简单的“HTTP + 加密”,而是一套完整的网络安全解决方案,涉及加密算法、证书体系、协议握手等多个层面。从 HTTP 迁移到 HTTPS 已成为现代 Web 开发的基本要求,不仅是安全最佳实践,也是 SEO、浏览器特性支持的必要条件。