Answers:
简短答案:
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的书中读到的,该名称的选择方式使所有参与者都对它不满意,以至于不偏爱某个特定的公司:这是标准中相当普遍的做法那些对如何进行转换感兴趣的人可以阅读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提供的安全性不仅与您使用的版本有关,还与正确的配置有关:与具有弱(或匿名/空加密)密码套件。TLS的较新版本已明确禁止某些被认为太弱的密码套件。如果需要更多详细信息,可以关注Java 7 SunJSSE提供程序中的表(及其脚注)。
至少最好使用TLS 1.1,但是不幸的是,并非所有客户端都支持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之间进行选择。(Microsoft有SSL / TLS专家,但他们似乎没有参与Outlook UI。)
我认为造成这种混乱的原因是由于STARTTLS
模式。有些人似乎将其理解为STARTTLS
= TLS,但事实并非如此。输入的关键字STARTTLS
是“ START”,而不是TLS。之所以没有调用此名称STARTSSL
,STARTSSLORTLS
是因为这些扩展名是在IETF中指定的,而IETF仅使用其规范中使用的名称(假设TLS名称最终将是唯一的名称)。
如今,大多数HTTPS服务器都可以处理TLS,但是几年前,大多数人都将SSLv3用于HTTPS。HTTPS(严格来说,标准化为TLS上的HTTP)通常会在TCP连接上建立SSL / TLS连接,然后在SSL / TLS层上交换HTTP消息。在两者之间使用HTTP代理时,会有一个例外。在这种情况下,客户端将以明文方式连接到HTTP代理(通常在端口3128上),然后发出HTTP命令,并在响应成功的情况下通过发送以下内容来启动SSL / TLS握手:消息。就浏览器和代理之间的连接而言,所有这些都发生在同一端口上(显然不在代理和目标服务器之间:甚至不是同一台机器)。 SSLv3可以很好地工作,我们中很多人在使用代理的情况下都将它用于不支持TLS 1.0或更高版本的服务器。CONNECT
ClientHello
显然,这是不合规格的,但是在实践中,它经常起作用。严格来说,规范是关于使用STARTTLS命令后切换到TLS(不是SSL)的。实际上,SSL通常也可以工作(就像“基于TLS的HTTP”规范也包含使用SSL而不是TLS一样)。您可以自己尝试。假设您有一台支持STARTTLS的SMTP或IMAP服务器,请使用Thunderbird,进入首选项,高级选项,配置编辑器并关闭security.enable_tls
。许多服务器仍将接受连接,这仅仅是因为它们的实现将SSL / TLS层委派给SSL / TLS库,该库通常将能够以相同的方式处理SSL和TLS,除非配置为不这样做。正如OpenLDAP常见问题解答所述,“虽然该机制旨在与TLSv1一起使用,但如果需要,大多数实现将回退到SSLv3(和SSLv2)。“。如果不确定,请使用Wireshark之类的工具进行检查。
对于安全变体在不同端口上的协议,许多客户端可以至少使用TLS 1.0。显然,有许多浏览器和Web服务器都支持TLS 1.0(或更高版本)的HTTPS。同样,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 或使用显式SSL /通过使用额外的参数(例如AuthLDAPURL ldap://127.0.0.1/dc=example,dc=com?uid?one TLS
)进行TLS 。
一般来说,在URL方案(,...)中指定安全协议时,与期望客户端配置其他设置以启用SSL / TLS时相比https
,风险可能稍小ldaps
,因为它们可能会忘记。这是有争议的。一个实施方式与另一个实施方式的正确性也可能存在问题(例如,我认为Java LDAP客户端在使用时不支持主机名验证ldaps://
时应该,而应该使用ldap://
+ StartTLS 来支持)。
令人怀疑的是,如果可能的话与更多客户端兼容,那么在服务器支持的情况下同时提供这两种服务似乎并没有什么害处(您的服务器只会同时监听两个端口)。可以与任何一种模式一起使用的协议的许多服务器实现都将支持这两种模式。
客户的责任是不要让自己降级为纯文本连接。作为服务器管理员,从技术上讲,您无法采取任何措施来防止降级攻击(除了可能需要客户端证书之外)。客户端必须检查是否已启用SSL / TLS,无论是在连接时还是在STARTTLS
-like命令之后。就像浏览器不应该将自身从重定向https://
到一样http://
,支持该协议的客户端STARTTLS
应确保响应是肯定的,并且在继续进行操作之前启用了SSL / TLS连接。活跃的MITM攻击者可以轻松地降级任一连接。
例如,老版本的Thunderbird对此有一个不好的选择,即“使用TLS,如果可用”,这实际上暗示着,如果MITM攻击者能够更改服务器消息,从而不宣传对STARTTLS的支持,则客户端会自动将其降级为纯文本连接。(此不安全选项在Thunderbird中不再可用。)
TLS是比SSL更新的协议(但是AFAIK,它与SSL v3兼容)。通常,您只需要担心一个区别:
SSL协议通常具有一个单独的端口-例如,对于HTTP为80,对于HTTPS(HTTP / SSL)为443。当您连接到SSL端口时,整个会话将被加密。
TLS比SSL更新,并且不需要单独的端口-而是必须由客户端协商。例如,您可以在端口143上运行IMAP,并且如果邮件服务器和客户端都支持TLS,则客户端将发送STARTTLS
命令,然后才启用加密。这样,您就不需要单独的仅SSL端口,而与不使用SSL的应用程序保持兼容。
摘要:
SSL:稍旧。独立端口用于普通和加密连接。SSL端口上的所有流量始终被加密。
TLS:用于纯连接和加密连接的单个端口。仅在客户端发出STARTTLS
命令后才启用加密。
STARTTLS
某些协议可以在同一连接上切换到TLS 的事实与SSL和TLS之间没有区别。从技术上讲,您可以以相同的方式切换到SSLv3。
摘自印第安纳大学知识库文章:
SSL代表安全套接字层。Netscape最初开发此协议是为了私下传输信息,确保消息完整性并确保服务器身份。SSL主要通过对数据使用公钥/私钥加密来工作。它通常在Web浏览器上使用,但是SSL也可以用于电子邮件服务器或任何类型的客户端-服务器事务。例如,某些即时消息服务器使用SSL保护对话。
TLS代表传输层安全性。互联网工程任务组(IETF)创建了TLS作为SSL的后继者。它最常在电子邮件程序中用作设置,但是像SSL一样,TLS可以在任何客户端-服务器事务中起作用。
两种协议之间的差异很小,技术性也很强,但是它们是不同的标准。TLS使用更强大的加密算法,并且能够在不同的端口上工作。此外,TLS版本1.0不能与SSL版本3.0互操作。
TLS是SSL的较新版本。尽管在某些地方,这些词可能不只是协议,而是其他含义,所以请澄清您的问题。