传输层安全性(TLS)是最重要且使用最广泛的安全协议之一。它可以保护很大一部分在线传输的数据。最突出 用于保护通过HTTPS在Web浏览器和网站之间传输的数据的安全, 但它也可以用于保护电子邮件和其他协议的安全.
TLS非常有价值,因为它可以确保连接中的另一方是他们所说的身份,显示数据是否保留其初始完整性,并通过加密提供机密性.
TLS使用各种不同的算法和方案来实现这些目的。它看起来似乎很复杂,但是本文将一次涵盖一个方面,以使您深入了解TLS如何工作以保护连接.
TLS的作用?
在线发送信息时,我们遇到了三个主要的安全问题:
- 我们怎么知道与我们交流的人是否真的是他们所说的人?
- 我们怎么知道自发送数据以来数据没有被篡改?
- 我们如何防止其他人看到和访问数据?
这些问题至关重要,尤其是在我们发送敏感或有价值的信息时。 TLS使用多种加密技术来解决这三个问题。在一起,它们使协议能够 验证连接中的另一方,检查数据的完整性并提供加密保护.
让我们简化事情,并假装您正试图与居住在全国各地的朋友来回传递信息。如果信息敏感,您将非常担心上面提到的三个主要问题.
您不仅可以寄出一封信并寄予最美好的希望,尤其是如果您怀疑自己的通信将成为攻击者的目标时。取而代之的是,您需要一个系统来验证收件人是否合法,可以检查邮件是否已被更改以及防止邮件被他人窥视的方法。.
TLS使用许多不同的流程来满足这些要求。它始于所谓的 TLS握手, 这是进行身份验证和建立密钥的地方.
回到我们的信件类比,TLS的身份验证部分就像通过需要身份验证的快递员发送信件一样。快递员寄出信件后,他们会将该人的ID与他们的脸相比较,并验证收件人是否是正确的人.
密钥建立阶段有点像您的信件中包含您打算在将来的通信中使用的密码的一半。您会要求您的收件人拿出号码的后半部分,并在回信中将其发送给您.
一旦快递员验证了身份并确定了个人识别号,您将拥有安全发送信息所需的一切。实际上,这些阶段要复杂得多,但是我们稍后再讲.
TLS与应用程序协议安全地交换信息. 继续进行类比,通过TLS安全传输数据就像写一条消息并将其放入信封中。您可以在印章上写下您的签名,这样,如果信件被篡改,收件人就可以通过撕开的签名来分辨(这实际上是用数学方法完成的,但是再次,我们将在以后进行深入介绍).
然后,您可以将字母放入带有密码锁的小金属盒中,并将密码设置为与收件人共同建立的密码。您将通过快递员将包裹寄送,以便在交付包裹时检查身份。您的收件人将以相同的方式答复,以后的任何通信都将遵循相同的步骤.
TLS以相对类似的方式解决了我们所有的三个问题. 快递员将对接收者进行身份验证,并确保将盒子运送给预定的人。上锁的框用作一种加密形式,可防止除您的伴侣之外的任何人访问字母。签名的信封让您知道邮件是否已被篡改.
这是TLS所做的非常粗略的近似。事实上, TLS在客户端和服务器之间发生, 而不是两个互相发送邮件的人。类推只是为了让您直观地了解正在发生的事情及其背后的原因。在以下各节中,我们将详细介绍实际发生的情况.
TLS与SSL
在阅读有关TLS的内容时,您经常会提到SSL甚至是TLS / SSL。安全套接字层(SSL)是TLS的旧版本,但是业内许多人仍然在旧名称下引用TLS。本文通篇使用TLS一词,但需要注意的是,这些名称通常可以互换使用。您可以在我们的指南中阅读有关SSL的更多信息.
TLS的历史
一切始于保护传输层的需求。如上所述,TLS的前身是SSL。 SSL的第一个版本是由Netscape在90年代开发的,该公司建立了一种早期的Web浏览器.
SSL 1.0从未发布,因为它包含严重漏洞. Netscape Navigator 1.1于1995年推出了2.0版, 但是它仍然包含许多严重的缺陷。 SSL 3.0是经过重新设计的版本,于1996年问世,解决了许多安全问题.
1996年, IETF在RFC 6101中发布了SSL 3.0草案. IETF成立了一个工作组以标准化SSL,并于1999年将结果发布为TLS 1.0。它记录在RFC 2246中,并且标准化包括对原始协议的一些更改以及名称的更改。这些修改是Netscape,Microsoft和IETF工作组之间进行谈判的结果.
IETF在2006年发布了RFC 4346,其中记录了TLS 1.1。此版本包含新的安全性规定和许多其他更新。版本1.2仅在两年后的2008年发布。它包括对经过身份验证的加密密码的支持,对哈希函数使用方式的许多更改以及许多其他改进.
直到TLS 1.3定义的2023年,下一版本才发布. 它具有许多更改,包括强制执行的前向保密性,取消了对较弱算法的支持等等。.
TLS 1.0和1.1现在将在2023年弃用,但1.2版已被广泛使用。 1.3版开始获得越来越多的采用.
TLS:技术细节
TLS由许多不同的元素组成。基本部分是记录协议,底层协议负责其他所有内容的总体结构.
该图显示了TLS堆栈。 Jeffreytedjosukmono的TLS协议栈。根据CC0许可.
记录协议包含五个单独的子协议,每个子协议的格式为 记录:
- 握手 –该协议用于设置安全连接的参数.
- 应用 –应用协议在握手过程之后开始,是双方之间安全传输数据的地方.
- 警报 –连接中的任何一方使用警报协议来通知对方是否存在任何错误,稳定性问题或潜在的危害.
- 更改密码规范 –客户端或服务器使用此协议来修改加密参数。它非常简单,因此我们将不在本文中深入介绍.
- 心跳 –这是一个TLS扩展,可让连接的一侧知道其对等方是否仍处于活动状态,并防止防火墙关闭不活动的连接。它不是TLS的核心部分,因此我们将在本指南中跳过.
这些子协议中的每一个都在不同的阶段中用于传达不同的信息。最重要的是握手和应用程序协议,因为它们负责建立连接,然后安全地传输数据.
TLS握手协议
在此处以安全的方式建立连接。如果您不熟悉某些概念,可能看起来很复杂,但是如果您需要参考这些概念,则稍后将在本文中介绍每个概念。.
TLS握手有三种基本类型: 基本TLS握手, 的 客户端认证的TLS握手 和 简短的握手.
基本的TLS握手
该图显示了TLS握手过程。 FleshGrinder的完整TLS 1.2握手。根据CC0许可.
在这种类型的握手中,仅对服务器进行身份验证,而对客户端不进行身份验证。它从协商阶段开始,在此阶段,客户发送 客户您好 信息。它包含客户端支持的TLS的最高版本,可能的密码套件,是否支持压缩的指示,随机数和一些其他信息
客户端问候消息与 服务器你好 信息。此响应包含服务器从客户端列表中选择的会话ID,协议版本,密码套件和压缩(如果正在使用)。它还包括一个不同的随机数.
这取决于选择的密码套件,但是服务器通常会通过发送一个 证书 验证消息。这将验证其身份并包含其公共密钥.
如果使用了临时Diffie-Hellman或匿名Diffie-Hellman密钥交换,则在此之后是一个 服务器密钥交换 信息。其他密钥交换方法跳过了这一部分。服务器完成协商后,将发送一个 服务器已完成 信息.
现在轮到客户了。根据所选的密码套件,它将发送一个 客户密钥交换 信息。它可以包含一个公共密钥或一个premaster机密,并使用服务器的公共密钥加密.
然后,双方使用随机数和premaster机密来提出一个主机密。密钥是从主密钥派生的,然后用于对通信进行身份验证和加密.
然后,客户端发送一个 更改密码规范 信息。这告诉服务器,以下消息现在将通过身份验证和加密(尽管有时可能不使用加密).
然后,客户通过 已完成 消息,该消息经过加密,还包含用于身份验证的消息身份验证代码(MAC)。服务器解密此消息并验证MAC。如果这些过程中的任何一个失败,则应拒绝连接.
现在该由服务器发送 更改密码规范 消息,以及 已完成 与上述内容相同的消息。然后,客户端还将尝试解密并验证内容。如果这一切都成功完成,则握手完成。至此,建立了应用协议。然后可以按照与数据交换相同的方式安全地交换数据。 已完成 来自上方的消息,带有身份验证和可选加密.
客户端认证的TLS握手
此握手非常类似于基本的TLS握手,但客户端也已通过身份验证。主要区别在于服务器发送其 证书 消息,它还会发送一个 证书申请 消息,要求提供客户的证书。服务器完成后,客户端会将其证书发送到 证书 信息.
然后,客户端发送其 客户密钥交换 消息,就像基本的TLS握手一样。接下来是 证书验证 消息,其中包括客户的数字签名。由于它是根据客户的私钥计算得出的,因此服务器可以使用作为客户数字证书一部分发送的公钥来验证签名。剩下的 客户端认证的TLS握手 遵循与基本TLS握手相同的原则.
缩写TLS握手
一旦握手已经完成,TLS允许通过使用简短的握手来减少很多过程。这些握手使用会话ID将新连接链接到先前的参数.
简化的握手允许双方使用之前协商的相同设置来恢复安全连接。因为通常包含在握手过程中的某些加密算法会占用大量计算资源,所以可以节省时间并简化连接.
该过程始于 客户您好 信息。就像之前的“客户端问候”消息一样,但其中也包含 会话ID 从较早的连接。如果服务器知道会话ID,则将其包括在 服务器你好 信息。如果无法识别会话ID,它将返回一个不同的数字,而必须进行完整的TLS握手.
如果服务器能够识别会话ID,则 证书 和 密钥交换 可以跳过步骤。的 更改密码规范 和 已完成 邮件的发送方式与上面显示的基本TLS握手相同。一旦客户端解密了消息并验证了MAC,就可以通过安全的TLS连接发送数据.
还有一个TLS扩展,它允许使用会话票据而不是会话ID恢复连接。服务器对有关会话的数据进行加密并将其发送给客户端。当客户端要恢复此连接时,它将会话票证发送到服务器,服务器将其解密以显示参数.
会话票证使用频率较低,因为它们需要扩展。尽管如此,它们在某些情况下还是有优势的,因为服务器不必存储任何东西.
拆封TLS握手
握手的三个最重要的步骤包括:
- 选择参数,
- 它进行身份验证,并且
- 密钥已建立.
让我们更详细地介绍它们,以便您了解实际情况.
参数
在握手开始时,客户端和服务器通过相互协商来协商连接的参数。首先是将使用哪个版本的TLS。这是双方都支持的最高版本,通常是最安全的版本.
各方还决定他们将使用哪种密钥交换算法来建立主密钥。在这一阶段,哈希函数,加密算法和压缩方法也已达成共识。当我们讨论以下内容时,将详细介绍这些内容。 应用协议 本文稍后.
认证:数字证书
身份验证是确保通信渠道安全的关键部分,因为它使双方都知道他们实际上是在与自己认为的人交谈,而不是冒充者。在TLS和许多其他安全机制中,这是通过所谓的数字证书来实现的.
数字证书是显示个人或实体与其公钥之间的链接的电子文档。. 此链接由证书颁发机构(CA)验证,该证书颁发机构是一个受信任的组织,该组织将验证两者之间是否确实存在关联,然后使用其自身的信誉来授予对证书的信任.
不同的证书级别代表不同程度的信任。要知道的重要一点是,如果客户端或服务器具有可靠且有效的证书,则可以合理地假设公钥是合法的,并且您未与攻击者打交道。.
公钥注意事项
公钥加密(也称为非对称加密)是加密的重要组成部分,在TLS的不同方面得到了广泛的使用。对于那些不熟悉它的工作原理的人,这是一个快速入门。.
简短的解释是 公钥加密使用密钥对进行加密和解密,而不仅仅是单个密钥. 发件人使用其预期收件人的公共密钥来加密数据。加密后,只能使用收件人匹配的私钥对其进行解密。当然,公钥可以公开共享,而私钥必须保密.
公钥加密使各方可以安全地共享信息,即使他们从未见过或有机会事先交换过密钥。它是通过质数的一些独特属性来实现的。您可以在我们有关公钥加密的文章中找到更多信息.
建立主秘密
正如我们在上面讨论基本TLS握手过程时所看到的,在一方(或双方)使用其公共证书证明其身份之后, 下一步是建立主密钥,也称为共享密钥. 主密钥是派生用于加密和检查双方之间传输的数据完整性的密钥的基础.
TLS握手可以使用多种不同的机制来安全地共享此秘密。其中包括RSA,Diffie-Hellman密钥交换的几种不同类型,PSK,Kerberos等。每种方法都有其自身的优点和缺点,例如提供前向保密性,但是这些差异不在本文的讨论范围之内。.
确切的过程将取决于选择了哪种密钥交换方法,但是该过程遵循第8章中提到的粗略步骤。 基本的TLS握手 部分.
预先密码是根据先前选择的任何密钥交换方法得出的。客户端使用服务器的公钥加密premaster机密,以安全地通过连接发送.
然后,客户端和服务器都使用premaster机密和在通信开始时发送的随机数来提出master机密。一旦计算出主密钥,就可以使用它来提出四个或六个单独的密钥。这些是:
- 客户端写MAC密钥 –服务器使用此密钥来检查客户端发送的数据的完整性。.
- 服务器写入MAC密钥 –客户端使用服务器写入MAC密钥检查服务器发送的数据的完整性.
- 客户端写加密密钥 –服务器使用此密钥来加密客户端发送的数据.
- 服务器写入加密密钥 –客户端使用此密钥来加密服务器发送的数据.
- 客户端写IV密钥 –服务器以AEAD密码使用客户端写入IV密钥,但使用其他密钥交换算法时则不使用.
- 服务器写入IV密钥 –同样,客户端在AEAD密码中使用此密钥,但在使用其他密钥交换算法时则不使用.
建立主密钥是TLS握手的重要组成部分,因为它使连接的两面都能安全地导出可用于身份验证和加密的密钥。作为预防措施,两个过程都使用单独的钥匙.
派生认证密钥和加密密钥后,它们将用于保护两者 已完成 消息以及通过应用协议发送的记录.
应用协议
通过TLS握手建立安全连接后,将使用应用程序协议来保护传输的数据。可以对其进行配置,以使用各种算法来适应不同的情况.
认证算法
可以使用许多不同的算法来检查消息的完整性。这些包括:
- HMAC-MD5
- HMAC SHA1
- HMAC SHA2
- AEAD
为了证明所发送数据的完整性,发送方通过哈希函数运行信息以返回唯一的字符串。这些特殊的公式在收到相同的输入时将始终返回相同的结果.
发件人使用其私钥对该数据签名以形成所谓的数字签名。然后,数字签名将附加到邮件中并发送给收件人。检查数据是否保留其完整性,是否被篡改, 收件人使用发件人的公钥解密哈希. 然后,他们对发送的数据使用相同的哈希函数。收件人然后比较两个值.
如果它们相同,则表示自发送者签名以来,数据尚未更改。如果它们不同,则可能是数据已被篡改,或存在其他错误。.
这是如何使用散列函数显示数据完整性的简短版本。如果您想更深入地了解,请查看我们有关加密,加盐和哈希的文章.
加密算法
TLS使用对称密钥加密来为其传输的数据提供机密性。与公共密钥加密不同,加密和解密过程仅使用一个密钥。使用算法对数据进行加密后,它将显示为一堆密文。只要使用了适当的算法,攻击者就无法访问实际数据,即使他们截获了该数据也是如此。.
TLS可以使用许多不同的算法,例如Camellia或ARIA,尽管最受欢迎的是AES.
压缩
压缩是对数据进行编码以使其占用更少空间的过程。如果连接双方都决定使用TLS,则TLS支持压缩。尽管具有此功能,但通常建议避免使用TLS压缩数据,特别是因为CRIME攻击(请参阅 TLS安全问题 发现下面的部分)能够利用压缩数据进行会话劫持.
填充
填充会在加密之前在邮件中添加额外的数据。这是一种常见的加密过程,用于帮助防止加密数据结构中的提示泄露其真实含义。 TLS通常在加密记录之前将PKCS#7填充应用于记录.
警报协议
如果连接或安全性变得不稳定,受到威胁或发生了严重错误, 警报协议允许发送方通知另一方. 这些消息有两种类型,即警告或致命。警告消息表明会话不稳定,并允许收件人确定是否应继续会话.
一条致命消息告诉收件人连接已被破坏或发生了严重错误。发送者发送消息后应关闭连接。警报协议还包含有关导致特定连接问题的原因的信息。这可能包括解密失败,未知的证书颁发机构,非法参数等等。.
TLS & OSI模型
OSI模型是一种概念化和标准化我们如何看待不同通信系统和协议的方式。请务必注意,这只是一个模型,我们的某些协议不符合该模型.
OSI具有七个单独的层,分别显示协议的运行级别。, TLS不适合任何一个. 它流经另一个传输协议(如TCP),这意味着它位于第四层传输层之上。它最显着地用作传输层,但是由于它进行握手,因此这意味着它是表示层或应用程序层的一部分.
如您所见,TLS完全不符合OSI模型。这并不意味着TLS损坏或错误,如果有的话,仅表明OSI模型存在缺陷,无法说明我们所有的通信协议.
TLS使用
TLS用于确保我们大部分在线通信的安全。通常,它是通过像 传输控制协议(TCP), 但也可以在数据报拥塞控制协议(DCCP)和用户数据报协议(UDP)中使用.
它可以保护HTTP,SMTP,FTP,XMPP和NNTP等协议, 以及其他。最常见的应用是安全的超文本传输协议(HTTPS),它可以保护Web浏览器和网站之间的连接。您可以知道何时使用HTTPS保护您的在线连接,因为在浏览器顶部URL的左侧会出现一个绿色的小锁图标.
TLS也可以用于构建VPN, 例如在OpenConnect和OpenVPN中。它使用其加密和身份验证功能来形成可以将主机和网络相互连接的隧道。像OpenVPN这样的基于TLS的VPN技术优于像IPsec这样的替代方法,因为不知道OpenVPN会遇到任何严重的安全问题。这些VPN也可以更容易配置.
它的另一个用途是 通过STARTTLS保护电子邮件. 实施TLS后,它将阻止攻击者在邮件服务器之间传播时访问邮件。.
TLS安全问题
像大多数协议一样,TLS过去对它的各种实现都有许多漏洞和理论攻击。尽管如此, 出于实际目的,最新版本被认为是安全的.
过去的版本(例如SSL 2.0和3.0(以及TLS 1.0,与SSL 3.0基本相同))具有许多安全漏洞,但是由于它们是较旧且过时的协议,因此我们不再赘述。您应该使用TLS 1.2和1.3来保护连接安全.
较新版本的TLS进行了大量升级,使其比SSL的漏洞少。尽管如此,该协议仍然存在以下安全问题:
重新协商攻击
TLS的功能之一是,它允许客户端和服务器对重新协商其现有连接的参数。在2009年,发现攻击者可以利用此漏洞,以便攻击者可以注入流量,使其看起来像来自客户端。服务器将接受该请求为合法请求,这意味着攻击者可能会操纵外发消息.
这种攻击无法使攻击者看到响应,但仍有可能造成破坏。目前提议的标准是可以防止这些攻击的扩展.
兽
研究人员于2011年首次发现了针对SSL / TLS的浏览器攻击(BEAST)攻击。它利用了TLS中的密码块链接漏洞,可用于解密消息。此攻击仅影响TLS 1.0,后者是该协议的旧版本和较弱版本。尽管直到2023年才会弃用,但用户应改用1.2和1.3版本.
定时攻击
这些副信道攻击会分析算法运行所需的时间,然后使用该信息进行反向工作并找出密钥。 2013年,在检查消息身份验证代码(MAC)时,发现了Lucky Thirteen攻击可以同时利用定时攻击和padding oracle攻击。尽管对于大多数TLS用户而言,这种攻击都没有危险,但可以使用此攻击来破坏TLS算法。.
犯罪 & 破坏
CRIME攻击针对多种协议起作用。压缩数据后,可以从身份验证Cookie中获取内容。此信息可用于会话劫持。尽管它影响许多协议,但是使用HTTP压缩时,这种攻击尤其令人担忧,因为没有有效的缓解策略.
2013年,发现通过超文本自适应压缩(BREACH)漏洞进行的浏览器侦察和渗透以类似的方式影响HTTP压缩。此版本的攻击可以恢复使用TLS加密的电子邮件地址和其他有价值的数据。可以通过禁用HTTP压缩或使用跨站点请求伪造(CSRF)保护之类的技术来缓解BREACH攻击.
降级攻击
这些攻击会诱骗服务器使用较早版本和不太安全的TLS版本。攻击者可以使用这些技术来协商使用不太安全的密钥交换和密码。 Logjam攻击就是一个很好的例子,因为它可能使易受攻击的服务器使用512位的Diffie-Hellman,该功能较弱。然后,攻击者可以破坏此密钥交换机制并提取密钥,从而允许他们完全访问会话.
伤心欲绝
Heartbleed是一个安全漏洞,于2012年意外引入OpenSSL密码库, 但直到2014年才公布。由于这是TLS的一种常用实现,因此对全球造成了严重破坏.
TLS心跳扩展的一名开发人员添加了一个缓冲区读取漏洞,该漏洞使一些额外的数据可以暴露出来。在检查代码时未发现该错误,这导致了许多重大攻击.
由于OpenSSL库的实施如此广泛,因此减轻该问题的国际成本最终变得非常昂贵。服务器管理员必须安装新的补丁程序,并重新生成在存在漏洞的两年期间可能已被破坏的证书和密钥对。.
淹
具有过时和弱化的电子加密(DROWN)攻击的解密RSA于2016年宣布,它利用了服务器对SSL 2.0的支持。它对仍然支持SSL 2.0的服务器以及与支持SSL 2.0的另一台服务器共享同一公钥证书的服务器使用选择的密文攻击.
攻击宣布后,可能会以大约18,000美元的初始安装成本启动,每次单独攻击大约400美元。 DROWN攻击成功后,它将获取会话密钥.
不共享服务器证书可以缓解攻击. OpenSSL小组还发布了一些补丁程序,这些补丁程序删除了对较早的协议和密码的支持,但仅当服务器的证书未与其他支持SSL 2.0的服务器共享时,这些补丁程序才起作用.
邪恶的PAC
该攻击于2016年发现。它利用了Web代理自动发现协议(WPAD)中的弱点。当用户尝试通过TLS加密连接访问网站时,该漏洞会使URL可见。由于有时会将网址以身份验证的形式发送给用户,因此Unholy PAC攻击使攻击者有可能接管用户的帐户.
TLS安全吗?
尽管看起来有很多安全问题,但现实情况是,其中大多数问题很小,可以缓解,也可以缓解。随着技术的进步,漏洞的发现和新攻击的发展,TLS将继续存在更多的安全问题。尽管如此,在目前和可预见的将来,TLS仍将是我们用来保护在线世界的主要和最可靠的工具之一.
网络安全业务技术 由TheDigitalArtist根据 CC0