一、实验目的
1.本次实验主要目的是分析访问网站时捕捉TLS包,并且对TLS协议进行分析。
2.分析连接建立的完整过程,如:TCP三次握手、SSL安全连接,使用TLS协议连接、协商过程,加密传送的状态、TCP挥手等。
3.查看TLS报文的完整字段,并且分析字段的意义。
二、实验准备
1.系统:win10 软件:wiresharke
2.了解基本的TLS协议,以及其工作流程
三、实验原理
1.协议介绍
SSL/TLS是保护计算机网络通讯安全的一类加密协议,它们在传输层上给原先非安全的应用层协议提供加密保护,如非安全的HTTP协议即可被SSL/TLS保护形成安全的HTTPS协议。
SSL (Secure Socket Layer)安全套接字层协议:
SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。
分为SSL记录协议和SSL握手协议。
TLS(Transport Layer Security)传输层安全协议:
用于两个应用程序之间提供保密性和数据完整性。
分为TLS记录协议和TLS握手协议。 SSL、TLS协议其实是有所差异的,TLS协议是继承了SSL协议并写入RFC,标准化后的产物。因此,通常使用SSL来指代SSL协议和TLS协议。
区别:
SSL是Netscape开发的专门用户保护Web通讯的,目前版本为3.0。
TLS 1.0是IETF(工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。两者差别极小,可以理解为SSL 3.1,它是写入了RFC的
2. SSL/TLS在TCP/IP协议栈的位置
SSL/TLS协议在传输层上封装了应用层的数据,因此可以在不需要修改应用层协议的前提下给不安全的应用层协议提供一定的安全保障。
3. SSL/TLS协议栈
4. SSL/TLS协议运作流程
握手原理
(1)为了在握手协议解决降级攻击的问题,TLS协议规定:client发送ClientHello消息,server必须回复ServerHello消息,否则就是fatal error,当成连接失败处理。ClientHello和ServerHello消息用于建立client和server之间的安全增强能力,ClientHello和ServerHello消息建立如下属性:
Protocol Version
Session ID
Cipher Suite
Compression Method
(2)另外,产生并交换两个random值 ClientHello.random 和 ServerHello.random
(3)密钥协商使用四条: server的Certificate,ServerKeyExchange,client的Certificate,ClientKeyExchange 。TLS规定以后如果要新增密钥协商方法,可以订制这4条消息的数据格式,并且指定这4条消息的使用方法。密钥协商得出的共享密钥必须足够长,当前定义的密钥协商算法生成的密钥长度必须大于46字节。
四、实验步骤
1.选择https://www.baidu.com/网站,首先通过ping语句获得百度ip地址61.135.169.125。
2.wireshark捕包,使用ip.src==61.135.169.125&&ssl过滤包。在浏览器中访问https://www.baidu.com/,结果如下图所示:
其中截取了很多次包,但是都没有捕捉到ClientHello的包,后来发现不止是这一个包没有看到而是所有关于Client的包都没有补到,接着找到一个ServerHello Done的包跟踪其SSL流,终于观察到了完整的关于Client的包,如下图所示:
五、实验分析
-
客户端发送ClientHello
客户端发起握手协商操作,它将发送一个ClientHello消息给服务器,消息中明确了其所支持的SSL/TLS版本、Cipher suite加密算法组合等,可以让服务器选择,并提供了一个客户端随机数,用于以后生成会话密钥使用。 -
服务器返回ServerHello
服务器将返回一个ServerHello消息,该消息包含了服务器选择的协议版本、加密算法,以及服务器随机数、会话ID等内容。其中,服务器选择的协议版本应小于等于客户端ClientHello中的协议版本。
本次实验中服务器确认使用TLS 1.2版本的协议,并选择TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256加密算法组合。 -
服务器发送Certificate
服务器发送ServerHello消息,选择好协议版本和加密算法组合后,将发送Certificate消息,该消息包含了服务器的证书等信息,可通过证书链认证该证书的真实性。根据选择的加密算法组合的不同,服务器证书中的公钥也可被用于加密后面握手过程中生成的Premaster secret。 -
服务器发送ServerKeyExchange
服务器发送ServerKeyExchange消息,消息中包含了服务器这边的EC Diffie-Hellman算法相关参数。此消息一般只在选择使用DHE 和DH_anon等加密算法组合时才会由服务器发出。 -
服务器发送ServerHelloDone
服务器发送ServerHelloDone消息,告知客户端服务器这边握手相关的消息发送完毕。 -
客户端发送ClientKeyExchange
-
客户端发送ChangeCipherSpec
-
客户端发送Finished
客户端发送ClientKeyExchange消息,消息中包含客户端这边的EC Diffie-Hellman算法相关参数,然后服务器和客户端都可根据接收到的对方参数和自身参数运算出Premaster secret,为生成会话密钥做准备。客户端向服务器发送ChangeCipherSpec消息,通知服务器此消息以后客户端会以加密方式发送数据。客户端使用之前握手过程中获得的服务器随机数、客户端随机数、Premaster secret计算生成会话密钥,然后使用该会话密钥加密之前所有收发握手消息的Hash和MAC值,发送给服务器,服务器将相同的会话密钥(使用相同方法生成)解密此消息,校验其中的Hash和MAC值。 -
服务器发送ChangeCipherSpec
服务器发送ChangeCipherSpec消息,通知客户端此消息以后服务器会以加密方式发送数据。 -
服务器发送Finished
服务器使用会话密钥加密(生成方式与客户端相同,使用握手过程中获得的服务器随机数、客户端随机数、Premaster secret计算生成)之前所有收发握手消息的Hash和MAC值,发送给客户端去校验。
若客户端服务器都校验成功,握手阶段完成,双方将按照SSL记录协议的规范使用协商生成的会话密钥加密发送数据。