精华内容
下载资源
问答
  • linux 抓包分析html中文字内容
  • TCP相关知识应swoole长连接开发调研相关TCP知识并...以太网的数据包的负载是1500字节,IP包头需要20个字节,TCP的包头需要20个字节,实际的数据内容大小则是1460个字节,如图: OSI模型术语 应用层:如nginx、swool...

    TCP相关知识

    应swoole长连接开发调研相关TCP知识并记录。

    数据封包流程

    d0cc74a7f42c5cdc80273f25f59800c5.png

    如图,如果我需要发送一条数据给用户,实际的大小肯定是大于你发送的大小,在各个数据层都进行了数据的封包,以便你的数据能完整的发给你想要的用户。

    以太网的数据包的负载是1500字节,IP包头需要20个字节,TCP的包头需要20个字节,实际的数据内容大小则是1460个字节,如图:

    eafe141703a67f1d0839dc96a7c80793.png

    OSI模型术语

    21211d4da2605d8b4362603f91c31674.png

    应用层:

    如nginx、swoole等,大部分的数据都只需要关心应用层即可,我需要传输什么数据,我只需要调用对应的方法、发送给已知的IP、端口即可。

    TCP层:

    对应用层的数据进行包装,TCP的报文格式如下图,TCP/UDP层规定了数据的交换格式,如何进行握手、链接,如果加快数据传输、保证数据的完整性等。

    TCP层主要有几个算法可以关注下:

    慢启动、拥塞避免、快速重传、快恢复、滑动窗口

    IP层:

    细心的人也许已经发现TCP报文格式只有你发送的源端口和目标端口,并没有要发送的IP地址和你的IP地址,这些其实都封包在IP层

    数据链路层:

    数据转换为frame(帧)进行数据传输,为终端通信提供传输媒体和链接,常用设备有网卡、交换机等

    物理层:

    传输比特流,物理设备传输的层,属于硬件领域范畴,如光纤设备

    TCP报文格式

    be42f0f62be13346cde91bf6ebe45d59.png

    Wireshark抓的某个包截图:

    6559a0c494df00888f65a437448ebf8b.png

    TCP报文格式说明

    1、端口号:用来标识同一台计算机的不同的应用进程。

    1)源端口:源端口和IP地址的作用是标识报文的返回地址。

    2)目的端口:端口指明接收方计算机上的应用程序接口。

    TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。

    2、序号和确认号:是TCP可靠传输的关键部分。序号是本报文段发送的数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。e.g.一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为400。所以序号确保了TCP传输的有序性。确认号,即ACK,指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到。确认号只有当ACK标志为1时才有效。比如建立连接时,SYN报文的ACK标志位为0。

    3、数据偏移/首部长度:4bits。由于首部可能含有可选项内容,因此TCP报头的长度是不确定的,报头不包含任何任选字段则长度为20字节,4位首部长度字段所能表示的最大值为1111,转化为10进制为15,15*32/8 = 60,故报头最大长度为60字节。首部长度也叫数据偏移,是因为首部长度实际上指示了数据区在报文段中的起始偏移值。

    4、保留:为将来定义新的用途保留,现在一般置0。

    5、控制位:URG  ACK  PSH  RST  SYN  FIN,共6个,每一个标志位表示一个控制功能。

    1)URG:紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针。

    2)ACK:确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。

    3)PSH:push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。

    4)RST:重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。

    5)SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。

    6)FIN:finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。

    6、窗口:滑动窗口大小,用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。窗口大小时一个16bit字段,因而窗口大小最大为65535。

    7、校验和:奇偶校验,此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。由发送端计算和存储,并由接收端进行验证。

    8、紧急指针:只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。

    9、选项和填充:最常见的可选字段是最长报文大小,又称为MSS(Maximum Segment Size),每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志为1的那个段)中指明这个选项,它表示本端所能接受的最大报文段的长度。选项长度不一定是32位的整数倍,所以要加填充位,即在这个字段中加入额外的零,以保证TCP头是32的整数倍。

    10、数据部分:TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。

    TCP三次握手图形

    c8e199f35c7240da161c2e9e80982ce1.png

    IP报文格式参考

    87c5f787ee4decef25dadc573680fb49.png

    IP报文是对TCP的数据进行了一次包装,再发送给数据链路层,IP报文格式固定格式为20个字节,如图:

    更多协议(IP TCP UDP)的报文格式参考:

    TCP 窗口大小(cwnd)

    TCP慢启动

    当第一次进行SYN建立链接的时候,客户端会与服务端进行沟通MSS的大小,一般为1460 Byte,每当有一个报文字段被确认,cwnd就增加一个MSS大小,这样随着网络时间RTT的呈指数级增长,但是也不会一直指数级别增加,会有一个最大值的限制

    数据测试

    服务端脚本(swoole)

    $server = new swoole_server("::", 9503);

    $server->on('connect', function ($server, $fd){

    echo "connection open: {$fd}\n";

    });

    $server->on('receive', function ($server, $fd, $reactor_id, $data) {

    $server->send($fd, "Swoole: {$data}");

    $server->close($fd);

    });

    $server->on('close', function ($server, $fd) {

    echo "connection close: {$fd}\n";

    });

    $server->start();

    Wireshark抓包

    客户端发送数据后进行抓包,如图:

    a4f0bccc1a96ee59b047f9c3ea2091ab.png

    Wireshark流程统计查看

    统计-流量图-显示过滤器的限制,选择TCP Flows:

    从结果可以看到tcp从SYN、ACK、FIN的整个过程及每个过程的耗时情况。

    25c32b5798f28017db48c2addec6a2aa.png

    TCP窗口大小调研结论

    1、  TCP一次数据包发送数据大小不能超过MMS设置,一般为1460字节

    2、  TCP慢启动特性在初始传输数据的时候并不是直接发送1460数据,而通过慢启动算法指数递增,算法本身不支持进行参数改动

    参考资料

    《网络基本功系列文章》 https://wizardforcel.gitbooks.io/network-basic/content/7.html

    展开全文
  • 抓包分析

    2019-05-23 15:59:00
    打开wireshark抓包软件,将其它联网软件关掉,打开QQ浏览器,通过显示过滤器过滤http   通过复制hypertext transfer protoucol 的网址,在QQ浏览器打开,内容如下图所示   直播     三、传输...

     

    一、网络配置

     

    网络地址规划表

     

    源IP地址

    默认网关

    目的IP地址

    域名

    备注

    10.3.45.154

    10.3.45.154

    112.54.108.106

    Hao123.com

    360浏览器

    10.3.45.154

    10.3.45.154

    111.30.144.106

    yy.com

    yy直播平台

     

    配置

    步骤1:打开网络和共享中心

    步骤2:点击无线网络连接

    步骤3:点击属性,选择Internet协议版本4(TCP/IPv4)确定,设置自己的私网地址,配置如下

    连通性测试

      配置完成后,可打开浏览器看是否可以连上网络,即出现一下界面

     

    则配置成功

    二、应用层

    360浏览器打开

    打开wireshark抓包软件,将其它联网软件关掉,打开QQ浏览器,通过显示过滤器过滤http

     

    通过复制hypertext transfer protoucol 中的网址,在QQ浏览器中打开,内容如下图所示

     

    直播

     

     

    三、传输层

     

    1. TCP第一次次握手

    地址为10.3.45.154的A的TCP向地址为221.181.72.100B发出连接请求报文段,其首部中的同步位SYN=1, 并选择序号seq=1, 表明传送数据时的第1个数据字节的序号是1

    1. 第二次握手

    第二次握手:B的TCP收到连接请求报文段后,如同意,则发回确认,ACK=1,其确认号ack=252, 同时B向A发起连接请求,应是SYN=1, 自己选择的序号seq=870

    1. 第三次握手

    A刚收到此报文段后向B给出确认,其中ACK=542,seq=871,ACK=1,A的 TCP通知上层应用进程,连接已经建。

     

     

     

     

    第一次挥手:A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接。A把连接释放报文段首部的FIN=1,其序号s eq=1,等待B的确认

    第二次挥手:B发出确认,确认好ACK=1, ack=1034, 而这个报文段自己的序号seq=4751 TCP服务器进程通知高层应用进程

    第三次挥手:若B已经没有要向A发送的数据,其应用进程就通知TCP释放连接,FIN=1, s eq=9136, ACK=1,ack=1034,A收到连接释放报文段后必须发出确认

     

    第四次挥手:在确认报文段中ACK=1,确认号ack=6211,自己的序号,seq=1034.

     

    四、网络层

    1. IP报文

     

    从上至下依次是

     

    Internet协议版本4.

     

    头部长度:5

     

    服务类型字段:0X2c

     

    总长度:930

     

    标识字段:0X8932

     

    生存时间:55

     

    头部校验和:0x007c

     

    源地址:183.231.197.246

     

    目的地址:10。3.45.154

    ARP

     

    来源: Hangzhou_47:d9:00 (70:f9:6d:47:d9:00)

     

    类型:ARP (0x0806)

     

    硬件类型:以太(1)

     

    协议类型:ipv4

     

    硬件尺寸:6

     

    协议尺寸:4

     

    指令:回复(2)

     

    发送者MAC地址:Hangzhou_47:d9:00 (70:f9:6d:47:d9:00)

     

    发送者IP地址: 10.3.45.254

     

    目的MAC地址: 00:00:00_00:00:00 (00:00:00:00:00:00)

     

    目的IP地址: 10.3.45.1

    五、网络接口层

     

     

    接口标识:0

     

    封装类型:Etherent(1)

     

    到达时间:May21,2019  18:25:14.827066000 中国标准时间

     

    帧数:1997

     

    帧长度:308

     

    捕获长度302

    总结

    这次的作业让我更加深入的了解到网络的分层和传输方式,对于网络有了更深刻的理解,在做作业的过程当中,因为打开浏览器使用的是电脑自带浏览器,抓不到信息,后来使用下载浏览器才可以继续进行,在分析tcp三次握手和四次挥手时通过和书上对比,加上查询网络,找到正确的路径,对于ip报文的分析,通过和同学的交流明白了格式。

     

     

     

     

     

     

     

     

     

     

    基本要求

    具体

    要求

    分值

    自评

    得分

    小组

    评分

    作业

    评分

    1、地址合规性检查,每位同学只能使用自己的IP地址;如不符合要求,此次作业为0分;

    2、文档命名为:第X组_班级_学号最后3位_作业名;

    3、作业抄袭问题

    合规

    0

     

     

     

    不合规

    -100

     

     

     

    命名正确

    5

    5

     

     

    抄袭

    -100

     

     

     

    1、需要列出网络地址规划表;

    2、连通性测试,有图,有描述;

    3、配置需要有步骤,有描述

    列出地址规划表

    5

    5

     

     

    配置步骤可重演,不许截图

    5

    5

     

     

    连通性测试,有图有描述

    5

    5

     

     

    应用层(图片前有文字说明,写明要表达的意思;)

    www

    5

    5

     

     

    直播

    5

    5

     

     

    传输层(图片前有文字说明,写明要表达的意思;)

    TCP协议(建立连接,释放连接过程)

    15

    10

     

     

    UDP协议

    5

    4

     

     

    网络层(图片前有文字说明,写明要表达的意思;)

    IP报文

    5

    5

     

     

    ARP协议

    5

    2

     

     

    ICMP协议

    5

    0

     

     

    数据链路层(图片前有文字说明,写明要表达的意思;)

    MAC帧格式

    5

    5

     

     

    MAC地址分析

    5

    5

     

     

    总结,写对知识点的总结,遇到的问题,解决的方法等

    不少于50字

    5

    5

     

     

    排版(字体:宋体;字号:5号;首行缩进;行距:固定值,20磅)

    字体、字号正确

    5

    5

     

     

    首行缩进,行距正确

    5

    5

     

     

    在完成提交自己的作业后,先进行自评,然后看其他同学的作品并给出评价。

    有自评

    5

    5

     

     

    有小组互评

    5

    5

     

     

    总评成绩

    86

     

     

    转载于:https://www.cnblogs.com/niuruyun/p/10912440.html

    展开全文
  • HTTPS抓包分析

    千次阅读 2017-06-26 15:12:57
    以下文章粘贴自: http://wetest.qq.com/lab/view/110.html 本文将分两个专题去理解HTTPS。 专题一:HTTPS为什么安全 1、http为什么不安全? http协议属于明文传输协议,交互过程以及数据传输都没有进行...

    以下文章粘贴自: http://wetest.qq.com/lab/view/110.html

    本文将分两个专题去理解HTTPS。

    专题一:HTTPS为什么安全

    1、http为什么不安全?


    http协议属于明文传输协议,交互过程以及数据传输都没有进行加密,通信双方也没有进行任何认证,通信过程非常容易遭遇劫持、监听、篡改,严重情况下,会造成恶意的流量劫持等问题,甚至造成个人隐私泄露(比如银行卡卡号和密码泄露)等严重的安全问题。

    可以把http通信比喻成寄送信件一样,A给B寄信,信件在寄送过程中,会经过很多的邮递员之手,他们可以拆开信读取里面的内容(因为http是明文传输的)。A的信件里面的任何内容(包括各类账号和密码)都会被轻易窃取。除此之外,邮递员们还可以伪造或者修改信件的内容,导致B接收到的信件内容是假的。

    比如常见的,在http通信过程中,“中间人”将广告链接嵌入到服务器发给用户的http报文里,导致用户界面出现很多不良链接; 或者是修改用户的请求头URL,导致用户的请求被劫持到另外一个网站,用户的请求永远到不了真正的服务器。这些都会导致用户得不到正确的服务,甚至是损失惨重。

    2、https如何保证安全?


    要解决http带来的问题,就要引入加密以及身份验证机制。

    如果Server(以后简称服务器)给Client(以后简称 客户端)的消息是密文的,只有服务器和客户端才能读懂,就可以保证数据的保密性。同时,在交换数据之前,验证一下对方的合法身份,就可以保证通信双方的安全。那么,问题来了,服务器把数据加密后,客户端如何读懂这些数据呢?这时服务器必须要把加密的密钥(对称密钥,后面会详细说明)告诉客户端,客户端才能利用对称密钥解开密文的内容。但是,服务器如果将这个对称密钥以明文的方式给客户端,还是会被中间人截获,中间人也会知道对称密钥,依然无法保证通信的保密性。但是,如果服务器以密文的方式将对称密钥发给客户端,客户端又如何解开这个密文,得到其中的对称密钥呢?

    说到这里,大家是不是有点儿糊涂了?一会儿密钥,一会儿对称密钥,都有点儿被搞晕的节奏。在这里,提前给大家普及一下,这里的密钥,指的是非对称加解密的密钥,是用于TLS握手阶段的; 对称密钥,指的是对称加解密的密钥,是用于后续传输数据加解密的。下面将详细说明。

    这时,我们引入了非对称加解密的概念。在非对称加解密算法里,公钥加密的数据,有且只有唯一的私钥才能够解密,所以服务器只要把公钥发给客户端,客户端就可以用这个公钥来加密进行数据传输的对称密钥。客户端利用公钥将对称密钥发给服务器时,即使中间人截取了信息,也无法解密,因为私钥只部署在服务器,其他任何人都没有私钥,因此,只有服务器才能够解密。服务器拿到客户端的信息并用私钥解密之后,就可以拿到加解密数据用的对称密钥,通过这个对称密钥来进行后续通信的数据加解密。除此之外,非对称加密可以很好的管理对称密钥,保证每次数据加密的对称密钥都是不相同的,这样子的话,即使客户端病毒拉取到通信缓存信息,也无法窃取正常通信内容。

    上述通信过程,可以画成以下交互图:


    但是这样似乎还不够,如果通信过程中,在三次握手或者客户端发起HTTP请求过程中,客户端的请求被中间人劫持,那么中间人就可以伪装成“假冒客户端”和服务器通信;中间人又可以伪装成“假冒服务器”和客户端通信。接下来,我们详细阐述中间人获取对称密钥的过程:

    中间人在收到服务器发送给客户端的公钥(这里是“正确的公钥”)后,并没有发给客户端,而是中间人将自己的公钥(这里中间人也会有一对公钥和私钥,这里称呼为“伪造公钥”)发给客户端。之后,客户端把对称密钥用这个“伪造公钥”加密后,发送过程中经过了中间人,中间人就可以用自己的私钥解密数据并拿到对称密钥,此时中间人再把对称密钥用“正确的公钥”加密发回给服务器。此时,客户端、中间人、服务器都拥有了一样的对称密钥,后续客户端和服务器的所有加密数据,中间人都可以通过对称密钥解密出来。

    中间人获取对称密钥的过程如下:


    为了解决此问题,我们引入了数字证书的概念。服务器首先生成公私钥,将公钥提供给相关机构(CA),CA将公钥放入数字证书并将数字证书颁布给服务器,此时服务器就不是简单的把公钥给客户端,而是给客户端一个数字证书,数字证书中加入了一些数字签名的机制,保证了数字证书一定是服务器给客户端的。中间人发送的伪造证书,不能够获得CA的认证,此时,客户端和服务器就知道通信被劫持了。加入了CA数字签名认证的SSL会话过程如下所示:


    所以综合以上三点:非对称加密算法(公钥和私钥)交换对称密钥+数字证书验证身份(验证公钥是否是伪造的)+利用对称密钥加解密后续传输的数据=安全



    3、https协议简介


    为什么是简单地介绍https协议呢?因为https涉及的东西实在太多了,尤其是其中的加解密算法,十分复杂,作者本身对这些算法也研究不完,只是懂其中的一些皮毛而已。这部分仅仅是简单介绍一些关于https的最基本原理,为后面分析https的建立过程以及https优化等内容打下理论基础。

    3.1 对称加密算法

    对称加密是指:加密和解密使用相同密钥的算法。它要求发送方和接收方在安全通信之前,商定一个对称密钥。对称算法的安全性完全依赖于密钥,密钥泄漏就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信至关重要。

    3.1.1 对称加密又分为两种模式:流加密和分组加密

    流加密是将消息作为字节流对待,并且使用数学函数分别作用在每一个字节位上。使用流加密时,每加密一次,相同的明文位会转换成不同的密文位。流加密使用了密钥流生成器,它生成的字节流与明文字节流进行异或,从而生成密文。

    分组加密是将消息划分为若干个分组,这些分组随后会通过数学函数进行处理,每次一个分组。假设使用64位的分组密码,此时如果消息长度为640位,就会被划分成10个64位的分组(如果最后一个分组长度不到64,则用0补齐之后加到64位),每个分组都用一系列数学公式进行处理,最后得到10个加密文本分组。然后,将这条密文消息发送给对端。对端必须拥有相同的分组密码,以相反的顺序对10个密文分组使用前面的算法解密,最终得到明文消息。比较常用的分组加密算法有DES、3DES、AES。其中DES是比较老的加密算法,现在已经被证明不安全。而3DES是一个过渡的加密算法,相当于在DES基础上进行三重运算来提高安全性,但其本质上还是和DES算法一致。而AES是DES算法的替代算法,是现在最安全的对称加密算法之一。

    3.1.2 对称加密算法的优缺点:

    优点:计算量小、加密速度快、加密效率高。

    缺点:

    (1)交易双方都使用同样密钥,安全性得不到保证;

    (2)每次使用对称加密算法时,都需要使用其他人不知道的惟一密钥,这会使得发收信息双方所拥有的钥匙数量呈几何级数增长,密钥管理成为负担。

    3.2 非对称加密算法

    在非对称密钥交换算法出现以前,对称加密的最主要缺陷就是不知道如何在通信双方之间传输对称密钥,而又不让中间人窃取。非对称密钥交换算法诞生之后,专门针对对称密钥传输做加解密,使得对称密钥的交互传输变得非常安全了。

    非对称密钥交换算法本身非常复杂,密钥交换过程涉及到随机数生成,模指数运算,空白补齐,加密,签名等等一系列极其复杂的过程,作者本人也没有研究完全透彻。常见的密钥交换算法有RSA,ECDHE,DH,DHE等算法。涉及到比较复杂的数学问题。其中,最经典也是最常用的是RSA算法。

    RSA:诞生于1977年,经过了长时间的破解测试,算法安全性很高,最重要的是,算法实现非常简单。缺点就是需要比较大的质数(目前常用的是2048位)来保证安全强度,极其消耗CPU运算资源。RSA是目前唯一一个既能用于密钥交换又能用于证书签名的算法,RSA 是最经典,同时也是最常用的是非对称加解密算法。

    3.2.1 非对称加密相比对称加密更加安全,但也存在两个致命的缺点:

    (1)CPU计算资源消耗非常大。一次完全TLS握手,密钥交换时的非对称解密计算量占整个握手过程的90%以上。而对称加密的计算量只相当于非对称加密的0.1%。如果后续的应用层数据传输过程也使用非对称加解密,那么CPU性能开销太庞大,服务器是根本无法承受的。赛门特克给出的实验数据显示,加解密同等数量的文件,非对称算法消耗的CPU资源是对称算法的1000倍以上。

    (2)非对称加密算法对加密内容的长度有限制,不能超过公钥长度。比如现在常用的公钥长度是2048位,意味着待加密内容不能超过256个字节。

    所以非对称加解密(极端消耗CPU资源)目前只能用来作对称密钥交换或者CA签名,不适合用来做应用层内容传输的加解密。

    3.3 身份认证

    https协议中身份认证的部分是由CA数字证书完成的,证书由公钥、证书主体、数字签名等内容组成。在客户端发起SSL请求后,服务端会将数字证书发给客户端,客户端会对证书进行验证(验证这张证书是否是伪造的?也就是公钥是否是伪造的),如果证书不是伪造的,客户端就获取用于对称密钥交换的非对称密钥(获取公钥)。

    3.3.1 数字证书有三个作用:

    1、身份授权。确保浏览器访问的网站是经过CA验证的可信任的网站。

    2、分发公钥。每个数字证书都包含了注册者生成的公钥(验证确保是合法的,非伪造的公钥)。在SSL握手时会通过certificate消息传输给客户端。

    3、验证证书合法性。客户端接收到数字证书后,会对证书合法性进行验证。只有验证通过后的证书,才能够进行后续通信过程。

    3.3.2 申请一个受信任的CA数字证书通常有如下流程:

    (1)公司(实体)的服务器生成公钥和私钥,以及CA数字证书请求。

    (2)RA(证书注册及审核机构)检查实体的合法性(在注册系统里面是否注册过的正规公司)。

    (3)CA(证书签发机构)签发证书,发送给申请者实体。

    (4)证书更新到repository(负责数字证书及CRL内容存储和分发),实体终端后续从repository更新证书,查询证书状态等。

    3.4 数字证书验证

    申请者拿到CA的证书并部署在网站服务器端,那浏览器发起握手并接收到证书后,如何确认这个证书就是CA签发的呢?怎样避免第三方伪造这个证书?答案就是数字签名(digital signature)。数字签名是证书的防伪标签,目前使用最广泛的SHA-RSA(SHA用于哈希算法,RSA用于非对称加密算法)。数字签名的制作和验证过程如下:

    1、数字签名的签发。首先是使用哈希函数对待签名内容进行安全哈希,生成消息摘要,然后使用CA自己的私钥对消息摘要进行加密。

    2、数字签名的校验。使用CA的公钥解密签名,然后使用相同的签名函数对签名证书内容进行签名,并和服务端数字签名里的签名内容进行比较,如果相同就认为校验成功。


    需要注意的是:

    (1)数字签名签发和校验使用的非对称密钥是CA自己的公钥和私钥,跟证书申请者(提交证书申请的公司实体)提交的公钥没有任何关系。

    (2)数字签名的签发过程跟公钥加密的过程刚好相反,即是用私钥加密,公钥解密。(一对公钥和私钥,公钥加密的内容只有私钥能够解密;反过来,私钥加密的内容,也就有公钥才能够解密)

    (3)现在大的CA都会有证书链,证书链的好处:首先是安全,保持CA的私钥离线使用。第二个好处是方便部署和撤销。这里为啥要撤销呢?因为,如果CA数字证书出现问题(被篡改或者污染),只需要撤销相应级别的证书,根证书依然是安全的。

    (4)根CA证书都是自签名,即用自己的公钥和私钥完成了签名的制作和验证。而证书链上的证书签名都是使用上一级证书的非对称密钥进行签名和验证的。

    (5)怎样获取根CA和多级CA的密钥对?还有,既然是自签名和自认证,那么它们是否安全可信?这里的答案是:当然可信,因为这些厂商跟浏览器和操作系统都有合作,它们的根公钥都默认装到了浏览器或者操作系统环境里。

    3.5 数据完整性验证

    数据传输过程中的完整性使用MAC算法来保证。为了避免网络中传输的数据被非法篡改,或者数据比特被污染,SSL利用基于MD5或SHA的MAC算法来保证消息的完整性(由于MD5在实际应用中存在冲突的可能性比较大,所以尽量别采用MD5来验证内容一致性)。 MAC算法是在密钥参与下的数据摘要算法,能将密钥和任意长度的数据转换为固定长度的数据。发送者在密钥的作用下,利用MAC算法计算出消息的MAC值,并将其添加在需要发送的消息之后,并发送给接收者。接收者利用同样的密钥和MAC算法计算出消息的MAC值,并与接收到的MAC值比较。如果二者相同,则报文没有改变;否则,报文在传输过程中被修改或者污染,接收者将丢弃该报文。 SHA也不能使用SHA0和SHA1,山东大学的王小云教授(很牛的一个女教授,大家有兴趣可以上网搜索一下她的事迹)在2005年就宣布破解了 SHA-1完整版算法,并获得了业内专家的认可。微软和google都已经宣布16年及17年之后不再支持sha1签名证书。

    专题二:实际抓包分析

    本文对百度搜索进行了两次抓包,第一次抓包之前清理了浏览器的所有缓存;第二次抓包是在第一次抓包后的半分钟内。

    百度在2015年已经完成了百度搜索的全站https,这在国内https发展中具有重大的意义(目前BAT三大家中,只有百度宣称自己完成了全站HTTPS)。所以这篇文章就以www.baidu.com为例进行分析。

    同时,作者采用的是chrome浏览器,chrome支持SNI (server Name Indication) 特性,对于HTTPS性能优化有很大的用处。

    注:SNI是为了解决一个服务器使用多个域名和证书的SSL/TLS扩展。一句话简述它的工作原理就是:在和服务器建立SSL连接之前,先发送要访问的域名(hostname),这样服务器根据这个域名返回一个合适的证书。目前,大多数操作系统和浏览器都已经很好地支持SNI扩展,OpenSSL 0.9.8已经内置这一功能,新版的nginx和apache也支持SNI扩展特性。

    本文抓包访问的URL为:http://www.baidu.com/  

    (如果是https://www.baidu.com/,则以下结果不一样!)

    抓包结果:


    可以看到,百度采用以下策略:

    (1)对于高版本浏览器,如果支持 https,且加解密算法在TLS1.0 以上的,都将所有 http请求重定向到 https请求

    (2)对于https请求,则不变。

    【详细解析过程】

    1、TCP三次握手



    可以看到,我的电脑访问的是http://www.baidu.com/,在初次建立三次握手的时候, 客户端是去连接 8080端口的(我所在小区网络总出口做了一层总代理,因此,客户端实际和代理机做的三次握手,代理机再帮客户端去连接百度服务器)

    2、tunnel建立

    由于小区网关设置了代理访问,因此,在进行https访问的时候,客户端需要和代理机做"HTTPS CONNECT tunnel" 连接(关于"HTTPS CONNECT tunnel"连接,可以理解为:虽然后续的https请求都是代理机和百度服务器进行公私钥连接和对称密钥交换,以及数据通信;但是,有了隧道连接之后,可以认为客户端也在直接和百度服务器进行通信。)

    fiddler抓包结果:

    3、client hello


    3.1 随机数

    在客户端问候中,有四个字节以Unix时间格式记录了客户端的协调世界时间(UTC)。协调世界时间是从1970年1月1日开始到当前时刻所经历的秒数。在这个例子中,0x2516b84b就是协调世界时间。在他后面有28字节的随机数random_C,在后面的过程中我们会用到这个随机数。

    3.2 SID(Session ID)

    如果出于某种原因,对话中断,就需要重新握手。为了避免重新握手而造成的访问效率低下,这时候引入了session ID的概念, session ID的思想很简单,就是每一次对话都有一个编号(session ID)。如果对话中断,下次重连的时候,只要客户端给出这个编号,且服务器有这个编号的记录,双方就可以重新使用已有的“对称密钥”,而不必重新生成一把。

    因为我们抓包的时候,是几个小时内第一次访问https://www.baodu.com ,因此,这里并没有Session ID.稍会儿我们会看到隔了半分钟,第二次抓包就有这个Session ID)  

    session ID是目前所有浏览器都支持的方法,但是它的缺点在于session ID往往只保留在一台服务器上。所以,如果客户端的请求发到另一台服务器(这是很有可能的,对于同一个域名,当流量很大的时候,往往后台有几十台RS机在提供服务),就无法恢复对话。session ticket就是为了解决这个问题而诞生的,目前只有Firefox和Chrome浏览器支持。

    3.3 密文族(Cipher Suites)

    RFC2246中建议了很多中组合,一般写法是"密钥交换算法-对称加密算法-哈希算法,以“TLS_RSA_WITH_AES_256_CBC_SHA”为例:

    (a)TLS为协议,RSA为密钥交换的算法;

    (b)AES_256_CBC是对称加密算法(其中256是密钥长度,CBC是分组方式);

    (c)SHA是哈希的算法。

    浏览器支持的加密算法一般会比较多,而服务端会根据自身的业务情况选择比较适合的加密组合发给客户端。(比如综合安全性以及速度、性能等因素)

    3.4 Server_name扩展(一般浏览器也支持 SNI扩展)



    当我们去访问一个站点时,一定是先通过DNS解析出站点对应的ip地址,通过ip地址来访问站点,由于很多时候一个ip地址是给很多的站点公用,因此如果没有server_name这个字段,server是无法给与客户端相应的数字证书的,Server_name扩展则允许服务器对浏览器的请求授予相对应的证书。

    服务器回复

    (包括Server Hello,Certificate,Certificate Status)

    服务器在收到client hello后,会回复三个数据包,下面分别看一下:

    4、Server Hello




    4.1、我们得到了服务器的以Unix时间格式记录的UTC和28字节的随机数 (random_S)。


    4.2、Seesion ID,服务端对于session ID一般会有三种选择  (稍会儿我们会看到隔了半分钟,第二次抓包就有这个Session ID):


    (1)恢复的session ID:我们之前在client hello里面已经提到,如果client hello里面的session ID在服务端有缓存,服务端会尝试恢复这个session;


    (2)新的session ID:这里又分两种情况,第一种是client hello里面的session ID是空值,此时服务端会给客户端一个新的session ID,第二种是client hello里面的session ID此服务器并没有找到对应的缓存,此时也会回一个新的session ID给客户端;


    (3)NULL:服务端不希望此session被恢复,因此session ID为空。


    4.3、我们记得在client hello里面,客户端给出了多种加密族 Cipher,而在客户端所提供的加密族中,服务端挑选了TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256”


    (a)TLS为协议,RSA为密钥交换的算法;

    (b)AES_256_CBC是对称加密算法(其中256是密钥长度,CBC是分组方式);

    (c)SHA是哈希的算法。


    这就意味着服务端会使用ECDHE-RSA算法进行密钥交换,通过AES_128_GCM对称加密算法来加密数据,利用SHA256哈希算法来确保数据完整性。


    5、Certificate



    在前面的https原理研究中,我们知道为了安全的将公钥发给客户端,服务端会把公钥放入数字证书中并发给客户端(数字证书可以自签发,但是一般为了保证安全会有一个专门的CA机构签发),所以这个报文就是数字证书,4097 bytes就是证书的长度。

    我们打开这个证书,可以看到证书的具体信息,这个具体信息通过抓包报文的方式不是太直观,可以在浏览器上直接看。点击chrome浏览器左上方的绿色锁型按钮) 

    6、Server Hello Done

    我们抓的包是将 Server Hello Done  和 server key exchage 合并的包:


    7、客户端验证证书真伪性

    客户端验证证书的合法性,如果验证通过才会进行后续通信,否则根据错误情况不同做出提示和操作,合法性验证包括如下:

    (1)证书链的可信性trusted certificate path,方法如前文所述;

    (2)证书是否吊销revocation,有两类方式离线CRL与在线OCSP,不同的客户端行为会不同;

    (3)有效期expiry date,证书是否在有效时间范围;

    (4)域名domain,核查证书域名是否与当前的访问域名匹配,匹配规则后续分析; 

    8、秘钥交换

    这个过程非常复杂,大概总结一下:

    (1)首先,客户端利用CA数字证书实现身份认证,利用非对称加密协商对称密钥。

    (2)客户端会向服务器传输一个“pubkey”随机数,服务器收到之后,利用特定算法生成另外一个“pubkey”随机数,客户端利用这两个“pubkey”随机数生成一个 pre-master 随机数。

    (3)客户端利用自己在 client hello 里面传输的随机数 random_C,以及收到的 server hello 里面的随机数 random_S,外加 pre-master 随机数,利用对称密钥生成算法生成 对称密钥enc_key:enc_key=Fuc(random_C, random_S, Pre-Master)



    9、生成session ticket


    如果出于某种原因,对话中断,就需要重新握手。为了避免重新握手而造成的访问效率低下,这时候引入了session ID的概念, session ID(以及session ticke)的思想很简单,就是每一次对话都有一个编号(session ID)。如果对话中断,下次重连的时候,只要客户端给出这个编号,且服务器有这个编号的记录,双方就可以重新使用已有的“对话密钥”,而不必重新生成一把。

    因为我们抓包的时候,是几个小时内第一次访问 https://www.baodu.com 首页,因此,这里并没有 Session ID.稍会儿我们会看到隔了半分钟,第二次抓包就有这个Session ID) 

    session ID是目前所有浏览器都支持的方法,但是它的缺点在于session ID往往只保留在一台服务器上。所以,如果客户端的请求发到另一台服务器,就无法恢复对话。session ticket就是为了解决这个问题而诞生的,目前只有Firefox和Chrome浏览器支持。

    后续建立新的https会话,就可以利用 session ID 或者 session Tickets , 对称秘钥可以再次使用,从而免去了 https 公私钥交换、CA认证等等过程,极大地缩短 https 会话连接时间。

    10、利用对称秘钥传输数据




    三、半分钟后,再次访问百度:

    有这些大的不同:


    由于服务器和浏览器缓存了 Session ID 和 Session Tickets,不需要再进行 公钥证书传递,CA认证,生成 对称密钥等过程,直接利用半分钟前的对称密钥加解密数据进行会话。

    1、Client Hello



    2、Server Hello


    展开全文
  • HTTP抓包分析

    2020-06-06 21:33:38
    cookie的四个组件: (1)HTTP响应报文的一个cookie首部行 (2)HTTP请求报文的一个cookie首部行 (3)用户端系统由浏览器管理的cookie文件 (4)web站点的后端数据库 HTTP抓包 (1)普通http (1)打开浏览器输入...

    Q&A

    HTTP是什么?作用?
    HTTP:超文本传输协议,定义了web客户向web服务器请求页面的方式,以及服务器向客户传送页面的方式,使用TCP作为传输层协议,HTTP是无状态的,对于交互场景没有记忆能力。

    HTTP连接方式?
    HTTP既可以采用持续连接,也可以使用非持续连接,默认状态下使用持续连接,即每个请求和响应都通过相同的TCP连接传送。
    非持续连接使用并行可以降低访问时间。

    HTTP请求报文格式:
    在这里插入图片描述
    第一行是请求行,其余是首部行。
    请求行包括三个字段:
    (1)请求方法字段,包括GET,POST等,二者的区别在于GET请求的页面不依赖用户信息,但表单生成的请求报文不是必须用POST方法,也可以在URL中直接包含。
    (2)URL字段
    (3)HTTP版本字段
    首部行:告诉服务器请求网站(host),使用持续/非持续连接,浏览器版本,语言等信息

    HTTP响应报文:
    包含三个部分:
    (1)初始状态行:包含协议版本字段,状态码,状态信息
    (2)首部行:包含是否关闭TCP连接,日期,内容长度等信息
    (3)实体:正文

    cookie的作用:
    因为HTTP是无状态的,为了把用户身份和请求关联起来,HTTP使用了cookie。
    cookie的四个组件:
    (1)HTTP响应报文中的一个cookie首部行
    (2)HTTP请求报文中的一个cookie首部行
    (3)用户端系统由浏览器管理的cookie文件
    (4)web站点的后端数据库

    HTTP抓包

    (1)普通http
    (1)打开浏览器输入:http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file1.html
    在这里插入图片描述
    本机向服务器发送的请求,服务器返回的包:
    在这里插入图片描述
    HTTP请求报文:
    在这里插入图片描述
    HTTP响应报文:
    在这里插入图片描述
    服务器上HTML文件的最近一次修改是什么时候?看Last-Modified,竟然是在一分钟前!这是因为服务器的设置。

    (2)条件get
    输入http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file2.html,再输入一次,抓包发现第一个不是条件get,第二次是。第一次服务器返回了html内容,第二次服务器发现没有改变,返回状态字304,Not Modified。
    在这里插入图片描述

    (3) 长文件检索

    访问http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file3.html,发现服务器返回了四个由TCP传输的包
    在这里插入图片描述

    (4) 嵌入对象的HTML
    访问,http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file4.html,页面包含一段文字和两张图片。
    发现捕获了好多包,其中有三个GET,一个是请求页面,两个是请求图片,符合预期
    在这里插入图片描述
    判断是否是并行下载?
    因为两张图片的请求有时间差,所以应该不是并行,而是串行。

    (5)HTTP认证
    访问受密码保护的网站:http://gaia.cs.umass.edu/wireshark-labs/protected_pages/HTTP-wireshark-file5.html,输入用户名:wireshark-students,密码:network。
    捕获了四个包:
    在这里插入图片描述
    第一次服务器返回782状态字,显示没有授权。
    第二次GET请求中包含了输入的用户名和密码:
    在这里插入图片描述

    展开全文
  • 计算机网络实验(三)之Wireshark抓包分析-python实现http分析计算机网络试验三实验内容1.实验步骤1.1 基本HTTP GET/response交互1.2 HTTP条件Get/response交互1.3HTTP条件认证实验要求实验作答-代码实现分析版本一...
  • WireShark 抓包分析(高阶)

    千次阅读 多人点赞 2019-10-20 16:14:30
    wire shark抓包分析 xiang0712 wires hark基础知识 主窗信息 标题栏-----------------用于显示文件名称、捕获的设备名称和Wireshark版本号。 菜单栏-----------------Wireshark 的标准菜单栏。 工具栏---------...
  • 1、抓包分析 1.1 Fiddler安装及基本操作  由于很多网站采用的是HTTPS协议,而fiddler默认不支持HTTPS,先通过设置使fiddler能抓取HTTPS网站,过程可参考(https://www.cnblogs.com/liulinghua90/p/9109282.html)...
  • 题目:网络协议抓包分析 ...
  • 本文通过实际的抓包操作来看一下tcp的连接与断开是怎样的。  首先需要去https://www.wireshark.org/下载wireshark对应你机器位数的版本,也可以用这个连接直接下载(64位)...
  • HTTP 协议再规范文档里详细定义了报文的格式,规定了组成部分,解析规则,还有处理策略,所以可以在 TCP/IP 层之上实现丰富灵活的功能,例如连接控制、缓存管理、数据编码、内容协商 报文结构 HTTP 协议是一个”纯...
  • TCP三次握手(建立连接)抓包如图。 在wireshark输入http过滤,选中Get/tankxiao HTTP/1.1进行分析。 由此得出源端口2236,目的端口80。由此往前按照时间顺序排列找出TCP的三次握手。 第一次握手 ...
  • Wireshark抓包详细分析

    千次阅读 多人点赞 2019-11-26 21:51:14
    wireshark抓包介绍 这里选了wifi网卡,开始抓包 上方的文本框可以输入一些规则,对抓到的包进行过滤。 过滤策略: 只看 TCP 协议的包,可以输入 tcp 然后回车; 如果想看使用 UDP 协议的某个端口,输入 udp.port...
  • 使用wireshark抓包软件分析微信协议--zucc

    万次阅读 多人点赞 2019-06-07 21:11:56
    因为csdn自动压缩了上传的图片,导致看到的图片不太精确,稍后将发布可以下载的文档说明 下载地址,可以看到超清的图片,请自行下载 ...使用mac进行wireshark抓包,并选择使用客户端微信,同时...
  • MQTT抓包数据及分析

    千次阅读 2019-09-05 16:39:51
    MQTT抓包数据及分析 最近在使用MQTT对接云平台,由于之前一直没有接触过MQTT,网上的找的资料大部分都只是通过文字来进行表述的,对我这种小白来说说,总感觉不够直观,因此特地汇总了我从网上找的一些资料,通过...
  • TCP 报文格式分析: TCP 报文段的报头有 10 个必需的字段和 1 个可选字段。报头至少为 20 字节。 1)源端口(16位):标识发送报文的计算机端口或进程...由抓包数据可得源端口号为12762,目的端口号为80 3...
  • 网络抓包分析 目录 一、Tcp格式 二、Udp报文格式 三、TCP协议的连接管理(TCP的三次握手) 四、IP报文格式 五、ICMP 六、数据链路层帧格式 七、总结 八、自我评价 九、总评 一、...
  • Windows抓包与网络分析工具总结: Linux抓包与网络分析工具总结: Java程序网络连接分析方法总结: iptables模拟网络连接问题并分析: 2.Linux环境 以下使用Linux版本为2.6.32-642.6.2.el6.x86_64。 2.1...
  • 使用Fiddler进行网络抓包 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 文章目录使用Fiddler进行网络抓包@[toc]前言1. 下载并安装Fiddler2. Fiddler设置2.1 connections连接设置2.2...
  • fiddler 抓包详细教程

    万次阅读 多人点赞 2019-07-04 14:02:15
    为什么要先学fiddler? 学习接口测试必学http协议,如果直接先讲协议,我估计小伙伴们更懵,为了更好的理解协议,先从抓包开始。 结合抓包工具讲http协议更容易学一些。...1.用fiddler抓包时候,打开百...
  • Fiddler抓包工具

    2019-07-14 13:47:37
    Fiddler抓包工具总结 转载于cnblog:https://www.cnblogs.com/yyhh/p/5140852.html 序章 Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获、重发、编辑、转存等操作。也可以用来检测网络...
  • Fiddler 抓包工具总结

    2019-01-29 14:40:30
    Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获、重发、编辑、转存等操作。也可以用来检测网络安全。反正好处多多,举之不尽呀!当年学习的时候也蛮费劲,一些蛮实用隐藏的小功能用了...
  • 从Web安全的攻击防御方面来说,最多接触的应该就是Http...比如,分析某电商在交易支付的时候请求了哪些东西,分析某网站的登录流程都请求了哪些数据,分析某社交软件有没有偷偷的上传隐私数据等等,甚至可以拿到H...
  • Fiddler抓包使用总结

    千次阅读 多人点赞 2017-12-25 14:53:31
    Fiddler 抓包工具总结 阅读目录 1. Fiddler 抓包简介  1). 字段说明  2). Statistics 请求的性能数据分析  3). Inspectors 查看数据内容  4). AutoResponder 允许拦截制定规则的请求  5...
  • 这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、...
  • fidder抓包

    2018-05-23 11:22:44
    转载于http://www.hangge.com/blog/cache/detail_1697.html 一、Fiddler 介绍 Fiddler 是一个使用 C# 编写的 http 抓包工具。它使用灵活,功能强大,... 1,功能特点 同 Httpwatch、Firebug 这些抓包工具一样...
  • Fiddler抓包工具总结

    2020-10-31 15:01:54
    Fiddler抓包工具总结 序章 Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获、重发、编辑、转存等操作。也可以用来检测网络安全。反正好处多多,举之不尽呀!当年学习的时候也蛮费劲,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,107
精华内容 2,842
关键字:

抓包分析html中的文字内容