使用Wireshark解剖TLS

来源:http://blog.catchpoint.com/2017/05/12/dissecting-tls-using-wireshark/

RFC 2246 (TLS version 1.0)中定义的传输层安全协议的主要目标是“在两个通信应用程序之间提供隐私和数据完整性”。“TLS协议通过加密数据来确保这一点,因此任何第三方都无法拦截通信;它还对对等点进行身份验证,以验证它们的身份。通过在两个对等点之间提供一个安全的通信通道,TLS协议保护了消息的完整性,并确保消息没有被篡改。

一、历史

TLS和SSL可以互换使用。从SSL协议(SSL 3.0)发展而来的TLS不再被认为是安全的;贵宾犬攻击等漏洞已经证明了这一点。TLS经过了两个迭代,RFC 4346 (TLS 1.1)和RFC 5246 (TLS 1.2),最新的更新TLS 1.3是一个工作草案。

二、架构

TLS位于应用程序和传输层之间。它的设计工作在可靠的传输协议,如TCP(但已适应UDP,以及),并分为两个子层:

1、TCP记录协议层-这是位于TCP层之上的较低层,负责:

(1)将要传输的消息分割成可管理的块;

(2)加密/解密散列数据;

(3)压缩/解压输出/输入数据;

(4)应用消息验证码(MAC),一个散列来维护数据完整性;

(5)将数据从上层应用层传输到下层传输层,反之亦然。

2、上层由以下子协议组成:

(1)告警:此子协议定义告警级别并提供告警的描述。它用于将发生的任何错误情况通知对等方。

(2)更改密码规范:它定义了加密策略中的更改。由客户机和服务器传输的更改密码规范消息定义了重新协商的密码规范和密钥,这些密钥将用于以后交换的所有消息。

(3)应用程序数据:此协议确保以安全的方式对消息进行分段、压缩、加密和传输。

(4)握手:要在安全通道上通信,两个对等方必须就该会话的加密密钥和加密算法达成一致。TLS协议描述了对对等点进行身份验证并使用定义的参数建立安全连接的步骤。包括设置会话标识符、TLS协议版本、协商密码套件、对等点的证书认证和对等点之间的密钥交换的整个序列称为TLS握手。TLS握手的步骤如下:


3、使用Wireshark分析TLS握手

下图是使用Wireshark(一种流行的网络协议分析工具)捕获的客户机和服务器之间TLS握手的快照。


让我们分析每一步。

(1)初始客户端到服务器通信

Client Hello

通常,TLS握手中的第一条消息是客户机hello消息,客户机发送该消息来启动与服务器的会话。

消息包含:

a、版本:客户端希望用于与服务器通信的TLS协议版本号。这是客户端支持的最高版本。

b、客户端随机:一个32字节的伪随机数,用于计算主密钥(用于创建加密密钥)。

c、会话标识符:客户端用来标识会话的唯一数字。

d、密码套件:客户机支持的密码套件列表,按客户机的首选项排序。密码组由密钥交换算法、批量加密算法、MAC算法和伪随机函数组成。单一密码套件(上图中提到的28个套件之一)的例子如下:

其中,

TLS = 协议版本

RSA =确定对等认证的密钥交换算法

3 des_ede_cbc =批量加密算法用于数据加密

SHA-1 =消息身份验证代码,这是一个加密散列。

e、压缩方法:包含按客户端首选项排序的压缩算法列表。这是可选的。

(2)服务器对客户机的响应

服务器用多条消息响应客户端:

Server Hello

服务器Hello包含以下信息:

a、服务器版本:服务器支持的最高TLS协议版本,客户端也支持。

b、服务器随机:32字节的伪随机数,用于生成主密钥。

c、会话标识符:标识与客户端对应连接的会话的惟一编号。

如果客户机hello消息中的会话ID不是空的,服务器将在会话缓存中找到匹配的会话ID。如果找到匹配项,并且服务器希望使用相同的会话状态,它将返回客户机发送的相同ID。如果服务器不想恢复相同的会话,则生成一个新ID。服务器还可以发送一个空ID,指示会话无法恢复。

d、密码套件:服务器和客户端都支持的最强大的密码套件。如果不支持密码套件,则会创建握手失败警报。

e、压缩方法:服务器和客户端一致同意的压缩算法。这是可选的。

Server Certificate

服务器向客户机发送一个X.509证书列表,以便对自己进行身份验证。服务器的证书包含其公钥。此证书身份验证要么由受对等点、操作系统和浏览器信任的第三方(证书颁发机构)执行,其中包含已知证书颁发机构的列表,要么通过手动导入用户信任的证书。

Certificate Status

此消息验证服务器的X.509数字证书是否被撤销,通过与指定的OCSP(在线证书状态协议)服务器联系来确定。OCSP响应的日期和签名包含证书状态。客户端可以请求服务器发送包含OCSP响应的“证书状态”消息。这种方法称为OCSP装订。该过程可以在受限的网络上节省带宽,因为它可以防止OCSP服务器被过多的客户机请求淹没。

为了表示它需要一个证书状态消息,客户机在客户机Hello请求中包含一个类型为“status_request”的扩展。

Server Key Exchange

该消息是可选的,当服务器证书中的公钥不适合密钥交换时,或者如果密码套件设置了需要临时密钥的限制,则发送该消息。客户端稍后将使用此密钥加密客户端密钥交换。

Client Certificate Request

这是可选的,当服务器要对客户端进行身份验证时发送,例如,在提供对私有信息的访问之前,服务器需要确认客户端的身份。该消息包含所需的证书类型和可接受的证书颁发机构列表。

Server Hello Done

此消息指示服务器已经完成,正在等待客户机的响应。

(3)客户机对服务器的响应

Client Key Exchange

这个消息包含:

a、客户机的协议版本,服务器将验证它是否与原始客户机hello消息匹配。

b、Pre-master 秘钥—由客户机生成并使用服务器公钥加密的随机数。这连同客户机和服务器随机数一起用于创建主机密。如果服务器能够使用私钥解密消息,并且能够在本地创建主机密,那么客户端就可以确信服务器已经对自己进行了身份验证。

Change Cipher Spec

此消息通知服务器,所有未来的消息都将使用刚才协商的算法和密钥进行加密。

Finished (Encrypted Handshake)

完成的消息比较复杂,因为它是以前交换的所有消息的散列,以及一个标签(“client Finished”)。此消息表明,已为客户机完成了TLS协商。

注意:Wireshark将完成的消息显示为加密握手,因为与之前的消息不同,此消息是用刚刚协商好的密钥/算法加密的。

(4)服务器对客户机的响应

Change Cipher Spec

服务器通知客户机,它将使用现有的算法和密钥对消息进行加密。现在,记录层将其状态更改为使用对称密钥加密。

Finished

与客户端已完成的消息类似,但包含不同的标签(“服务器已完成”)。一旦客户机成功解密并验证了消息,服务器就成功地通过了身份验证。

(5)应用程序数据流

一旦整个TLS握手成功完成,并且对等点经过验证,对等点上的应用程序就可以开始彼此通信了。

本文简要说明了TLS协议的工作原理,并使用Wireshark等功能强大的工具分析了TLS握手。需要注意的一件重要事情是,应用程序不应该依赖TLS在对等点之间创建最强的安全连接,因为黑客可能会使对等点下降到最不安全的连接。此外,使用TSL/SSL可能会影响性能(在这里解释)。因此,对协议的清晰理解将有助于评估其优点和弱点。

我们将在接下来的博客中探讨TLS的性能和可用性挑战。

你可能感兴趣的:(使用Wireshark解剖TLS)