这是技术深度探讨本概述提出了问题。
SSL 和 TLS 之间的协议差异是什么?
差异真的大到需要更改名称吗?(而不是将较新版本的 TLS 称为“SSLv4”或 SSLv5)
答案1
SSLv2 和 SSLv3 完全不同(并且现在都被认为是不安全的)。SSLv3 和 TLSv1.0 非常相似,但也有一些区别。
您可以将 TLSv1.0 视为 SSLv3.1(事实上,这就是交换记录中发生的事情)。比较TLSv1.0和TLSv1.1和TLSv1.2因为它们都是在 IETF 内编辑的,并且遵循或多或少相同的结构。SSLv3 由不同的机构 (Netscape) 编辑,这使得发现差异变得更加困难。
这里有一些差异,但我不确定我能否列出所有差异:
- 在
ClientHello
消息(客户端发送的第一条消息,用于启动握手)中,版本适用{3,0}
于 SSLv3、{3,1}
TLSv1.0 和{3,2}
TLSv1.1。 - 不同
ClientKeyExchange
。 - MAC/HMAC 不同(TLS 使用 HMAC 而 SSL 使用早期版本的 HMAC)。
- 密钥派生不同。
- 在 SSLv3 中,客户端应用程序数据可以在发送 SSL/TLS 消息后直接发送
Finished
。在 TLSv1 中,它必须等待服务器的Finished
消息。 - 密码套件列表有所不同(其中一些已从 重命名为
SSL_*
,TLS_*
保留相同的 ID 号)。 - 关于新重新谈判延期。
我强烈推荐Eric Rescorla 的书 -SSL 和 TLS:设计和构建安全系统, Addison-Wesley, 2001 ISBN 0-201-61598-3,如果您真的想要更多细节。我从这本书中学到了一些上面提到的要点。作者在解释一些 SSL/TLS 消息时偶尔会提到 SSLv3 和 TLS(在撰写本书时只有 v1.0)之间的差异,但您确实需要有关这些消息的背景解释才有机会理解(并且不适合从本书中复制/粘贴)。
答案2
我只是重复其他答案,但可能重点略有不同。
有一个安全套接字协议,它“归”Netscape 所有,被称为 SSL 版本 2。Netscape 发布了具有不同记录结构和安全性改进的新版本,称为 SSL 版本 3。协议内部的几个地方有一个二进制版本号字段。对于 SSL 版本 3,此字段设置为 0x03 0x00,即版本 3.0。然后 IETF 决定创建自己的标准。可能是因为 SSL 存在一些知识产权不确定性,包括“SSL”是否是 Netscape 商标,当 IETF 发布该协议的下一个版本时,他们给了它自己的名字:传输层安全协议,或 TLS 版本 1.0。记录格式和整体结构与 SSL v3 相同且一致。二进制版本号被改为 0x03 0x01,并且正如其他人所指出的那样,有一些小的加密更改。此后出现了 TLS 版本 1.1 和 1.2,其内部协议编号分别为 0x03 0x02 和 0x03 0x03。
忽略 SSLv2,它基本上只是一个名称的改变,伴随着随着人们对安全性和性能的了解越来越多而发生的正常协议微调。
答案3
从根本上讲,这只不过是协议新版本的一个名称变更。我认为这样做的主要原因是为了将其与 Netscape 在成为官方 IETF 标准跟踪协议后主要设计的旧非正式标准区分开来。
正如您之前问题的答案中所说,这并不意味着 SSLv3 和 TLSv1.0 兼容。引用自 RFC 2246:
该协议与 SSL 3.0 之间的差异并不大,但是差异仍然很大,以至于 TLS 1.0 和 SSL 3.0 无法互操作。
我想如果你真的想知道协议的具体区别,你必须阅读标准并进行自我比较。
答案4
差异:
- TLS 完全基于标准协议运行。TLS 连接开始时就像标准服务的未加密会话,但在某些时候它们会开始协商加密。这需要扩展标准协议以进行协商。
- 标准协议在 SSL 上运行。SSL 连接首先协商加密,然后在其上运行基本协议。