专栏首页FreeBuf传输层安全协议抓包分析之SSL/TLS

传输层安全协议抓包分析之SSL/TLS

1. 协议介绍

SSL/TLS是保护计算机网络通讯安全的一类加密协议,它们在传输层上给原先非安全的应用层协议提供加密保护,如非安全的HTTP协议即可被SSL/TLS保护形成安全的HTTPS协议。 SSL、TLS协议其实是有所差异的,TLS协议是继承了SSL协议并写入RFC,标准化后的产物。因此,通常使用SSL来指代SSL协议和TLS协议。

SSL (Secure Socket Layer)安全套接字层协议

• SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。

• 分为SSL记录协议和SSL握手协议。

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

• 用于两个应用程序之间提供保密性和数据完整性。

• 分为TLS记录协议和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协议运作流程

5. SSL/TLS握手阶段抓包解析

本次实验使用浏览器访问https://www.baidu.com,使用WireShark抓包获取其中的SSL/TLS握手阶段的数据包并简要分析。

1) 客户端发送ClientHello

客户端发起握手协商操作,它将发送一个ClientHello消息给服务器,消息中明确了其所支持的SSL/TLS版本、Cipher suite加密算法组合等,可以让服务器选择,并提供了一个客户端随机数,用于以后生成会话密钥使用。

2) 服务器返回ServerHello

服务器将返回一个ServerHello消息,该消息包含了服务器选择的协议版本、加密算法,以及服务器随机数、会话ID等内容。其中,服务器选择的协议版本应小于等于客户端ClientHello中的协议版本。

本次实验中服务器确认使用TLS 1.2版本的协议,并选择TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256加密算法组合。

3) 服务器发送Certificate

服务器发送ServerHello消息,选择好协议版本和加密算法组合后,将发送Certificate消息,该消息包含了服务器的证书等信息,可通过证书链认证该证书的真实性。根据选择的加密算法组合的不同,服务器证书中的公钥也可被用于加密后面握手过程中生成的Premaster secret。

4) 服务器发送ServerKeyExchange

服务器发送ServerKeyExchange消息,消息中包含了服务器这边的EC Diffie-Hellman算法相关参数。此消息一般只在选择使用DHE 和DH_anon等加密算法组合时才会由服务器发出。

5) 服务器发送ServerHelloDone

服务器发送ServerHelloDone消息,告知客户端服务器这边握手相关的消息发送完毕。

6) 客户端发送ClientKeyExchange

客户端发送ClientKeyExchange消息,消息中包含客户端这边的EC Diffie-Hellman算法相关参数,然后服务器和客户端都可根据接收到的对方参数和自身参数运算出Premaster secret,为生成会话密钥做准备。

7) 客户端发送ChangeCipherSpec

客户端向服务器发送ChangeCipherSpec消息,通知服务器此消息以后客户端会以加密方式发送数据。

8) 客户端发送Finished

客户端使用之前握手过程中获得的服务器随机数、客户端随机数、Premaster secret计算生成会话密钥,然后使用该会话密钥加密之前所有收发握手消息的Hash和MAC值,发送给服务器,服务器将相同的会话密钥(使用相同方法生成)解密此消息,校验其中的Hash和MAC值。

9) 服务器发送ChangeCipherSpec

服务器发送ChangeCipherSpec消息,通知客户端此消息以后服务器会以加密方式发送数据。

10) 服务器发送Finished

服务器使用会话密钥加密(生成方式与客户端相同,使用握手过程中获得的服务器随机数、客户端随机数、Premaster secret计算生成)之前所有收发握手消息的Hash和MAC值,发送给客户端去校验。

若客户端服务器都校验成功,握手阶段完成,双方将按照SSL记录协议的规范使用协商生成的会话密钥加密发送数据。

6. 参考资料

https://en.wikipedia.org/wiki/Transport_Layer_Security

http://www.cnblogs.com/happyhippy/archive/2007/05/14/746476.html

http://blog.csdn.net/fw0124/article/details/40983787

*本文原创作者:ArkTeam/Snowman,未经许可禁止转载

本文分享自微信公众号 - FreeBuf(freebuf),作者:ArkTeam/Snowman

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-10-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 八百元八核的服务器?二手服务器搭建指南

    当你在花近万元剁手i7 5960x时,有没有想过,在华强北的某个角落,有一群人靠几百块收来的二手服务器配件,搭建了一台性能同等,甚至更强的服务器! 首先,在看此...

    FB客服
  • Glupteba恶意软件变种分析

    最近发现了恶意软件glupteba的网络攻击行为。它是一个旧的恶意软件,曾在名为“windigo”的行动中出现过,并通过漏洞传播给windows用户。

    FB客服
  • 工控安全入门之攻与防

    2010 年 6 月,一个名为 Stuxnet处于休眠状态的病毒潜伏在伊朗的铀浓缩设施网络中,Stuxnet在位于纳坦兹的离心机中被激活,控制了30%的纳坦兹设...

    FB客服
  • HTTP协议状态码详解

    使用PHP/JSP 或者javascript都会用到http的不同状态,一些常见的状态码为: 200 – 服务器成功返回网页 404 – 请求的网页不存在 5...

    用户1093975
  • 客户端和浏览器端交互模型

    河湾欢儿
  • HTTP协议状态码详解(HTTP Status Code)

    使用ASP.NET/PHP/JSP 或者javascript都会用到http的不同状态,一些常见的状态码为: 200 – 服务器成功返回网页 404 – ...

    张善友
  • 你不得不知道的HTTP状态码有哪些

    100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。

    黄泽杰
  • Python网络_TCP/IP简介

    本章将介绍tcp网络编程,更多内容请参考:Python学习指南 Socket是网络编程的一个抽象概念,通常我们用一个Socket表示"打开了一个网络连接",而...

    用户1174963
  • HTTP

    超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计...

    刘亦枫
  • TCP/IP协议族(二) HTTP报文头解析

    本篇博客我们就来详细的聊一下HTTP协议的常用头部字段,当然我们将其分为请求头和响应头进行阐述。下方是报文头每个字段的格式,首先是头部字段的名称,如Accept...

    lizelu

扫码关注云+社区

领取腾讯云代金券