1. 概述

在本篇文章中,我们将深入探讨两种用于保障网络通信安全的协议:SSL 与 TLS。我们将从它们的工作原理讲起,然后重点分析它们之间的核心差异。

目标读者:有网络编程经验的开发人员,本文不会过多讲解基础概念,重点在于对比与实践。


2. HTTP 与 HTTPS 简介

HTTP(Hypertext Transfer Protocol)是互联网上用于传输网页数据的标准协议。但 HTTP 是明文传输的,这意味着如果传输的数据中包含敏感信息(如密码、信用卡号等),中间人攻击(MITM)就可能截取这些数据。

HTTPS(HyperText Transfer Protocol Secure)正是为了解决这个问题而设计的。它在 HTTP 的基础上加入了 SSL/TLS 加密层,使得客户端与服务器之间的通信内容被加密,即使被截获,也无法直接读取。

⚠️ 注意:现在很多非敏感网站也普遍使用 HTTPS,这是为了提升整体安全性和 SEO 排名。

HTTP 通常使用端口 80,而 HTTPS 使用端口 443。


3. SSL 与 TLS 简介

SSL(Secure Sockets Layer)和 TLS(Transport Layer Security)都是用于在客户端与服务器之间建立安全通信的协议。它们提供了以下三个关键功能:

  • 身份验证(Authentication)
  • 数据加密(Encryption)
  • 数据完整性(Data Integrity)

SSL 是较早的协议,由 Netscape 在 1990 年代开发。TLS 是 SSL 的继任者,目前广泛使用的是 TLS 1.2 和 TLS 1.3。

✅ SSL 的历史版本:

  • SSL 1.0:从未公开发布
  • SSL 2.0:1995 年发布,存在严重安全问题
  • SSL 3.0:1996 年发布,后因 POODLE 漏洞被弃用

✅ TLS 的历史版本:

  • TLS 1.0:1999 年发布
  • TLS 1.1:2006 年发布
  • TLS 1.2:2008 年发布,目前广泛使用
  • TLS 1.3:2018 年发布,性能与安全性大幅提升

截至 2022 年,所有 SSL 版本均已废弃,TLS 1.0 和 1.1 也被逐步淘汰,仅推荐使用 TLS 1.2 和 TLS 1.3。

TLS vs SSL


4. SSL/TLS 握手流程解析

握手(Handshake)是建立安全通信的第一步,主要目的是:

  • 协商加密算法
  • 验证服务器身份
  • 生成共享密钥

✅ TLS 握手流程(简化版):

  1. ClientHello:客户端发送支持的 TLS 版本、加密套件、随机数等信息
  2. ServerHello:服务器选择 TLS 版本、加密套件,并发送自己的证书(含公钥)
  3. 客户端验证证书:检查证书是否合法、是否由受信任的 CA 签发
  4. 客户端生成 Pre-Master Secret:用服务器的公钥加密后发送
  5. 服务器解密 Pre-Master Secret:使用自己的私钥进行解密
  6. 双方生成会话密钥:基于 Pre-Master Secret 和之前交换的随机数生成共享密钥
  7. 客户端发送加密的 Finished 消息
  8. 服务器验证并回应加密的 Finished 消息

握手成功后,所有通信都使用对称加密算法和共享密钥进行加密传输。

⚠️ 握手失败:若在任何阶段验证失败(如证书无效、密钥不匹配),握手将中止,连接不会建立。

以下是 TLS 握手流程图示:

handshake

✅ 加密机制对比:

协议 数据完整性 加密方式 加密套件
SSL 使用 MD5 + SHA1 的 MAC 对称加密 支持 Fortezza
TLS 使用 HMAC(Hash-based MAC) TLS 1.3 使用 AEAD(认证加密) 不支持 Fortezza,仅支持现代算法

5. SSL 与 TLS 的核心差异总结

特性 SSL TLS
安全性 较弱,存在多个已知漏洞 更强,特别是 TLS 1.3
现状 所有版本均已废弃 TLS 1.2 和 TLS 1.3 仍在广泛使用
数据完整性 使用 MD5 + SHA1 的 MAC 使用 HMAC(更安全)
TLS 1.3 使用 AEAD
加密套件 支持 Fortezza 不支持 Fortezza,仅支持现代算法
握手流程 更复杂,效率较低 更简洁,TLS 1.3 支持 0-RTT
警告机制 警告消息较少 提供更多详细的警告信息
向后兼容 不支持 TLS 的新特性 支持 SSL 的部分警告消息
连接方式 需要显式切换到加密端口 直接在加密端口(如 443)建立连接

6. 总结

SSL 和 TLS 都是用于保障网络通信安全的协议,但 SSL 已被全面淘汰。TLS 作为其继任者,不仅在安全性、性能、扩展性方面都有显著提升,而且已经成为现代互联网通信的标准。

建议:在开发中应避免使用 SSL,优先选择 TLS 1.2 或 TLS 1.3。

常见踩坑点

  • 忘记更新服务器配置,仍在使用 TLS 1.0/1.1
  • 忽略证书链完整性,导致客户端验证失败
  • 使用不安全的加密套件(如 RC4、MD5)

如你所见,理解 SSL 与 TLS 的区别不仅有助于排查安全问题,也能帮助我们在实际开发中做出更安全、更高效的技术选型。


原始标题:Difference Between SSL & TLS