SSL和TLS差异的function影响

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

我不明白的是为什么TLS对于IT专业人员来说很重要,为什么select我会select一个呢。 TLS真的只是一个更新的版本,如果是的话,它是一个兼容的协议?

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

简短的回答:

SSL是TLS的先驱。 SSL是由Netscape Communications开发的专有协议,后来在IETF中进行了标准化,并更名为TLS。 简而言之,版本依次为:SSLv2,SSLv3,TLSv1.0,TLSv1.1和TLSv1.2。

与一个相对广泛的观点相反,这完全不是关于在不同的端口上使用SSL运行服务,而是使用TLS在同一个端口上作为纯文本变体。 SSL和TLS都可以用于这两种方法。 这是在协议级别发出命令(通常是STARTTLS (有时称为“显式SSL / TLS”)之后,SSL / TLS在连接(有时称为“隐式SSL / TLS”)和SSL / TLS之间的区别。 )。 STARTTLS的关键字是“开始”,而不是TLS。 这是一个消息,在应用程序协议级别,表明需要切换到SSL / TLS,如果在任何应用程序协议交换之前尚未启动。

使用任一模式应该是等同的,只要客户端被configuration为期望SSL / TLS这样或那样,以免被降级为纯文本连接。

较长的答案:

SSL vs TLS

据我所知,SSLv1从未离开实验室。 SSLv2和SSLv3是由Netscape开发的协议。 一段时间以来,SSLv2被认为是不安全的,因为它很容易降级攻击。 SSLv3内部使用(3,0)作为其版本号(在ClientHello消息内)。

TLS是IETF内部作为更开放协议的标准化的结果。 (我想我已经在某个地方看过了,也许在E. Rescorla的书中,这个名字的select方式让所有参与者都同样不满意,从而不喜欢某个特定的公司:这在标准中是很常见的做法)有兴趣的人可以阅读SSL-Talk List FAQ ; 这个文档有多个副本,但是大多数的链接(到netscape.com )都是过时的。

TLS使用非常相似的消息(足够不同以使协议不兼容, 尽pipe可以协商通用版本 )。 TLS 1.0,1.1和1.2 ClientHello消息使用(3,1)(3,2)(3,3)来指示版本号,这清楚地显示了SSL的延续。

在这个答案中有更多关于协议差异的细节。

我什么时候用哪个? 我什么时候不使用哪个?

尽可能使用最高版本。 实际上,作为一个服务提供者,这将要求你的用户拥有支持这些版本的客户端。 像往常一样,这总是一个风险评估工作(如果合适的话,最好由一个商业案例支持)。 这就是说,反正切断SSLv2。

另外,请注意,SSL / TLS提供的安全性不仅仅是你使用的版本,它也是关于正确的configuration:当然最好使用带有强密码套件的SSLv3,而不是TLSv1.0带有弱密钥(或者匿名/空encryption)密码套件。 一些认为太弱的密码套件已经被更新版本的TLS明确禁止。 如果您想了解更多的细节,Java 7 SunJSSE提供程序(及其脚注)中的表格可能很有用。

至less使用TLS 1.1是可取的,但不是所有的客户端都支持它们(例如Java 6)。 当使用1.1以下的版本时, 减lessBEAST漏洞肯定值得一试。

我通常会向真正希望了解更多细节的人推荐Eric Rescorla的书“SSL和TLS:devise和构build安全系统”,Addison-Wesley,2001 ISBN 0-201-61598-3 。

隐式与显式SSL / TLS

有一个神话,说TLS允许你使用相同的端口,而SSL不能。 这是不正确的(我将离开港口统一这个讨论)。 不幸的是,这个神话似乎已经传播给用户了,事实上,有些像MS Outlook这样的应用程序有时候会在它们的configuration选项中提供SSL和TLS之间的select,因为它们实际上意味着隐式和显式SSL / TLS之间的select。 (微软有SSL / TLS专家,但是他们似乎并没有参与到Outlook界面中。)

我认为这种混乱发生的原因是因为STARTTLS模式。 有些人似乎已经将此理解为STARTTLS = TLS,但事实并非如此。 STARTTLS的关键字是“开始”,而不是TLS。 为什么不称为STARTSSLSTARTSSLORTLS是因为这些扩展是在IETF中指定的,IETF只使用其规范中使用的名称(假设TLS名称最终将是唯一的地位,我猜)。

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

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

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

这显然超出了规格,但在实践中,它经常起作用。 严格地说,在使用STARTTLS命令之后,规范讨论了切换到TLS(不是SSL)。 在实践中,SSL也经常起作用(就像“HTTP over TLS”规范也包含使用SSL而不是TLS一样)。 你可以自己尝试。 假设您有支持STARTTLS的SMTP或IMAP服务器,请使用Thunderbird,进入首选项,高级选项,configuration编辑器并closuressecurity.enable_tls 。 许多服务器仍然会接受连接,只是因为他们的实现将SSL / TLS层委托给一个SSL / TLS库,它通常能够以相同的方式处理SSL和TLS,除非被configuration为不这样做。 正如OpenLDAP常见问题所解释的那样,“ 虽然这个机制是为使用TLSv1而devise的,但是如果有必要的话,大部分的实现将回退到SSLv3(和SSLv2)。 ” 如果您不确定,请使用Wireshark等工具。

  • TLS在一个独特的端口。

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

我什么时候用哪个? 我什么时候不使用哪个?

显式和隐式SSL / TLS之间,它并不重要。 重要的是,你的客户知道该期待什么,并被适当地configuration来做到这一点。 更重要的是,它应该被configuration为在期望SSL / TLS连接时拒绝纯文本连接,无论是隐式还是显式连接

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

例如,对于LDAP,如果客户端是一个Apache Httpd服务器( mod_ldap – 它的文档也不好意思标签为SSL和TLS之间的区别),你可以通过使用ldaps:// URL来使用隐含的SSL / TLS(例如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 )。

在指定URLscheme( httpsldaps ,…)中的安全协议时,通常可能会比期望客户端configuration其他设置以启用SSL / TLS时的风险略低一些,因为它们可能会忘记。 这是有争议的。 在实现一个和另一个时也可能存在一些问题(例如,我认为Java LDAP客户端在使用ldaps://时不支持主机名validationldaps://当它应该,而它支持ldap:// + StartTLS)。

如果可能的话,为了与更多的客户端兼容,如果服务器支持这两种服务(服务器将同时在两个端口上监听)似乎没有任何损害。 许多服务器实现协议,可以使用任何模式将支持两者。

客户端的责任不是让自己降级到纯文本的连接。 作为服务器pipe理员,在技术上你没有什么能够阻止降级攻击(除了需要客户端证书)。 客户端必须检查SSL / TLS是否启用,无论是连接还是类似STARTTLS的命令。 就像浏览器不应该让自己从https://redirect到http:// ,支持STARTTLS的协议的客户端应该确保响应是正的,并且在继续之前启用了SSL / TLS连接任何进一步。 一个活跃的MITM攻击者可以很容易地降级连接。

例如, 老版本的Thunderbird对于这个名为“Use TLS,如果可用”的选项有一个不好的select ,这基本上意味着如果一个MITM攻击者能够改变服务器消息,以便它不公布支持STARTTLS,客户端会默默地让自己降级到明文连接。 (这个不安全的选项在Thunderbird中不再可用。)

TLS是比SSL更新的协议(但AFAIK,它与SSL v3兼容)。 通常,你只需要担心一个区别:

SSL'ed协议通常有一个单独的端口 – 例如,对于HTTP为80,对于HTTPS(HTTP / SSL)为443。 当您连接到SSL端口时,整个会话将被encryption。

TLS比SSL更新,并且不需要单独的端口 – 相反,它必须由客户端协商。例如,您可以在端口143上运行IMAP,并且如果邮件服务器和客户端都支持TLS,则客户端将发送一个STARTTLS命令,然后才启用encryption。 这样您就不需要单独的仅限SSL的端口,同时与无SSL应用程序保持兼容。

概要:
SSL :稍微老一点。 单独的端口用于简单和encryption的连接。 SSL端口上的所有stream量始终是encryption的。
TLS :用于普通和encryption连接的单一端口。 encryption仅在客户端发出STARTTLS命令后才能启用。

TLS只是一个较新版本的SSL。 当你有select时使用TLS。 更多,像往常一样, 维基百科 。

从印第安纳大学知识库文章:

SSL代表安全套接字层。 Netscape最初开发这个协议是为了私下传输信息,保证消息的完整性,保证服务器的身份。 SSL主要通过对数据使用公钥/私钥encryption来工作。 它通常用于Web浏览器,但SSL也可以用于电子邮件服务器或任何types的客户端 – 服务器事务。 例如,一些即时消息服务器使用SSL来保护对话。

TLS代表传输层安全。 互联网工程任务组(IETF)创build了TLS作为SSL的后继者。 它最常用作电子邮件程序中的设置,但与SSL一样,TLS可以在任何客户端 – 服务器事务中起作用。

两个协议之间的差异是非常小的和非常技术性的,但是它们是不同的标准。 TLS使用更强大的encryptionalgorithm,并能够在不同的端口上工作。 此外,TLS 1.0版不能与SSL 3.0版互操作。

TLS是SSL的较新版本。 虽然在某些地方这些词可能意味着除了协议之外的其他东西,所以请澄清你的问题。