SSL 和 TLS 差异的功能影响

SSL 和 TLS 差异的功能影响

我知道 TLS 本质上是 SSL 的较新版本,并且它通常支持将连接从不安全转换为安全(通常通过 STARTTLS 命令)。

我不明白的是,为什么 TLS 对 IT 专业人士如此重要,为什么我会选择其中一个而不是另一个。TLS 真的只是一个较新的版本吗?如果是,它是一种兼容协议吗?

作为 IT 专业人员:我什么时候该使用哪个?我什么时候不该使用哪个?

答案1

简短回答:

SSL 是 TLS 的前身。SSL 是由 Netscape Communications 开发的专有协议,后来在 IETF 内标准化并更名为 TLS。简而言之,版本顺序如下:SSLv2、SSLv3、TLSv1.0、TLSv1.1 和 TLSv1.2。

与相对普遍的看法相反,这根本不是关于必须在使用 SSL 的不同端口上运行服务,并能够在与使用 TLS 的纯文本变体相同的端口上运行服务。SSL 和 TLS 都可以用于这两种方法。这是关于连接时 SSL/TLS(有时称为“隐式 SSL/TLS”)和在协议级别发出命令后 SSL/TLS STARTTLS(通常称为“显式 SSL/TLS”)之间的区别。关键词STARTTLS是“START”,而不是 TLS。这是一条应用程序协议级别的消息,表示如果在任何应用程序协议交换之前尚未启动 SSL/TLS,则需要切换到 SSL/TLS。

使用任一模式应该是等效的,只要客户端配置为以某种方式期望 SSL/TLS,就不会降级为纯文本连接。

较长的答案:

SSL 与 TLS

据我所知,SSLv1 从未离开过实验室。SSLv2SSLv3是 Netscape 开发的协议。SSLv2 一度被认为是不安全的,因为它容易受到降级攻击。SSLv3 在内部使用(3,0)作为其版本号(在ClientHello消息中)。

TLS 是 IETF 内部标准化的结果,是一种更开放的协议。(我想我在某处读到过,也许是在 E. Rescorla 的书中,这个名字的选择方式让所有参与者都同样不满意,以免偏袒某家公司:这在标准机构中相当常见。)那些对过渡如何进行感兴趣的人可以阅读SSL 对话列表常问问题;该文档有多个副本,但大多数链接netscape.com均已过时。

TLS 使用非常相似的消息(差异很大,导致协议不兼容,尽管可以协商一个通用版本)。 这TLS 1.01.11.2 ClientHello消息使用(3,1), (3,2),(3,3)来指示版本号,这清楚地表明了从 SSL 的延续。

有关协议差异的更多详细信息,请参阅这个答案

何时使用 which?何时不使用 which?

如果可能,请使用最高版本。实际上,作为服务提供商,这将要求您的用户拥有支持这些版本的客户端。像往常一样,这始终是一项风险评估工作(如果合适,最好有业务案例支持)。话虽如此,无论如何,还是要切断 SSLv2。

此外,请注意 SSL/TLS 提供的安全性不仅取决于您使用哪个版本,还取决于正确的配置:使用 SSLv3 和强密码套件肯定比使用 TLSv1.0 和弱密码套件(或匿名/空加密)要好。一些被认为太弱的密码套件已被较新版本的 TLS 明确禁止。Java 7 SunJSSE 提供程序中的表格(及其脚注)如果您想了解更多详细信息,可能会感兴趣。

最好至少使用 TLS 1.1,但不幸的是,并非所有客户端都支持它们(例如 Java 6)。当使用 1.1 以下的版本时,当然值得研究缓解 BEAST 漏洞

我一般会建议Eric Rescorla 的书 - SSL 和 TLS:设计和构建安全系统,Addison-Wesley,2001 年 ISBN 0-201-61598-3对于那些真正想要了解更多详细信息的人来说。

隐式与显式 SSL/TLS

有一种说法是,TLS 允许你使用相同的端口,而 SSL 则不能。这完全不是事实(我将离开港口统一不参与此讨论)。不幸的是,这种误解似乎已经通过以下事实传播给用户:某些应用程序(如 MS Outlook)有时会在其配置选项中提供 SSL 和 TLS 之间的选择,而实际上它们意味着隐式和显式 SSL/TLS 之间的选择。(微软有 SSL/TLS 专家,但他们似乎没有参与 Outlook UI。)

我认为这种混乱发生的原因是因为STARTTLS模式。有些人似乎将其理解为STARTTLS= TLS,但事实并非如此。关键词STARTTLS是“START”,而不是 TLS。为什么没有调用它,STARTSSL或者STARTSSLORTLS是因为这些扩展是在 IETF 中指定的,它只使用其规范中使用的名称(我猜假设 TLS 名称最终将是唯一的)。

  • 与纯文本服务在同一端口上的 SSL:HTTPS 代理。

如今,大多数 HTTPS 服务器都可以处理 TLS,但几年前,大多数人都在使用 SSLv3 来处理 HTTPS。HTTPS(严格来说,标准化为基于 TLS 的 HTTP) 通常在 TCP 连接时建立 SSL/TLS 连接,然后通过 SSL/TLS 层交换 HTTP 消息。如果中间使用了 HTTP 代理,则会出现例外情况。在这种情况下,客户端以明文形式连接到 HTTP 代理(通常在端口 3128 上),然后发出 HTTP 命令CONNECT,并且如果响应成功,则通过发送消息启动 SSL/TLS 握手ClientHello。就浏览器和代理之间的连接而言,所有这一切都发生在同一端口上(显然不是代理和目标服务器之间:它们甚至不是同一台机器)。这在 SSLv3 下工作得很好。我们中的许多人在代理后面的情况下都会对不支持至少 TLS 1.0 的服务器使用此方法。

  • 与纯文本服务位于同一端口的 SSL:电子邮件。

这个显然不符合规范,但在实践中,它通常有效。严格来说,规范谈到使用 STARTTLS 命令后切换到 TLS(而不是 SSL)。在实践中,SSL 通常也能起作用(就像“HTTP over TLS”规范也包括使用 SSL 而不是 TLS 一样)。你可以自己尝试一下。假设你有一个支持 STARTTLS 的 SMTP 或 IMAP 服务器,使用 Thunderbird,进入首选项、高级选项、配置编辑器并关闭security.enable_tls。许多服务器仍会接受连接,只是因为它们的实现将 SSL/TLS 层委托给 SSL/TLS 库,该库通常能够以相同的方式处理 SSL 和 TLS,除非配置为不这样做。由于OpenLDAP 常见问题解答说道,“虽然该机制设计用于 TLSv1,但大多数实现在必要时都会回退到 SSLv3(和 SSLv2)。“。如果您不确定,请使用 Wireshark 之类的工具进行检查。

  • 不同端口上的 TLS。

许多客户端可以将 TLS 1.0(至少)用于安全变体位于不同端口的协议。显然,有许多浏览器和 Web 服务器支持 HTTPS 的 TLS 1.0(或更高版本)。同样,SMTPS、IMAPS、POPS 和 LDAPS 也可以使用 TLS。它们不仅限于 SSL。

何时使用 which?何时不使用 which?

在显式和隐式 SSL/TLS 之间,其实并不重要。重要的是您的客户端知道会发生什么,并为此进行了适当的配置。更重要的是,它应该配置为在需要 SSL/TLS 连接时拒绝纯文本连接,无论是隐式连接还是显式连接

显式和隐式 SSL/TLS 之间的主要区别在于配置设置的清晰度。

例如,对于 LDAP,如果客户端是 Apache Httpd 服务器(mod_ldap——不幸的是,它的文档也错误地标记了 SSL 和 TLS 之间的区别),您可以通过使用 URL ldaps://(例如AuthLDAPURL ldaps://127.0.0.1/dc=example,dc=com?uid?one)来使用隐式 SSL/TLS,或者通过使用额外参数(例如AuthLDAPURL ldap://127.0.0.1/dc=example,dc=com?uid?one TLS)来使用显式 SSL/TLS。

一般来说,在 URL 方案中指定安全协议(httpsldaps、...)的风险可能比期望客户端配置其他设置以启用 SSL/TLS 的风险略小,因为他们可能会忘记。这是有争议的。两者的实现正确性也可能存在问题(例如,我认为 Java LDAP 客户端在使用 时不支持主机名验证,而ldaps://它应该支持,而使用 + StartTLS 则支持ldap://)。

如有疑问,并且为了尽可能兼容更多客户端,当服务器支持时,同时提供这两种服务似乎并没有什么坏处(您的服务器将同时监听两个端口)。许多可用于任一模式的协议的服务器实现都将支持这两种模式。

客户端有责任不让自己被降级为纯文本连接。作为服务器管理员,从技术上讲,您无法采取任何措施来防止降级攻击(除了可能要求客户端证书)。客户端必须检查 SSL/TLS 是否已启用,无论是在连接时还是在STARTTLS类似命令之后。就像浏览器不应让自己从 重定向到 一样https://http://支持协议的客户端STARTTLS 应确保响应是肯定的并且 SSL/TLS 连接已启用,然后再继续。否则,主动 MITM 攻击者可以轻松降级任一连接。

例如,旧版本的 Thunderbird 有一个糟糕的选项,称为“使用 TLS,如果可用”,这实质上意味着,如果 MITM 攻击者能够更改服务器消息,使其不宣传对 STARTTLS 的支持,则客户端将默默地让自己降级为纯文本连接。(此不安全选项在 Thunderbird 中不再可用。)

答案2

TLS 是一种比 SSL 更新的协议(但据我所知,它与 SSL v3 兼容)。通常,您只需要担心一个区别:

SSL 协议通常具有单独的端口 - 例如,HTTP 为 80,HTTPS(HTTP/SSL)为 443。当您连接到 SSL 端口时,整个会话都会被加密。

TLS 比 SSL 更新,它不需要单独的端口 - 而是由客户端协商。例如,您可以在端口 143 上运行 IMAP,如果邮件服务器和客户端都支持 TLS,则客户端将发送命令,STARTTLS然后才启用加密。这样,您不需要单独的仅 SSL 端口,同时保持与无 SSL 应用程序的兼容性。

概括:
SSL:稍旧。普通连接和加密连接的端口不同。SSL 端口上的所有流量始终是加密的。
TLS:单一端口用于普通连接和加密连接。仅当客户端发出命令后才启用加密STARTTLS

答案3

TLS 只是 SSL 的一个较新版本。如果有选择,请使用 TLS。更多内容,如往常一样,维基百科

答案4

TLS 是 SSL 的较新版本。不过,在某些地方,这些词可能不仅仅表示协议,所以请澄清您的问题。

相关内容