一、实验目的

1.访问一个https://....的网站,捕TLS包并分析报文序列。

2.分析连接建立的完整过程,如:TCP三次握手、SSL安全连接,使用TLS协议连接、协商过程,加密传送的状态、TCP挥手等。

3.分析包中handshake握手、协商过程,说明完成了什么功能。

二、实验准备

1.笔记本电脑一台,安装wireshark软件。

2.实验参考了几篇csdn博客:https://www.cnblogs.com/Anker/p/6082966.html;http://m.blog.csdn.net/liangyihuai/article/details/53098482;http://m.blog.csdn.net/ppdyhappy/article/details/68061238

三、实验原理

1.基本概念

(1)SSL(Secure Socket Layer,安全套接字层)

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

(2)TLS(Transport Layer Security,传输层安全协议)

用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。

(3)TLS是在SSL的基础上标准化的产物,目前SSL3.0与TLS1.0保持一致,二者是并列关系。SSL/TLS位于传输层和应用层之间,应用层数据不再直接传递给传输层,而是传递给TLS层,TLS层对从应用层收到的数据进行加密,并增加自己的TLS头。

2.TLS设计目标

TLS的设计目标是构建一个安全传输层(Transport Layer Security ),在基于连接的传输层(如tcp)上提供:

(1)保密性,message privacy (保密通过加密encryption实现,所有信息都加密传输,第三方无法窃听 )

(2)完整性,message integrity( 通过MAC校验机制,一旦被篡改,通信双方会立刻发现 )

(3)认证, mutual authentication (双方认证,双方都可以配备证书,防止身份被冒充 )

(4)互操作、通用性 ( 根据公开的rfc,任何符合rfc的软件实现都可以互操作,不受限于任何专利技术)

(5)可扩展性 ( 通过扩展机制 tls_ext可以添加功能,有大量的新功能,都是通过扩展添加的)

(6)高效率 (通过session cache,恰当部署cache之后,tls的效率很高)

3.TLS发展历史

1995: SSL 2.0, 由Netscape提出,这个版本由于设计缺陷,并不安全,很快被发现有严重漏洞,已经废弃。

1996: SSL 3.0. 写成RFC,开始流行。目前(2015年)已经不安全,必须禁用。

1999: TLS 1.0. 互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版。

2006: TLS 1.1. 作为 RFC 4346 发布。主要fix了CBC模式相关的如BEAST攻击等漏洞。

2008: TLS 1.2. 作为RFC 5246 发布 。增进安全性。目前(2015年)应该主要部署的版本。

2015之后: TLS 1.3,还在制订中,支持0-rtt,大幅增进安全性,砍掉了aead之外的加密方式。

由于SSL的2个版本都已经退出历史舞台了,所以本文后面只用TLS这个名字。 一般所说的SSL就是TLS。

4.握手原理

(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字节。

(4)原理类似下图(实验步骤中会详细介绍)

四、实验步骤

(一)wireshark捕包

1.选择https://www.baidu.com/网站,首先通过ping语句获得百度ip地址61.135.169.125。

2.wireshark捕包,使用ip.src==61.135.169.125&&ssl过滤包。在浏览器中访问https://www.baidu.com/,结果如下图所示:

(二)握手过程

首先我们了解一下建立握手连接的目的:(1)身份的验证,client与server确认对方是它相连接的,而不是第三方冒充的,通过证书实现;(2)client与server交换session key,用于连接后数据的传输加密和hash校验。

其次分析简单的SSL握手连接过程(仅Server端交换证书给client):

1.Client发送ClientHello,指定版本,随机数random,所有支持的密码套件(CipherSuites)。

(1)ContentType指示SSL通信处于握手阶段。除此之外,还有开始加密传输(ChangeCipherSpec)还是正常通信(Application)等,如图:

(2)Version是TLS的版本1.2。其他版本见下表:

(3)Handshake Type是在handshake阶段中的client hello。其它具体阶段见下表:

(4)ClientHello附带的数据随机数据random,会在生成session key时使用(会话密钥)。

(5)Cipher suite列出了client支持的所有加密算法组合,不同的cipher 决定了握手的交互过程。

cipher的格式为:认证算法_密钥交换算法_加密算法_ 摘要算法。可以看出每一组包含3种算法,一个是非对称算法,如RSA,一个是对称算法如AES,3DES等,一个是Hash算法,如SHA等。server会从这些算法组合中选取一组,作为本次SSL连接中使用。

2.Server回应ServerHello。指定版本,random,选择CipherSuites,会话ID(Session ID),确认使用的加密方法(RSA公钥加密),如图所示:

3.Server发送Certificate。

(1)服务器发一个证书给客户端,该证书用于向客户端确认服务器的身份。如果配置服务器的SSL需要验证服务器的身份,会发送该消息(多数电子商务应用都需要服务器端身份验证。(服务器如果需要验证客户端的身份,那么服务器会发一个“Certificate Request”给浏览器,而在很多实现中,服务器一般不需要验证客户端的身份)。

(2)server的证书信息,只包含public key,server将该public key对应的private key保存好,用于证明server是该证书的实际拥有者,验证原理很简单:client随机生成一串数,用server这里的public key加密(RSA算法),发给server,server用private key解密后返回给client,client与原文比较,如果一致,则说明server拥有private key,也就说明与client通信的正是证书的拥有者,因为public key加密的数据,只有private key才能解密。利用这个原理,也能实现session key的交换,加密前的随机数就可用作session key,因为除了client和server,没有第三方能获得该数据。但在实际使用时会复杂很多,数据经过多次hash,伪随机等的运算,前面提到的client和server端的RN都会参与计算。

4.Server发送ServerKeyExchange。

(1)这个包告诉我们服务器和客户端是通过Diffie-Hellman算法来生成最终的密钥(也就是Sessionkey会话密钥),pubkey是Diffie-Hellman算法中的一个参数,这个参数需要通过网络传给客户端,即使它被截取也没有影响安全性。

(2)此外,在网上一些资料中没有ServerKeyExchange这个过程,在certificate后就是ServerHelloDone过程,我认为是将ServerKeyExchange包含在certificate过程中了。

5.Server发送ServerHelloDone。

6.Client发送ClientKeyExchange,change cipher spec, encrypted handshake message(Finishd),用于与server交换session key。

(1)客户端收到服务器发来的ServerKeyExchange包来之后,运行Diffie-Hellman算法生成一个pubkey,然后发送给服务器。通过这一步和上面ServerKeyExchange两个步骤,服务器和客户端分别交换了pubkey,这样他们就可以分别生成了一个一样的sessionkey(具体的实现过程可以参考Diffie-Hellman算法的实现)。服务器和客户端向对方发送了pubkey之后,双方就可以计算出相同的密钥了,并且这个过程没有安全问题。

(2)发送ChangeCipherSpec,指示Server从现在开始发送的消息都是加密过的。

(3)client发送的encrypted handshake message加密数据非常关键,一是能证明握手数据没有被篡改过,二也能证明自己确实是密钥的拥有者(这里是单边验证,只有server有certificate,server发送的Finished能证明自己含有private key,原理是一样的)。client将之前发送的所有握手消息存入handshake message缓存。

完成上面的步骤,可以说TLS的握手阶段已经完成了。但是,服务器还会发送一个Session Ticket给浏览器。

7.server发送Session Ticket给client。

这个sessionticket包含了这个ticket的生命周期、长度、id等等信息。sessionticket包的作用是:握手阶段用来建立TLS连接。如果出于某种原因,对话中断,就需要重新握手。客户端只需发送一个服务器在上一次对话中发送过来的sessionticket。这个sessionticket是加密的,只有服务器才能解密,其中包括本次对话的主要信息,比如对话密钥和加密方法。当服务器收到sessionticket以后,解密后就不必重新生成对话密钥而是可以继续使用上一次的连接。

8.server发送ChangeCipherSpec给client。

Server指示client从现在开始发送的消息都是加密过的。

9.server发送encrypted handshake message(Finishd)给client。

与client发送Finished方法一致,server发送的Finished里包含hash给client,client会进行校验,如果通过,说明握手过程中的数据没有被第三方篡改过,也说明server是之前交换证书的拥有者。现在双方就可以开始后续通信,进入Application data了。

五、实验补充

当前TLS安全问题:

2016年1月,Computer Science and Automation (INRIA)的安全研究人员在TLS 1.2协议的实现过程中发现一个新漏洞,并将该新型攻击命名为“SLOTH”。中间人攻击者可利用SLOTH以下列方法攻击加密流量:解密加密的流量、冒充合法的客户端、冒充合法的服务器。之所以称之为SLOTH,是因为攻击者强迫目标使用弱的哈希算法,这是首例公开的针对TLS、IKE和SSH协议的原像/碰撞攻击。

SLOTH攻击揭示了TLS协议的最新版本中的一些安全问题。即使在安全协议栈中禁用弱密码套件,该攻击仍能发生。在TLS 1.2以后的版本中,TLS协议实现中的许多响应都会删除MD5支持。因此,在大多数情况下,更新现有的TLS栈可以有效的解决此类问题。但是,该更新操作不能仅限于TLS协议,因为SSH和VPN服务也会受到SLOTH攻击的影响。安全人员可以检查TLS、SSH和VPN相关的所有配置,并禁用MD5支持。同时,如果使用的是第三方通信设备,那么应该检查当前配置和供应商更新信息。

实验六 TLS协议报文解析的更多相关文章

  1. HTTP 协议报文解析

    说明转载自https://blog.csdn.net/chf1142152101/article/details/74162755 本篇主要是为了记录HTTP中报文的格式,以便针对报文进行解析.首先会 ...

  2. [转载] TLS协议分析 与 现代加密通信协议设计

    https://blog.helong.info/blog/2015/09/06/tls-protocol-analysis-and-crypto-protocol-design/?from=time ...

  3. TLS协议分析

    TLS协议分析 本文目标: 学习鉴赏TLS协议的设计,透彻理解原理和重点细节 跟进一下密码学应用领域的历史和进展 整理现代加密通信协议设计的一般思路 本文有门槛,读者需要对现代密码学有清晰而系统的理解 ...

  4. HTTPS协议、TLS协议、证书认证过程解析

    一.HTTPS 协议 HTTPS协议其实就是HTTP over TSL,TSL(Transport Layer Security) 传输层安全协议是https协议的核心. TSL可以理解为SSL (S ...

  5. 【转】Wireshark和Fiddler分析Android中的TLS协议包数据(附带案例样本)

    本文转自:http://www.wjdiankong.cn/wireshark%E5%92%8Cfiddler%E5%88%86%E6%9E%90android%E4%B8%AD%E7%9A%84tl ...

  6. android黑科技系列——Wireshark和Fiddler分析Android中的TLS协议包数据(附带案例样本)

    一.前言 在之前一篇文章已经介绍了一款网络访问软件的破解教程,当时采用的突破口是应用程序本身的一个漏洞,就是没有关闭日志信息,我们通过抓取日志获取到关键信息来找到突破口进行破解的.那篇文章也说到了,如 ...

  7. SSL/TLS算法流程解析

    SSL/TLS 早已不是陌生的词汇,然而其原理及细则却不是太容易记住.本文将试图通过一些简单图示呈现其流程原理,希望读者有所收获. 一.相关版本 Version Source Description ...

  8. SSL/TLS协议详解(下)——TLS握手协议

    本文转载自SSL/TLS协议详解(下)--TLS握手协议 导语 在博客系列的第2部分中,对证书颁发机构进行了深入的讨论.在这篇文章中,将会探索整个SSL/TLS握手过程,在此之前,先简述下最后这块内容 ...

  9. SSL、TLS协议格式、HTTPS通信过程、RDP SSL通信过程

    相关学习资料 http://www.360doc.com/content/10/0602/08/1466362_30787868.shtml http://www.gxu.edu.cn/college ...

随机推荐

  1. Java的日期类和日期格式化类

    日期类: Date date = new Date(); // 获取当前的系统时间 2 System.out.println("年份:"+ date.getYear()); Cal ...

  2. 10GNU C语言函数调用

    6. C 函数调用机制概述 ​ 在 Linux 内核程序 boot/head.s 执行完基本初始化操作之后,就会跳转区执行 init/main.c 程序.那么 head.s 程序时如何把执行控制转交给 ...

  3. day24 01 初识继承

    day24 01 初识继承 面向对象的三大特性:继承,多态,封装 一.继承的概念 继承:是一种创建新类的方式,新建的类可以继承一个或者多个父类,父类又可称基类或超类,新建的类称为派生类或者子类 cla ...

  4. Django之模型---ORM 多表操作

    多表操作 创建表模型 from django.db import models # Create your models here. class Author(models.Model): nid = ...

  5. (转)rvm安装与常用命令

    rvm是一个命令行工具,可以提供一个便捷的多版本ruby环境的管理和切换. https://rvm.io/ 如果你打算学习ruby/rails, rvm是必不可少的工具之一. 这里所有的命令都是再用户 ...

  6. sqlmanagementstudio2008下载地址

    http://big.wy119.com/sqlmanagementstudio2008_x86_chs.zip

  7. Leetcode(204) Count Primes

    题目 Description: Count the number of prime numbers less than a non-negative number, n. Credits: Speci ...

  8. navigationcontroller和navigationbar和navigationitem之间的区别以及不用nib实现点击屏幕关闭虚拟键盘20130911

    1.UIViewController UIView的关系. UIView是视图,UIViewController是视图控制器,两者之间是从属关系,当创建一个UIViewController的时候,一般 ...

  9. POJ:1904-King's Quest

    King's Quest Time limit15000 ms Case time limit2000 ms Memory limit65536 kB Description Once upon a ...

  10. Linux学习-软件磁盘阵列 (Software RAID)

    什么是 RAID 磁盘阵列全名是『 Redundant Arrays of Inexpensive Disks, RAID 』,英翻中的意思是:容错式廉价磁盘阵列.RAID 可以透过一个技术(软件或硬 ...