HTTPS-计网(11)

Date:

HTTPS (Hypertext Transfer Protocol Secure) 是在 HTTP 协议的基础上,增加了 SSL/TLS 协议进行加密,以提供安全性的网络通信协议。


目录

什么是 HTTPS?

HTTPS (Hypertext Transfer Protocol Secure) 是在 HTTP 协议的基础上,增加了 SSL/TLS (Secure Sockets Layer / Transport Layer Security) 协议进行加密,以提供安全性的网络通信协议。简单来说,HTTPS = HTTP + SSL/TLS。

它的主要目标是解决 HTTP 固有的不安全性,确保用户在浏览器和服务器之间传输的数据是加密、完整且经过身份验证的。


HTTPS 解决了 HTTP 的哪些问题?

HTTP 协议本身是明文传输的。这意味着在客户端和服务器之间传输的所有数据都是可见的,容易被中间人窃取、篡改或伪造。

HTTPS 通过引入 SSL/TLS 层,解决了 HTTP 的三大核心安全问题:

  1. 数据窃听(Eavesdropping / Confidentiality):通过加密解决
    • HTTP 问题: 攻击者可以截获并阅读所有传输的数据,就像监听电话一样。
    • HTTPS 解决: 通过 加密 (Encryption),所有在客户端和服务器之间传输的数据都进行了加密,即使被截获,也无法被轻易解读,确保了数据的机密性
  2. 数据篡改(Tampering / Integrity):通过完整性校验解决
    • HTTP 问题: 攻击者可以在数据传输过程中修改数据,例如篡改订单金额或注入恶意代码。
    • HTTPS 解决: 通过 完整性校验 (Integrity Verification),SSL/TLS 会对传输的数据进行哈希计算(如 HMAC),确保数据在传输过程中没有被未经授权的第三方修改。任何篡改都会导致校验失败,从而被发现。
  3. 身份伪造(Impersonation / Authenticity):通过CA颁发的证书解决
    • HTTP 问题: 攻击者可以伪装成合法服务器或客户端,诱骗用户提交敏感信息(钓鱼网站)。
    • HTTPS 解决: 通过 身份认证 (Authentication),服务器会向客户端提供一个由受信任的第三方机构(CA - Certificate Authority)颁发的数字证书。客户端会验证这个证书的合法性,以确认正在通信的服务器是真实的,从而防止中间人攻击和钓鱼网站。

HTTPS 的核心:SSL/TLS 协议

SSL/TLS 是位于 HTTP 协议和 TCP 协议之间的一层安全协议,它负责整个加密通信的建立和维护。其核心工作流程是SSL/TLS 握手(Handshake)

SSL/TLS 握手过程(简化版)

SSL/TLS 握手是一个复杂但至关重要的过程,它确保了客户端和服务器之间的安全连接。

  1. 客户端发起连接 (Client Hello):
    • 客户端向服务器发送 Client Hello 消息,包含:
      • 支持的 SSL/TLS 协议版本(如 TLS 1.2, TLS 1.3)。
      • 客户端支持的加密套件 (Cipher Suites) 列表(如 AES256-SHA, ECDHE-RSA-AES128-GCM-SHA256 等,包含密钥交换算法、对称加密算法、哈希算法)。
      • 一个随机数 Client Random
  2. 服务器响应 (Server Hello):
    • 服务器接收到 Client Hello 后,从客户端提供的列表中选择:
      • 一个最佳的 SSL/TLS 协议版本
      • 一个最佳的加密套件
    • 服务器发送 Server Hello 消息,包含:
      • 选定的协议版本加密套件以及一个随机数 Server Random
      • Certificate 消息,服务器的数字证书
      • Server Key Exchange 消息,把公钥Pubkey发给客户端。
      • (可选)Certificate Request 消息,如果服务器需要验证客户端身份(双向认证),网银系统会用到。
      • Server Hello Done 消息,表示服务器的协商完成。
  3. 客户端验证证书并生成预主密钥 (Client Key Exchange):
    • 客户端接收到服务器证书后,开始验证其合法性:
      • 验证证书链: 检查证书是否由受信任的 CA 签发(客户端内置了信任的 CA 列表)。
      • 验证域名: 检查证书上的域名与访问的域名是否匹配。
      • 验证有效期: 检查证书是否在有效期内。
      • 验证撤销状态: 检查证书是否被吊销(通过 CRL 或 OCSP)。
    • 如果证书验证通过,客户端从证书中提取服务器的公钥
    • 客户端生成一个预主密钥 (Pre-Master Secret),并使用服务器发过来的公钥对其进行加密
    • 客户端发送加密后的预主密钥给服务器 (Client Key Exchange)。
  4. 服务器解密预主密钥并生成主密钥:
    • 服务器收到加密的预主密钥后,使用自己的私钥对其进行解密,得到预主密钥
    • 客户端和服务器各自使用 Client RandomServer RandomPre-Master Secret,通过复杂的算法推导出相同主密钥 (Master Secret)
    • 至此,双方都拥有了相同的对称加密密钥(主密钥)
  5. 切换加密通信 (Change Cipher Spec):
    • 客户端发送 Change Cipher Spec 消息,通知服务器后续通信将使用协商好的加密套件进行加密。
    • 客户端发送 Encrypted Handshake Message(通常是 Finished 消息),它是之前所有握手消息的哈希值,用主密钥加密,用于验证握手过程的完整性。
  6. 服务器切换加密通信:
    • 服务器发送 Change Cipher Spec 消息。
    • 服务器发送 Encrypted Handshake MessageFinished 消息),也用主密钥加密。
  7. 加密通信:
    • 双方互相验证 Finished 消息的正确性后,SSL/TLS 握手完成。
    • 后续的所有应用层数据(HTTP 请求和响应)都将使用协商出的对称密钥进行加密传输

为什么握手这么复杂?为什么不直接用公钥加密后再在服务端解密?

  • 对称加密的效率: 对称加密的加密解密速度比非对称加密快得多。因此,实际的数据传输使用对称加密。
  • 非对称加密的安全性: 对称密钥需要在客户端和服务器之间安全地交换。非对称加密(公钥加密、私钥解密)用于安全地交换这个对称密钥(即预主密钥)。
    • 服务器的公钥是公开的,但只有服务器能用私钥解密。这样可以保证预主密钥在传输过程中不会被窃听。
  • 数字证书的信任: 引入 CA 颁发的数字证书,是为了解决公钥的真实性问题。如何确认你拿到的公钥确实是目标服务器的?CA 作为权威机构,对服务器身份进行验证并签名其公钥,确保了身份的真实性,防止中间人伪造公钥。

HTTPS 的优缺点

优点:

  1. 安全性: 最核心的优势,保护用户数据不被窃听、篡改,并验证服务器身份。
  2. 提升信任度: 浏览器地址栏显示“安全”标志和绿色小锁,增加用户对网站的信任。
  3. SEO 优势: 搜索引擎(如 Google)将 HTTPS 视为排名因素,有利于网站的 SEO 表现。
  4. HTTP/2 的基础: HTTP/2 协议要求必须在加密连接上运行,因此 HTTPS 是启用 HTTP/2 的前提,而 HTTP/2 能带来更好的性能(多路复用、头部压缩等)。
  5. Web API 权限: 许多现代浏览器 API(如地理位置、WebGPU、Service Worker、WebRTC)都强制要求在安全上下文 (HTTPS) 中使用。

缺点:

  1. 性能开销: SSL/TLS 握手过程增加了额外的网络往返时间 (RTT),加密解密也增加了 CPU 负担。不过,现代硬件和协议优化(如 TLS 1.3 的 0-RTT 握手、硬件加速)已大大降低了这部分开销。
  2. 证书成本: 购买受信任的 SSL/TLS 证书需要一定的费用(但现在有免费的 Let’s Encrypt 证书)。
  3. 部署和维护: 服务器配置 HTTPS 比 HTTP 略复杂,需要管理证书的续期等。
  4. 缓存问题: 某些情况下,CDN 对 HTTPS 资源的缓存策略可能需要额外配置。

为什么说 HTTPS 是未来的趋势?

  • 隐私和安全意识提升: 用户越来越关注自己的数据隐私,对网站的安全性要求更高。
  • 浏览器强制要求: 现代浏览器(Chrome、Firefox 等)对非 HTTPS 网站标记“不安全”,并限制其使用某些 Web API。
  • 搜索引擎推动: Google 等巨头的大力推广,将 HTTPS 作为网站排名的重要指标。
  • 技术发展: TLS 1.3 等新版本协议和硬件优化,使得 HTTPS 的性能开销越来越小,逐渐接近 HTTP。
  • 免费证书普及: Let’s Encrypt 等免费证书服务的出现,大大降低了 HTTPS 的部署成本。

综上所述,HTTPS 已从“推荐”变为“必需”,是构建安全、可靠、高性能现代 Web 应用的基石。作为前端开发者,不仅要了解其重要性,更要理解其工作原理,才能更好地排查问题和进行性能优化。


参考