SSL/TLS介绍以及wireshark抓包TLS Handshake报文

这篇具有很好参考价值的文章主要介绍了SSL/TLS介绍以及wireshark抓包TLS Handshake报文。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.概念

SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是一种安全协议,用于在计算机网络上实现加密通信。SSL最初由美国Netscape开发,随后发展为TLS,并得到了广泛应用,成为互联网上保护通信安全的标准协议。

TLS 位于 TCP 之上(也有基于 UDP 的,称为DTLS,这里不讨论它),如图所示。
ssl加密过程wireshark抓包,计算机网络,ssl,wireshark,网络协议,计算机网络,网络

SSL/TLS是在应用层和传输层之间的一个安全协议,通信的双方在进行通信前需要握手,通过在通信的两端建立一个安全的通道,保护数据在传输过程中的安全性。以下是SSL/TLS提供的几个重要的安全功能:

  1. 机密性(Confidentiality): SSL/TLS使用加密算法对数据进行加密,防止未经授权的第三方窃取和读取敏感信息。只有身份验证通过的终端才能解密数据。
  2. 完整性(Integrity): SSL/TLS使用消息认证码(MAC)或哈希函数来确保数据在传输过程中没有被篡改或损坏,接收方可以验证数据的完整性,确保数据在传输期间没有被篡改。
  3. 身份验证(Authentication): SSL/TLS提供了一种机制,用于验证通信的两端的身份。这可以防止中间人攻击和伪造身份的风险。通常使用数字证书来验证服务器和客户端的身份。
  4. 抗重放攻击(Resistance to Replay Attacks): SSL/TLS使用时间戳和随机数来抵御重放攻击。每个通信会话都用独特的随机数,从而防止攻击者重复使用已经捕获到的通信数据。
  5. 前向保密(Forward Secrecy): SSL/TLS支持前向保密,即使长期密钥泄漏,过去的通信数据也不会被攻击者解密。这是通过动态生成临时会话密钥并定期更换来实现的。

1.1 SSL/TLS发展历史

ssl加密过程wireshark抓包,计算机网络,ssl,wireshark,网络协议,计算机网络,网络

1.2 TLS两个阶段

TLS协议可分为两个阶段:

  • 握手(Handshake)阶段,目的是通信双方约定好在数据传输阶段使用的加密算法及密钥(为效率考虑,在数据传输阶段会使用对称密钥算法);
  • 数据传输阶段,即发送到网络前加密数据,从网络收到数据后解密数据。

1.3 TLS报文头

ssl加密过程wireshark抓包,计算机网络,ssl,wireshark,网络协议,计算机网络,网络

  • 第1字节是类型(目前有4种类型):
 Record Type Values       dec      hex
 -------------------------------------
 CHANGE_CIPHER_SPEC        20     0x14
 ALERT                     21     0x15
 HANDSHAKE                 22     0x16
 APPLICATION_DATA          23     0x17
  • 第2-3字节是版本(目前有4种版本):
 Version Values            dec     hex
 -------------------------------------
 SSL 3.0                   3,0  0x0300
 TLS 1.0                   3,1  0x0301
 TLS 1.1                   3,2  0x0302
 TLS 1.2                   3,3  0x0303
  • 第4-5字节是长度(不包含报文头本身长度)

2.TLS Handshake

2.1 Handshake具体过程

ssl加密过程wireshark抓包,计算机网络,ssl,wireshark,网络协议,计算机网络,网络

  • 第1步:客户端发送ClientHello报文。作用是告诉服务器,本客户端所支持的TLS协议版本,以及支持的加密算法等。
  • 第2步:服务器发送ServerHello报文。主要是告诉客户端,服务器选择了一个它认为安全的,且双方都支持的加密算法;如果服务器认为客户端所支持的加密算法都不安全,则服务器可以发送一个ALERT报文。
  • 第3步:服务器发送Certificate报文。其主要作用是服务器发送自己的证书给客户端。
  • 第4步:服务器发送ServerKeyExchange。其作用是提供一些信息,以便双方有足够的信息来约定一个数据传输阶段所使用的对称密钥算法的密钥。这个报文是可选的,如果使用Diffie-Hellman方式来约定密钥,则这个是必须的;如果是RSA方式来约定密钥,它可以省略,参见后面介绍的ClientKeyExchange报文。
  • 第5步:服务器发送CertificateRequest。作用是开启”双向认证(Mutual authentication)“模式,即不仅客户端要验证服务器,而且服务器还要验证客户端。这种方式在https网站中很少使用,如果对https网站进行抓包,一般不会有这个报文。
  • 第6步:服务器发送ServerHelloDone。服务器发送此消息以指示握手消息的结束。
  • 第7步:客户端发送Certificate报文(仅当客户端收到了CertificateRequest时才发送,即服务器开启了双向认证)。主要作用是客户端发送自己的证书给服务器。
  • 第8步:客户端发送ClientKeyExchange报文。其主要作用是提供一些信息,以便双方有足够的信息来约定一个数据传输阶段所使用的对称算法的密钥。如RSA方式,则客户端生成一个对称算法的密钥后,使用服务器的公钥加密传送给服务器。如果是Diffie-Hellman方式,则传送必要信息以便双方可以按约定方式生成一个密钥。
  • 第9步:客户端发送CertificateVerify报文(仅当客户端收到了CertificateRequest时才发送,即服务器开启了双向认证)。主要作用是客户端发送一段它签名的信息给服务器,这样服务器使用客户端的公钥就可以验证签名,从而验证客户端。
  • 第10步:客户端发送ChangeCipherSpec报文,告诉服务器你可以使用加密模式了。注:ChangeCipherSpec报文不属于Handshake报文,它是TLS顶级报文,存在于TLS报文头中。
  • 第11步:客户端发送Finished报文,告诉服务器我准备好加密通信了。
  • 第12步:服务器发送ChangeCipherSpec报文,告诉客户端你可以使用加密模式了。
  • 第13步:服务器发送Finished报文,告诉客户端我准备好加密通信了。至此,握手结束。
2.1.1 单向认证和双向认证

握手阶段,如果服务器发送了CertificateRequest,就意味着开启”双向认证“。和单向认证相比,”双向认证“在握手阶段多了下面3种报文:

  • 服务器发送的 CertificateRequest
  • 客户端发送的 CertificateCertificateVerify
2.1.2 复用TLS协商结果

当客户端和服务器在TLS握手过程中建立了一个安全连接后,可以通过复用TLS协商结果来提升后续通信的效率和性能。这通常可以通过两种方式来实现:Session Identifier 和 Session Ticket。

Session Identifier(会话标识符)

Session Identifier 是一种简单的方式,它使用一个唯一的标识符来引用之前的TLS会话。

  1. 建立会话:在TLS握手过程中,如果服务器支持会话复用,它会在ServerHello消息中包含一个Session Identifier。客户端可以在以后的请求中使用这个标识符来复用会话。
  2. 客户端发送请求:客户端在HTTP请求中包含之前建立的Session Identifier。
  3. 服务器检查会话:当服务器收到请求时,它会检查Session Identifier是否有效。如果有效,服务器可以使用之前协商的加密参数和密钥,而不需要进行完整的TLS握手。

Session Identifier 的优点是它很简单,但它的缺点是,如果服务器重新启动或者会话超时,之前的Session Identifier就会失效,需要重新建立会话。

Session Ticket(会话票据)

Session Ticket 是一种更灵活的方式,它允许会话信息在服务器重启后仍然有效。

  1. 生成会话票据:在TLS握手完成后,服务器可以将会话信息加密并存储在一个会话票据中,然后发送给客户端。
  2. 客户端发送请求:客户端在HTTP请求中包含会话票据。
  3. 服务器解密会话票据:当服务器收到请求时,它可以解密会话票据并使用其中的会话信息来恢复会话。

Session Ticket 的优点是它可以在服务器重启后仍然保持会话的有效性,但需要确保会话票据的安全性,以防止被恶意利用。

总的来说,Session Identifier 是一种简单且有效的会话复用方式,但在某些情况下可能会失效。Session Ticket 提供了更灵活的会话复用机制,可以在服务器重启后仍然保持会话的有效性。服务器可以根据具体情况选择使用其中一种或两者结合使用。

2.2 Handshake报文格式

                         |
                         |
                         |
       Record Layer      |  Handshake Layer
                         |                              |                              |
                         |                              |                              |
+----+----+----+----+----+----+----+----+----+------ - -+----+----+----+----+------ - -+ ......
| 22 |    |    |    |    |    |    |    |    |          |    |    |    |    |          |
|0x16|    |    |    |    |    |    |    |    |message   |    |    |    |    |message   |
+----+----+----+----+----+----+----+----+----+------ - -+----+----+----+----+------ - -+
  /             /--/--/  | \    \----\-----\            | \    \----\-----\            |
 /                /      |  \         \                    \         \
type: 22         /       |   \     handshake message length \    handshake message length
                /             type                          type
               /
         length: arbitrary (up to 16k)


 Handshake Type Values    dec      hex
 -------------------------------------
 HELLO_REQUEST              0     0x00
 CLIENT_HELLO               1     0x01
 SERVER_HELLO               2     0x02
 CERTIFICATE               11     0x0b
 SERVER_KEY_EXCHANGE       12     0x0c
 CERTIFICATE_REQUEST       13     0x0d
 SERVER_HELLO_DONE         14     0x0e
 CERTIFICATE_VERIFY        15     0x0f
 CLIENT_KEY_EXCHANGE       16     0x10
 FINISHED                  20     0x14

共有10种类型的Handshake报文,多个Handshake报文可以组合成一个TLS Record,上面演示中就有两个Handshake报文。具体可参考:10种 Handshake报文

具体可参考:

3. wireshark抓取TLS报文

以ping https://www.csdn.net为例
ssl加密过程wireshark抓包,计算机网络,ssl,wireshark,网络协议,计算机网络,网络

因为这是一次单向认证的Handshake过程,故比较简单。

3.1 第一次握手

ssl加密过程wireshark抓包,计算机网络,ssl,wireshark,网络协议,计算机网络,网络

重点可以关注红框里的内容,ClientHello报文告诉了服务器端,客户端支持的TLS协议的最高版本(TLS 1.2)以及支持的加密算法

3.2 第二次握手

ssl加密过程wireshark抓包,计算机网络,ssl,wireshark,网络协议,计算机网络,网络

服务器给客户端返回的消息注意关注TLS协议版本,服务器选择的加密算法(TLS_AES_128_GCM_SHA256),以及Change Cipher Spec报文(告诉客户端可以开始加密通信了)。

3.3 第三次握手

ssl加密过程wireshark抓包,计算机网络,ssl,wireshark,网络协议,计算机网络,网络

3.4 第四次握手

主要进行数据传输,不进行赘述。文章来源地址https://www.toymoban.com/news/detail-772198.html

到了这里,关于SSL/TLS介绍以及wireshark抓包TLS Handshake报文的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • EMQX启用双向SSL/TLS安全连接以及java连接

    作为基于现代密码学公钥算法的安全协议,TLS/SSL 能在计算机通讯网络上保证传输安全,EMQX 内置对 TLS/SSL 的支持,包括支持单/双向认证、X.509 证书、负载均衡 SSL 等多种安全认证。你可以为 EMQX 支持的所有协议启用 SSL/TLS,也可以将 EMQX 提供的 HTTP API 配置为使用 TLS。 强认证

    2024年02月11日
    浏览(23)
  • SSL/TLS协议的概念、工作原理、作用以及注意事项

    个人主页: insist--个人主页​​​​​​ 本文专栏:网络基础——带你走进网络世界 本专栏会持续更新网络基础知识,希望大家多多支持,让我们一起探索这个神奇而广阔的网络世界。 目录 一、SSL/TLS协议的基本概念

    2024年02月10日
    浏览(29)
  • 什么是HTTPS加密协议?HTTPS安全传输原理,SSL和TLS介绍,NGINX如何配置SSL证书

    HTTPS是超文本传输协议(HTTP)的安全版本。它使用SSL(安全套接层)或TLS(传输层安全)加密协议来保护数据传输的安全性和机密性,以防止未经授权的访问和窃听。HTTPS协议通常用于处理敏感信息,如在线支付或登录凭证等。可以通过URL的前缀来识别一个网站是否使用了H

    2024年02月03日
    浏览(38)
  • 国密SSL通信协议详细介绍与抓包分析

    最近研究有关SSL协议的物联网安全协议,看了很多资料并且结合TASSL在ubuntu上跑了一个简单的demo,因此有了一些自己的理解,那么就详细讲解一下我所知道的SSL,相信这一篇文章就可以让你全面了解SSL。 SSL:Secure Sockets Layer 安全套接字协议 ,位于 TCP/IP 协议与各种应用层协议

    2023年04月17日
    浏览(27)
  • Wireshark抓包及DNS报文分析

    Wireshark抓包及DNS报文分析 来来来,点我进行5分钟视频学习,冲冲冲 一、抓包整体描述 第一行,帧Frame 2 指的是要发送的数据块,其中,所抓帧的序号为2,捕获字节数等于传送字节数:696字节。 第二行,以太网,有线局域网技术,是数据链路层。源Mac地址为00e04c3639fa;目标

    2023年04月08日
    浏览(38)
  • 使用wireshark抓包理解tcp协议和tls

    首先下载安装wireshark 打开软件 1.选则自己连结的网络; 此时就会捕获的数据 2.加上端口过滤。 3.启动一个本地的 http 服务(这里采用的 nodejs ); node server.js 4. curl http://localhost:3000 一个TCP报文段的最大长度为 65495 字节. TCP封装在IP内,IP数据报最大长度 2^16-1 ,头部最小 20 ,

    2023年04月25日
    浏览(28)
  • ssl.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] 错误处理

    从python3.9.5升级到3.11.1 原来用poplib收取邮件的脚本运行失败: 查看python升级变化的文档,提示在3.10版有涉及: 应该是ssl相关的版本变化引起。 为使新版的SSL与原服务器的适配,增加设置: 运行发现已经能进一步了,但是又报错误: 此为自签证书错误,借处理爬虫时,忽略

    2024年02月12日
    浏览(34)
  • NGINX SSL_do_handshake() failed 报错处理

    nginx 添加配置如下: 解决的错误如下: ** SSL_do_handshake() failed (SSL: error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:SSL alert number 40) while SSL handshaking to upstream **

    2024年02月15日
    浏览(35)
  • nginx转发https:SSL_do_handshake() failed

    大概情况:前端项目是vue,部署到nginx,由于项目中使用了第三方接口,直接访问会存在跨域问题,所以使用nginx进行转发,但是请求的时候报错了。 错误日志 SSL_do_handshake() failed (SSL: error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:SSL alert number 40) while SSL handshaking t

    2024年02月01日
    浏览(44)
  • Nginx错误解决实战:SSL_do_handshake() failed

    在使用Nginx进行SSL握手时,可能会遇到这样的错误:“SSL_do_handshake() failed (SSL: error:14094085:SSL routines:ssl3read_bytes:ccs received early)”。这个错误通常意味着在SSL握手过程中,Nginx接收到了过早的ccs(Change Cipher Spec)消息。那么,我们应该如何解决这个问题呢? ## 错误分析 这个

    2024年02月04日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包