我知道 TLS 本质上是 SSL 的更新版本,并且它通常支持将连接从不安全转换为安全(通常通过 STARTTLS 命令)。
我不明白的是为什么 TLS 对 IT 专业人员很重要,为什么我会选择一个而不是另一个。TLS 真的只是一个较新的版本,如果是,它是否是兼容的协议?
作为 IT 专业人员:我什么时候使用哪个?我什么时候不使用哪个?
Bru*_*uno 45
简短的回答:
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,以免降级为纯文本连接。
更长的答案:
据我所知,SSLv1 从未离开过实验室。SSLv2和SSLv3是由 Netscape 开发的协议。SSLv2 长期以来一直被认为是不安全的,因为它容易受到降级攻击。SSLv3 在内部(3,0)
用作其版本号(在ClientHello
消息中)。
TLS 是作为 IETF 内更加开放的协议标准化的结果。(我想我在某处读到过,也许是在 E. Rescorla 的书中,选择这个名字的方式是所有参与者都对它同样不满意,以免偏袒特定公司:这是标准中很常见的做法body.) 那些对如何进行转换感兴趣的人可以阅读SSL-Talk List FAQ;该文档有多个副本,但大多数(指向netscape.com
)的链接已过时。
TLS 使用非常相似的消息(足够不同以使得协议不兼容,尽管可以协商一个通用版本)。所述TLS 1.0,1.1和1.2 ClientHello
消息使用(3,1)
,(3,2)
,(3,3)
以指示版本号,这清楚地示出了从SSL的延续。
此答案中有更多有关协议差异的详细信息。
我什么时候使用哪个?我什么时候不使用哪个?
如果可能,请使用最高版本。实际上,作为服务提供商,这将要求您的用户拥有支持这些版本的客户端。像往常一样,它始终是一项风险评估活动(如果合适,最好有商业案例支持)。话虽如此,无论如何都要切断 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。
有一种说法是 TLS 允许您使用相同的端口,而 SSL 则不能。事实并非如此(我将在本次讨论中不考虑端口统一)。不幸的是,由于某些应用程序(如 MS Outlook)有时会在其配置选项中提供 SSL 和 TLS 之间的选择,而实际上它们实际上意味着在隐式和显式 SSL/TLS 之间进行选择,这一事实似乎已传播给用户。(微软有 SSL/TLS 专家,但他们似乎没有参与 Outlook UI。)
我认为发生这种混乱的原因是STARTTLS
模式。有些人似乎已经将其理解为STARTTLS
= TLS,但事实并非如此。中的关键字STARTTLS
是“START”,而不是 TLS。为什么不调用它,STARTSSL
或者STARTSSLORTLS
是因为这些扩展是在 IETF 中指定的,它只使用其规范中使用的名称(假设 TLS 名称最终将是唯一的名称,我猜)。
如今,大多数 HTTPS 服务器都可以处理 TLS,但几年前,大多数人都将 SSLv3 用于 HTTPS。HTTPS(严格来说,标准化为HTTP over TLS)通常在 TCP 连接上建立 SSL/TLS 连接,然后通过 SSL/TLS 层交换 HTTP 消息。在两者之间使用 HTTP 代理时有一个例外。在这种情况下,客户端以明文方式连接到 HTTP 代理(通常在端口 3128 上),然后发出CONNECT
HTTP 命令,如果响应成功,则通过发送ClientHello
信息。就浏览器和代理之间的连接而言,所有这些都发生在同一个端口上(显然不是在代理和目标服务器之间:它甚至不是同一台机器)。这适用于 SSLv3。我们中的许多人在代理背后的情况下会使用它来对抗至少不支持 TLS 1.0 的服务器。
这显然不符合规范,但在实践中,它经常有效。严格来说,规范讨论的是在使用 STARTTLS 命令后切换到 TLS(而不是 SSL)。在实践中,SSL 也经常起作用(就像“HTTP over TLS”规范也包含使用 SSL 而不是 TLS 一样)。你可以自己试试。假设您有一个支持 STARTTLS 的 SMTP 或 IMAP 服务器,请使用 Thunderbird,进入首选项、高级选项、配置编辑器并关闭security.enable_tls
. 许多服务器仍然会接受连接,仅仅是因为它们的实现将 SSL/TLS 层委托给 SSL/TLS 库,该库通常能够以相同的方式处理 SSL 和 TLS,除非配置为不这样做。正如OpenLDAP FAQ所说,“虽然该机制是为与 TLSv1 一起使用而设计的,但如果需要,大多数实现将回退到 SSLv3(和 SSLv2)。”。如果您不确定,请使用 Wireshark 之类的工具进行检查。
许多客户端可以(至少)将 TLS 1.0 用于安全变体位于不同端口的协议。显然,有许多浏览器和 Web 服务器支持 HTTPS 的 TLS 1.0(或更高版本)。同样,SMTPS、IMAPS、POPS 和 LDAPS 也可以使用 TLS。它们不仅限于 SSL。
我什么时候使用哪个?我什么时候不使用哪个?
在显式和隐式 SSL/TLS 之间,这并不重要。重要的是您的客户知道会发生什么,并进行了适当的配置。更重要的是,它应该被配置为在期待 SSL/TLS 连接时拒绝纯文本连接,无论是隐式还是显式。
显式和隐式 SSL/TLS 之间的主要区别在于配置设置的清晰度。
例如,对于 LDAP,如果客户端是 Apache Httpd 服务器(mod_ldap
不幸的是,它的文档也错误标记了 SSL 和 TLS 之间的区别),您可以通过使用ldaps://
URL(例如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
)。
通常来说,在 URL 方案 ( https
, ldaps
, ...) 中指定安全协议的风险可能比期望客户端配置附加设置以启用 SSL/TLS 的风险要小一些,因为他们可能会忘记。这是有争议的。一个与另一个的实现的正确性也可能存在问题(例如,我认为 Java LDAP 客户端在使用ldaps://
时不支持主机名验证,而它应该支持,而ldap://
+ StartTLS支持它)。
有疑问,为了尽可能与更多客户端兼容,在服务器支持时提供这两种服务似乎没有任何危害(您的服务器将同时侦听两个端口)。可用于任一模式的协议的许多服务器实现将同时支持这两种模式。
客户端有责任不让自己降级为纯文本连接。作为服务器管理员,您在技术上无法采取任何措施来防止降级攻击(除了可能需要客户端证书)。客户端必须检查 SSL/TLS 是否已启用,无论是在连接时还是在类似STARTTLS
命令之后。就像浏览器不应该让自己从 重定向https://
到 一样http://
,支持协议的客户端STARTTLS
应该确保响应是肯定的,并且在继续进行之前启用了 SSL/TLS 连接。否则,活跃的 MITM 攻击者可以轻松地降级任一连接。
例如,旧版本的 Thunderbird 有一个糟糕的选项,称为“使用 TLS,如果可用”,这实质上意味着如果 MITM 攻击者能够改变服务器消息,以便它不宣传对 STARTTLS 的支持,客户端会默默地让自己降级为纯文本连接。(这个不安全的选项在 Thunderbird 中不再可用。)
use*_*686 13
TLS 是比 SSL 更新的协议(但 AFAIK,它与 SSL v3 兼容)。通常,您只需要担心一个区别:
SSL'ed 协议通常有一个单独的端口 - 例如,80 用于 HTTP,443 用于 HTTPS (HTTP/SSL)。当您连接到 SSL 端口时,整个会话都会被加密。
TLS 比 SSL 新,它不需要单独的端口 - 而是必须由客户端协商。例如,您可以在端口 143 上运行 IMAP,如果邮件服务器和客户端都支持 TLS,则客户端将发送一个STARTTLS
命令,然后才启用加密。这样您就不需要单独的仅 SSL 端口,同时与无 SSL 应用程序兼容。
总结:
SSL:稍微旧一些。用于普通和加密连接的单独端口。SSL 端口上的所有流量始终是加密的。
TLS:用于普通和加密连接的单一端口。只有在客户端发出STARTTLS
命令后才启用加密。
来自印第安纳大学知识库文章:
SSL 代表安全套接字层。Netscape 最初开发此协议是为了私下传输信息,确保消息完整性,并保证服务器身份。SSL 主要通过对数据使用公钥/私钥加密来工作。它通常用于 Web 浏览器,但 SSL 也可用于电子邮件服务器或任何类型的客户端-服务器事务。例如,一些即时消息服务器使用 SSL 来保护对话。
TLS 代表传输层安全。Internet 工程任务组 (IETF) 创建了 TLS 作为 SSL 的继承者。它最常用作电子邮件程序中的设置,但与 SSL 一样,TLS 可以在任何客户端 - 服务器事务中发挥作用。
两种协议之间的差异非常小,也非常技术性,但它们是不同的标准。TLS 使用更强的加密算法,并且能够在不同的端口上工作。此外,TLS 1.0 版不与 SSL 3.0 版互操作。