SSL、TLS 和 HTTPS 有什么区别?

信息安全 密码学 tls 协议
2021-08-18 21:21:32

我对这个领域的术语感到困惑。什么是 SSL、TLS 和 HTTPS?它们之间有什么区别?

3个回答

TLS 是 SSL 的新名称。即 SSL 协议达到 3.0 版本;TLS 1.0 是“SSL 3.1”。当前定义的 TLS 版本包括 TLS 1.1 和 1.2。每个新版本都增加了一些功能并修改了一些内部细节。我们有时会说“SSL/TLS”。

HTTPS 是 SSL/TLS 内的 HTTP。SSL (TLS) 为两台主机之间的任意二进制数据建立了一个安全的双向隧道。HTTP 是一种用于发送请求和接收应答的协议,每个请求和应答都包含详细的标头和(可能)一些内容。HTTP 旨在通过双向隧道运行任意二进制数据;当该隧道是 SSL/TLS 连接时,则整个称为“HTTPS”。

解释缩写词:

  • “SSL”是指“安全套接层”。这是由该协议的第一个版本的发明者创造的,Netscape(该公司后来被 AOL 收购)。
  • TLS ”表示“传输层安全性”。更改名称是为了避免与 Netscape 的任何法律问题,以便该协议可以“开放和免费”(并作为RFC发布)。它还暗示了该协议适用于任何双向字节流的想法,而不仅仅是基于 Internet 的套接字。
  • HTTPS ”应该表示“超文本传输​​协议安全”,这在语法上是不合理的。除了极度无聊的书呆子之外,没有人使用过这个翻译。“HTTPS”最好被认为是“带有 S 表示 SSL 的 HTTP”。其他协议的首字母缩写词也以相同的方式构建,例如 SMTPS、IMAPS、FTPS……所有这些都是通过在某些 SSL/TLS 中运行而“得到保护”的裸协议。

SSL 和 TLS 是旨在在两方之间提供隐私和数据完整性的协议(参见RFC 2246),旨在通过可靠的通信协议(通常是 TCP)运行。尽管 TLS 规范没有讨论套接字,但 SSL/TLS 的设计是为了让应用程序几乎可以像使用传统 TCP 套接字一样使用它们,例如SSLSocket在 Java 扩展中Socket(尽管在可用性方面存在细微差别)。

HTTPS 是基于 SSL/TLS 的 HTTP,首先建立 SSL/TLS 连接,然后通过此 SSL/TLS 连接交换正常的 HTTP 数据。为此,您使用 SSL 还是 TLS 取决于您的浏览器和服务器的配置(通常有一个选项允许 SSLv2、SSLv3 或 TLS 1.x)。HTTP 和 SSL/TLS 如何形成 HTTPS 的详细信息在RFC 2818中。

关于 SSL 和 TLS 之间的区别,您可能对我为 StackOverflow 和 ServerFault 上的这些类似问题写的这两个答案感兴趣:

您可以将 TLSv1.0 视为 SSLv3.1(实际上这就是交换记录中发生的情况)。将 TLSv1.0 与 TLSv1.1 和 TLSv1.2 进行比较更容易,因为它们都已在 IETF 中进行了编辑,并且或多或少遵循相同的结构。SSLv3 由不同的机构 (Netscape) 编辑,这使得发现差异变得更加困难。

以下是一些差异,但我怀疑我可以将它们全部列出:

  • 在 ClientHello 消息(客户端发送的第一条消息,用于启动握手)中,SSLv3 的版本为 {3,0},TLSv1.0 的版本为 {3,1},TLSv1.1 的版本为 {3,2}。
  • ClientKeyExchange 不同。
  • MAC/HMAC 不同(TLS 使用 HMAC,而 SSL 使用早期版本的 HMAC)。
  • 密钥派生不同。
  • 客户端可以在 SSLv3 中发送 SSL/TLS Finished 消息后直接发送应用程序数据。在 TLSv1 中,它必须等待服务器的 Finished 消息。
  • 密码套件列表不同(其中一些已从 SSL_* 重命名为 TLS_*,保持相同的 ID 号)。
  • 关于新的重新谈判延期也存在分歧。

通常,版本或 SSL/TLS 越高,它越安全,前提是您也正确选择了密码套件(更高版本的 TLS 还提供使用被认为更好的密码套件)。(SSLv2 被认为是不安全的。)此外,SSL 不属于 IETF 范围。例如,TLS 重新协商修复必须针对 SSLv3 进行改造(尽管无论如何都必须更新 SSL/TLS 堆栈)。

你可能也对这个答案感兴趣:

请注意,有些人反对 SSL 和 TLS 是“连接时的 SSL/TLS”和“升级到 TLS”(在使用应用程序协议进行一些对话之后)之间的区别。尽管其中一些答案的投票率相对较高,但这是不正确的。这个错误的传播是因为某些应用程序,如 Microsoft Outlook,为 SMTP/IMAP 配置提供了两个配置选项,称为“SSL”和“TLS”,而它们真正的意思是“连接时的 SSL/TLS”和“升级到 TLS”。(我认为 JavaMail 库也是如此。)

讨论 STARTTLS 的 RFC 是在 TLS 已经是官方 RFC 时编写的,这就是为什么他们只讨论将连接升级到 TLS。在实践中,如果您调整邮件客户端的配置以强制它使用 SSLv3 而不是 TLS(我通常不建议这样做),它仍然可能能够使用带有 SSLv3 连接的 STARTTLS 升级到 SSL/TLS,只需因为它更多的是关于操作模式,而不是 SSL/TLS 和/或密码套件的版本。

还有一种 HTTP 变体,其中对 SSL/TLS 的升级是在 HTTP 协议中完成的(类似于STARTTLSLDAP/SMTP)。这在RFC 2817中有描述。据我所知,这几乎从未使用过(而且它不是https://浏览器中使用的)。本 RFC 的主要相关部分是关于CONNECTHTTP 代理服务器的部分(HTTP 代理服务器使用它来中继 HTTPS 连接)。

SSL 与 TLS

SSL 和 TLS 这两个术语经常互换使用或相互结合使用 (TLS/SSL),但实际上其中一个是另一个的前身—— SSL 3.0 是 TLS 1.0 的基础,因此有时也被称为作为 SSL 3.1。

SSL 和 TLS 哪个更安全

在安全性方面,它们都被认为是同等安全的

主要区别在于,虽然 SSL 连接以安全开始并直接进行安全通信,但 TLS 连接首先以对服务器的不安全“hello”开始,并且仅在客户端和服务器之间的握手成功后才切换到安全通信。如果 TLS 握手由于任何原因失败,则永远不会创建连接。

(SSL 和 TLS 与 HTTP)

HTTP协议用于请求和接收数据和https,其中's'只不过是安全的SSL,它使http协议请求和接收活动加密,因此中间人攻击者无法轻松获取数据。

如果 SSL 和 TLS 都没有与 HTTP 一起使用

那么您与 Web 服务器的连接是未加密的,所有数据都将以明文形式发送,任何中间人攻击者都可以获取并查看该数据。

所以应该使用 SSL 或 TLS

好吧,两者都是一样的,但 TLS 更具可扩展性,希望将来能得到更多支持,而且 TLS 是向后兼容的。