一文详解TLS与SSL的区别

经常看到有一些产品写支持SSL/TLSSSLTLS太多的地方相同,所以一直以为是差不多的东东,认真研究下,发现很多不同,特此记录如下,分享给那些同样一直没有太分清楚的小伙伴们。

首先简单介绍一下两个协议:

SSLSecureSocket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。

TLS(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。

SSLNetscape开发的专门用户保护Web通讯的,目前版本为3.0。最新版本的TLS 1.0IETF(工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。两者差别极小,可以理解为SSL 3.1,它是写入了RFC的。

从历史来看,TLSSSL首先是继承关系。那么,下面简单介绍一下核心基础SSL协议。

SSL协议简介

SSL (SecureSocket Layer)Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取。目前一般通用之规格为40 bit之安全标准,美国则已推出128 bit之更高安全标准,但限制出境。只要3.0版本以上之I.E.Netscape浏览器即可支持SSLSSL3.0已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。

 

SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL RecordProtocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL HandshakeProtocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

 

SSL协议提供的服务主要有:

  1.      认证用户和服务器,确保数据发送到正确的客户机和服务器;

  2.      加密数据以防止数据中途被窃取;

  3.      维护数据的完整性,确保数据在传输过程中不被改变。

 

SSL通过握手过程在clientserver之间协商会话參数,并建立会话。会话包括的主要參数有会话ID、对方的证书、加密套件(密钥交换算法、数据加密算法和MAC算法等)以及主密钥(master secret)。通过SSL会话传输的数据,都将採用该会话的主密钥和加密套件进行加密、计算MAC等处理。

下面以最简单的仅验证serverSSL握手过程为例说明一下SSL的工作原理。

 

仅仅验证serverSSL握手过程

握手过程描述

  1.      SSLclient通过Client Hello消息将它支持的SSL版本号、加密算法、密钥交换算法、MAC算法等信息发送给SSLserver

  2.      SSLserver确定本次通信採用的SSL版本号和加密套件,并通过Server Hello消息通知给SSLclient。假设SSLserver同意SSLclient在以后的通信中重用本次会话,则SSLserver会为本次会话分配会话ID。并通过Server Hello消息发送给SSLclient

  3.      SSLserver将携带自己公钥信息的数字证书通过Certificate消息发送给SSLclient

  4.      SSLserver发送Server HelloDone消息。通知SSLclient版本号和加密套件协商结束。開始进行密钥交换。

  5.      SSLclient验证SSLserver的证书合法后,利用证书中的公钥加密SSLclient随机生成的premaster secret,并通过Client Key Exchange消息发送给SSLserver

  6.       SSLclient发送Change CipherSpec消息,通知SSLserver兴许报文将採用协商好的密钥和加密套件进行加密和MAC计算。

  7.       SSLclient计算已交互的握手消息(除Change CipherSpec消息外全部已交互的消息)的Hash值,利用协商好的密钥和加密套件处理Hash值(计算并加入MAC值、加密等),并通过Finished消息发送给SSLserverSSLserver利用相同的方法计算已交互的握手消息的Hash值,并与Finished消息的解密结果比較,假设二者相同,且MAC值验证成功,则证明密钥和加密套件协商成功。

  8.       相同地。SSLserver发送Change Cipher Spec消息,通知SSLclient兴许报文将採用协商好的密钥和加密套件进行加密和MAC计算。

  9.       SSLserver计算已交互的握手消息的Hash值,利用协商好的密钥和加密套件处理Hash值(计算并加入MAC值、加密等),并通过Finished消息发送给SSLclientSSLclient利用相同的方法计算已交互的握手消息的Hash值,并与Finished消息的解密结果比較,假设二者相同。且MAC值验证成功。则证明密钥和加密套件协商成功。

SSLclient接收到SSLserver发送的Finished消息后。假设解密成功,则能够推断SSLserver是数字证书的拥有者,即SSLserver身份验证成功,由于仅仅有拥有私钥的SSLserver才干从Client KeyExchange消息中解密得到premaster secret,从而间接地实现了SSLclientSSLserver的身份验证。

 

TLS协议简介

TLS协议采用主从式架构模型,用于在两个应用程序间透过网络创建起安全的连线,防止在交换数据时受到窃听及篡改。

TLS协议的优势是与高层的应用层协议(如HTTPFTPTelnet等)无耦合。应用层协议能透明地运行在TLS协议之上,由TLS协议进行创建加密通道需要的协商和认证。应用层协议传送的数据在通过TLS协议时都会被加密,从而保证通信的私密性。

TLS协议是可选的,必须配置客户端和服务器才能使用。主要有两种方式实现这一目标:一个是使用统一的TLS协议通信端口(例如:用于HTTPS的端口443);另一个是客户端请求服务器连接到TLS时使用特定的协议机制(例如:邮件、新闻协议和STARTTLS)。一旦客户端和服务器都同意使用TLS协议,他们通过使用一个握手过程协商出一个有状态的连接以传输数据。通过握手,客户端和服务器协商各种参数用于创建安全连接:

  1. 当客户端连接到支持TLS协议的服务器要求创建安全连接并列出了受支持的密码组合(加密密码算法和加密哈希函数),握手开始。
  2. 服务器从该列表中决定加密和散列函数,并通知客户端。
  3. 服务器发回其数字证书,此证书通常包含服务器的名称、受信任的证书颁发机构(CA)和服务器的公钥。
  4. 客户端确认其颁发的证书的有效性。
  5. 为了生成会话密钥用于安全连接,客户端使用服务器的公钥加密随机生成的密钥,并将其发送到服务器,只有服务器才能使用自己的私钥解密。
  6. 利用随机数,双方生成用于加密和解密的对称密钥。这就是TLS协议的握手,握手完毕后的连接是安全的,直到连接(被)关闭。如果上述任何一个步骤失败,TLS握手过程就会失败,并且断开所有的连接。

TLS的发展历史

定义

协议

年份

SSL  1.0

未知

SSL  2.0

1995

SSL  3.0

1996

TLS  1.0

1999

TLS  1.1

2006

TLS  1.2

2008

TLS  1.3

2018

 

IETFSSL标准化,即RFC 2246,并将其称为TLSTransport LayerSecurity)。从技术上讲,TLS 1.0SSL 3.0的差异非常微小。但正如RFC所述“thedifferences between this protocol and SSL 3.0 are not dramatic, but they aresignificant enough to preclude interoperability between TLS 1.0 and SSL3.0”(本协议和SSL 3.0之间的差异并不是显著,却足以排除TLS 1.0SSL 3.0之间的互操作性)。TLS 1.0包括可以降级到SSL 3.0的实现,这削弱了连接的安全性。

随着后续技术的不断进步,TLS在安全性方面做了大量的改进。

 

TLS与SSL的差异

  1.       版本号:TLS记录格式与SSL记录格式相同,但版本号的值不同,TLS的版本1.0使用的版本号为SSLv3.1

  2.       报文鉴别码:SSLv3.0TLSMAC算法及MAC计算的范围不同。TLS使用了RFC-2104定义的HMAC算法。SSLv3.0使用了相似的算法,两者差别在于SSLv3.0中,填充字节与密钥之间采用的是连接运算,而HMAC算法采用的是异或运算。但是两者的安全程度是相同的。

  3.       伪随机函数:TLS使用了称为PRF的伪随机函数来将密钥扩展成数据块,是更安全的方式。

  4.       报警代码:TLS支持几乎所有的SSLv3.0报警代码,而且TLS还补充定义了很多报警代码,如解密失败(decryption_failed)、记录溢出(record_overflow)、未知CAunknown_ca)、拒绝访问(access_denied)等。

  5.       密文族和客户证书:SSLv3.0TLS存在少量差别,即TLS不支持Fortezza密钥交换、加密算法和客户证书。

  6.       certificate_verifyfinished消息:SSLv3.0TLS在用certificate_verifyfinished消息计算MD5SHA-1散列码时,计算的输入有少许差别,但安全性相当。

  7.       加密计算:TLSSSLv3.0在计算主密值(master secret)时采用的方式不同。

  8.         填充:用户数据加密之前需要增加的填充字节。在SSL中,填充后的数据长度要达到密文块长度的最小整数倍。而在TLS中,填充后的数据长度可以是密文块长度的任意整数倍(但填充的最大长度为255字节),这种方式可以防止基于对报文长度进行分析的攻击。

TLS的主要增强内容

TLS的主要目标是使SSL更安全,并使协议的规范更精确和完善。TLS SSL v3.0 的基础上,提供了以下增强内容:

  1.      更安全的MAC算法

  2.       更严密的警报

  3.       灰色区域规范的更明确的定义

TLS对于安全性的改进

  1.       对于消息认证使用密钥散列法:TLS 使用消息认证代码的密钥散列法HMAC),当记录在开放的网络(如因特网)上传送时,该代码确保记录不会被变更。SSLv3.0还提供键控消息认证,但HMACSSLv3.0使用的(消息认证代码)MAC 功能更安全。

  2.       增强的伪随机功能(PRF):PRF生成密钥数据。在TLS中,HMAC定义PRFPRF使用两种散列算法保证其安全性。如果任一算法暴露了,只要第二种算法未暴露,则数据仍然是安全的。

  3.       改进的已完成消息验证:TLSSSLv3.0都对两个端点提供已完成的消息,该消息认证交换的消息没有被变更。然而,TLS将此已完成消息基于PRFHMAC值之上,这也比SSLv3.0更安全。

  4.       一致证书处理:与SSLv3.0不同,TLS试图指定必须在TLS之间实现交换的证书类型。

  5.       特定警报消息:TLS提供更多的特定和附加警报,以指示任一会话端点检测到的问题。TLS还对何时应该发送某些警报进行记录。

未经允许不得转载:大自然的搬运工 » 一文详解TLS与SSL的区别

赞 (1)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址