# HTTP 和 HTTPS 有什么区别?

7 min read
Table of Contents

HTTP 和 HTTPS 有什么区别?

HTTP 与 HTTPS 的区别

【核心定义】

HTTP(超文本传输协议)是一种明文传输的应用层协议,而 HTTPS 是在 HTTP 基础上通过 SSL/TLS 协议提供加密、身份认证和数据完整性保护的安全传输协议。

【关键要点】

  1. 安全性本质不同
    HTTP 所有数据以明文传输,无加密、无身份验证、无完整性校验;HTTPS 通过 SSL/TLS 协议实现端到端的加密传输,防止窃听、篡改和冒充。

  2. 默认端口不同
    HTTP 默认使用 80 端口;HTTPS 默认使用 443 端口。

  3. 协议栈差异
    HTTP 直接建立在 TCP 之上;HTTPS 在 TCP 和 HTTP 之间加入了 SSL/TLS 安全层,形成 TCP → SSL/TLS → HTTP 的协议栈。

  4. 证书机制要求
    HTTPS 必须使用数字证书(通常由 CA 颁发)进行服务器身份认证,建立信任链;HTTP 无证书要求。

  5. 性能开销
    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):用于握手后的数据传输,性能高效。
  • 混合加密体系:结合两者优势,既保证密钥安全交换,又保证数据传输效率。

『面试官追问』

  1. HTTPS 是否绝对安全?有哪些潜在风险?

    • 证书颁发机构(CA)被攻破可能导致伪造证书。
    • 中间人攻击(MITM)在用户忽略证书警告时可能发生。
    • 协议实现漏洞(如 Heartbleed)、降级攻击、密码套件配置不当等。
  2. TLS 1.3 相比 TLS 1.2 有哪些重要改进?

    • 握手从 2-RTT 减少到 1-RTT(0-RTT 可选但需谨慎使用)。
    • 移除不安全的加密算法(如 RC4、SHA-1、CBC 模式)、静态 RSA 密钥交换。
    • 密钥交换与身份认证分离,前向安全性成为默认要求。
  3. 如何优化 HTTPS 性能?

    • 启用 TLS 会话复用(Session ID/Ticket)减少握手开销。
    • 使用 OCSP Stapling 避免客户端单独查询证书状态。
    • 选择 ECC 证书(比 RSA 证书更小、计算更快)。
    • 开启 HTTP/2 多路复用,减少连接数。
  4. 为什么现代浏览器将 HTTP 标记为“不安全”?

    • 明文传输易被窃听(公共 Wi-Fi 风险)。
    • 缺乏完整性保护导致内容可能被篡改(运营商广告注入)。
    • 无法验证服务器身份,网络钓鱼风险增加。
  5. 自签名证书与 CA 签发证书的区别?

    • 自签名证书可自行生成,成本低,但浏览器会显示警告(不被信任的根证书)。
    • CA 签发证书经过第三方机构验证,被操作系统和浏览器预置信任,无警告显示。
    • 生产环境必须使用 CA 签发证书;自签名证书仅适用于内部测试环境。

总结:HTTPS 不是简单的“HTTP + 加密”,而是一套完整的网络安全解决方案,涉及加密算法、证书体系、协议握手等多个层面。从 HTTP 迁移到 HTTPS 已成为现代 Web 开发的基本要求,不仅是安全最佳实践,也是 SEO、浏览器特性支持的必要条件。

My avatar

文章看完了,不打算去别的篇章转转吗?👀 感谢你的耐心阅读!如果你有问题想探讨,或者发现了文中的 Bug,请务必通过页脚的链接联系我


More Posts

# HTTP 与 RPC 之间的区别?

8 min read

HTTP 是一种通用的应用层网络协议,主要用于 Web 通信;而 RPC(远程过程调用)是一种通信范式或架构模式,旨在让调用远程服务像调用本地方法一样简单,其底层传输协议可以是 HTTP,也可以是 TCP 等自定义协议。

Read

# GitHub 和 GitLab 有什么区别?

8 min read

GitHub 是一个基于 Git 的代码托管平台,以社交化编程和开源协作生态为核心;GitLab 则是一个基于 Git 的完整 DevOps 平台,强调从代码管理到 CI/CD、安全扫描的一体化解决方案。

Read

Comments