HTTP vs. HTTPS:深入理解差异与 HTTPS 全流程

前言

当我们在浏览器地址栏输入网址时,通常会看到 http://https:// 开头。虽然只差一个 “S”,但它们代表着截然不同的网络通信方式,尤其在安全性方面。理解 HTTP 与 HTTPS 的区别以及 HTTPS 的工作原理,对于 Web 开发者和关心网络安全的用户都至关重要。

什么是 HTTP?

HTTP (Hypertext Transfer Protocol),即超文本传输协议,是用于从万维网(WWW)服务器传输超文本到本地浏览器的传送协议。它是互联网上应用最为广泛的一种网络协议,所有的 WWW 文件都必须遵守这个标准。

HTTP 的主要特点:

  1. 无连接: 限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接(现代 HTTP 版本如 HTTP/1.1 支持持久连接 Keep-Alive)。
  2. 无状态: 协议对于事务处理没有记忆能力。每个请求都是独立的,服务器不知道客户端之前的请求历史。这通常需要 Cookie 或 Session 等机制来维持状态。
  3. 明文传输: 这是 HTTP 最致命的缺点。所有传输的数据(包括用户名、密码、银行卡信息等)都是未加密的,在传输过程中容易被窃听、截取和篡改。

什么是 HTTPS?

HTTPS (Hypertext Transfer Protocol Secure),即安全超文本传输协议。简单来说,它就是 HTTP 的安全版本。HTTPS 在 HTTP 的基础上加入了 SSL/TLS 协议,依靠 SSL/TLS 来加密数据包、验证服务器身份和保证数据完整性。

HTTPS 的核心优势:

  1. 数据加密: 通信内容通过对称加密和非对称加密技术进行加密,即使被截获,攻击者也无法轻易解密获取真实内容。
  2. 身份认证: 通过数字证书验证服务器的真实身份,防止用户访问到仿冒的钓鱼网站。
  3. 数据完整性: 通过消息认证码(MAC)校验数据在传输过程中是否被篡改。

HTTP 与 HTTPS 的主要区别

特性HTTPHTTPS
安全性明文传输,不安全使用 SSL/TLS 加密,安全
协议层应用层协议HTTP + SSL/TLS 协议(在传输层和应用层之间)
URL 前缀http://https://
默认端口80443
证书不需要需要 CA 颁发的 SSL/TLS 证书
连接过程简单,TCP 三次握手后直接传输 HTTP 报文TCP 三次握手后,还需要进行 SSL/TLS 握手
性能性能开销小建立连接(握手)有一定性能开销,但传输过程影响不大
SEO不利于 SEO对 SEO 友好,被搜索引擎(如 Google)推荐

HTTPS 的网络全流程详解

HTTPS 的通信过程比 HTTP 复杂,主要增加了 SSL/TLS 握手 阶段。以下是简化但关键的步骤:

前提: 客户端(如浏览器)发起 HTTPS 请求,例如访问 https://example.com

  1. DNS 解析 (与 HTTP 相同):

    • 客户端查询 DNS 服务器,获取 example.com 对应的 IP 地址。
  2. TCP 三次握手 (与 HTTP 相同):

    • 客户端向服务器的 443 端口 发起 TCP 连接请求(SYN 包)。
    • 服务器响应 SYN-ACK 包。
    • 客户端发送 ACK 包,TCP 连接建立。
  3. SSL/TLS 握手 (HTTPS 核心):

    • a. Client Hello: 客户端向服务器发送 Client Hello 消息,包含:
      • 客户端支持的 TLS/SSL 版本号列表。
      • 客户端支持的加密套件 (Cipher Suites) 列表(包含加密算法、密钥交换算法、哈希算法等)。
      • 一个客户端生成的随机数 (client_random)。
      • (可选)支持的压缩方法。
      • (可选)扩展字段,如 SNI(Server Name Indication),用于指示客户端想访问哪个域名(在同一 IP 有多个 HTTPS 站点时很重要)。
    • b. Server Hello: 服务器收到 Client Hello 后,回应 Server Hello 消息,包含:
      • 从客户端列表中选定的 TLS/SSL 版本号。
      • 从客户端列表中选定的加密套件。
      • 一个服务器生成的随机数 (server_random)。
      • (可选)选定的压缩方法。
    • c. Certificate (服务器证书): 服务器发送其 数字证书(通常是 X.509 格式)给客户端。证书包含了:
      • 服务器的公钥
      • 证书颁发机构 (CA) 的信息。
      • 证书的有效期。
      • 证书持有者的信息(如域名)。
      • CA 的数字签名。
    • d. (可选) Certificate Request: 如果服务器需要验证客户端身份(双向认证),会发送此消息请求客户端证书。大多数情况下不需要。
    • e. Server Key Exchange (可选): 根据选择的密钥交换算法(如 Diffie-Hellman),服务器可能需要发送额外的数据(如 DH 参数)。对于 RSA 密钥交换,此步可能省略。
    • f. Server Hello Done: 服务器通知客户端,初始协商信息发送完毕。
    • g. 客户端证书验证: 客户端收到服务器证书后,进行验证:
      • 检查证书是否由受信任的 CA 签发(查找操作系统或浏览器内置的根证书)。
      • 验证证书链。
      • 检查证书是否在有效期内。
      • 检查证书的域名是否与正在访问的域名 (example.com) 匹配。
      • (可选)通过 OCSP 或 CRL 检查证书是否已被吊销。
    • h. Client Key Exchange: 客户端证书验证通过后,生成另一个随机数,称为 Pre-master Secret。然后:
      • 使用服务器证书中的公钥对这个 Pre-master Secret 进行非对称加密
      • 将加密后的 Pre-master Secret 发送给服务器。
    • i. (可选) Certificate Verify: 如果服务器请求了客户端证书(步骤 d),客户端会发送一个数字签名证明自己拥有该证书的私钥。
    • j. Change Cipher Spec: 客户端通知服务器,后续通信将使用协商好的加密套件和生成的会话密钥进行加密。
    • k. Encrypted Handshake Message (Finished): 客户端将前面所有握手消息的摘要,使用会话密钥进行对称加密后发送给服务器。这是对握手过程的校验。
    • l. 服务器解密与验证:
      • 服务器使用自己的私钥解密客户端发来的 Pre-master Secret(步骤 h)。
      • 服务器和客户端现在都拥有了 client_randomserver_randomPre-master Secret。双方使用相同的算法(在协商的加密套件中定义)独立计算出本次会话的对称加密密钥Session Key)。
    • m. Change Cipher Spec: 服务器通知客户端,后续通信也将使用协商好的会话密钥进行加密。
    • n. Encrypted Handshake Message (Finished): 服务器同样将前面所有握手消息的摘要,使用会话密钥进行对称加密后发送给客户端,供客户端验证。

    至此,SSL/TLS 握手完成。 客户端和服务器已经安全地协商出了用于本次会话的对称加密密钥。

  4. 加密的 HTTP 通信:

    • 客户端使用协商好的会话密钥(对称加密)加密 HTTP 请求(如 GET /index.html HTTP/1.1)。
    • 服务器使用会话密钥解密请求,处理后,再用会话密钥加密 HTTP 响应。
    • 客户端使用会话密钥解密响应,渲染页面。
    • 此阶段的所有 HTTP 数据都通过对称加密进行保护,效率较高。
  5. TCP 四次挥手 (与 HTTP 相同):

    • 当数据传输完成,任何一方(通常是客户端)发起关闭连接的请求 (FIN)。
    • 另一方确认 (ACK)。
    • 另一方也发送 FIN。
    • 发起方确认 (ACK),TCP 连接断开。

为什么我们应该总是使用 HTTPS?

  • 保护用户隐私: 防止敏感信息(密码、支付信息等)在传输中被窃取。
  • 数据完整性: 防止传输内容被中间人篡改(如注入广告、恶意脚本)。
  • 身份认证: 确保用户访问的是真实的目标网站,而非钓鱼网站。
  • 提升信任度: 浏览器地址栏的 “锁” 标志能增加用户的信任感。
  • SEO 优势: Google 等搜索引擎已将 HTTPS 作为排名因素之一。
  • 现代 Web 功能需求: 许多新的浏览器 API(如 Service Workers, Geolocation)要求必须在 HTTPS 环境下才能使用。

结论

HTTPS 通过在 HTTP 和 TCP 之间增加一层 SSL/TLS 安全协议,极大地增强了 Web 通信的安全性。虽然握手过程增加了初始连接的开销,但其带来的数据加密、身份认证和完整性保护对于现代互联网至关重要。部署 HTTPS 已经不再是选项,而是保护网站和用户的基本要求。