Wireshark无法解密HTTPS数据解决办法

介绍

网络封包  分析软件的功能 可想像成 "电工技师使用电表来量测电流、电压、电阻" 的工作 - 只是将场景移植到网络上,并将电线替换成网络线。在过去,网络封包分析软件是非常昂贵,或是专门属于营利用的软件。Ethereal的出现改变了这一切。在GNUGPL通用许可证的保障范围底下,使用者可以以免费的代价取得软件与其源代码,并拥有针对其源代码修改及客制化的权利。Ethereal是目前全世界最广泛的网络封包分析软件之一。

Wireshark无法解密HTTPS数据解决办法

问题

由于需要定位一个问题,在服务器上tcpdump抓取https数据包,然后下载到本地打开wireshark分析。然后我们下载域名私钥配置到wireshark,发现数据包居然无法解密。是wireshark配置密钥的方法不对?但谷歌了好多文章都是说这样配置的。由于对HTTPS认识不够深,一时不知道如何入手解决。没办法,只能先了解tls这个协议了,于是查看了TLS1.2的RFC文档,终于勉强解答了这个疑惑。
TLS握手整个过程

在解决这个问题之前,先整体了解一下TLS的握手全过程。省略了不常见的过程。如图:

下面按顺序介绍各握手步骤。

Client Hello

这是TLS握手的第一步,由客户端发起请求。此协议主要包括了一个客户端生成的随机字符串(用来下面生成session key),还有客户端支持的加密套件列表。如图:

Server Hello

服务器收到客户端的Client Hello数据包之后,根据客户端发来的加密套件列表,选择一个加密套件,也生成一个随机字符串返回给客户端。我们看到下图中的加密套件为,密钥交换算法使用ECDHE_RSA,对称加密算法使用AES_256_GCM_SHA384,如图:

Server Certificate

接着服务器再返回证书列表,包括证书链及域名证书。返回的证书用来给客户端验证当前连接服务器的身份,防止中间人攻击。

Server Key Exchange

Server Key Exchange协议包,由服务器返回,主要目的是与客户端交换用于数据对称加密的密钥。如图:

Server Hello Done

服务器返回此协议数据,告诉客户端已经完成返回所需用于密钥交换的数据。服务器等待客户端响应。

Client Key Exchange

客户端根据服务器返回的DH密钥数据生成DH公共数据也发给服务器,用来生成最终的pre-master-secret。如图:

Change Cipher Spec

此协议用于客户端和服务器相互告知也完成密钥交换过程,可以切换到对称加密过程。

到这里大概的TLS握手过程就结束了。为解决本文中的问题,还需要了解密钥交换的算法,RSA和Diffie

时间: 2024-07-29 15:53:26

Wireshark无法解密HTTPS数据解决办法的相关文章

Java一次性查询几十万 几百万数据解决办法

Java查询一次性查询几十万,几百万数据解决办法. 很早的时候写工具用的一个办法,当时是用来把百万数据打包成rar文件. 所以用了个笨办法. 希望高手指导一下,有什么好方法没有啊. 1.先批量查出所有数据,例子中是一万条一批. 2.在查出数据之后把每次的数据按一定规则存入本地文件. 3.获取数据时,通过批次读取,获得大批量数据. 以下是查询数据库.按批次查询 public static void  getMonthDataList() {           ResultSet rs = nul

php中curl不支持https的解决办法

在php程序中使用curl去访问https站点时,报错:Protocol https not supported or disabled in libcurl  该错误信息表示php当时编译时使用的curl库不支持https, 验证方法为你的curl安装目录/bin/curl  -V  显示如下:Protocols: dict file ftp gopher http imap pop3 rtsp smtp telnet tftp这表示curl是不支持 https的 为了支持https,需要下载

HTTP和HTTPS跨域共享session解决办法

HTTP.HTTPS协议下跨域解决session共享的办法,也许不是最好的,但是比较实用.如下是具体的解决方案. $currentSessionID=session_id(); session_id($currentSessionID); 简单示例代码: (HTTP) <?php session_start(); $currentSessionID=session_id(); $_SESSION['username']='Alixixi'; echo '<a href="https:

PHP简单实现HTTP和HTTPS跨域共享session解决办法

  这篇文章主要介绍了PHP简单实现HTTP和HTTPS跨域共享session解决办法,本文讲解的方法相对简单,需要的朋友可以参考下 HTTP.HTTPS协议下session共享解决cookie失效 的办法:(也许不是最好的,但是实用) 原理就是把session id设置到本地的cookie, 代码如下: $currentSessionID = session_id(); session_id($currentSessionID ); 简单事例代码: (HTTP) 代码如下: session_s

浏览器跨域获取Lrc歌词数据的解决办法

解决|浏览器|数据 获取同一个域的数据,可以通过XMLHTTP组件或IFRAME来实现,不存在跨域访问的权限问题,因此比较简单.     但如果要访问不同域的数据时,由于浏览器的安全设置,XMLHTTP没有权限获取数据,而IFRAME没有权限将获取的数据传递给父窗口,似乎没有其它解决办法.     顿悟--     网页内引用不同域的脚本并不会提示权限不足,对了,就是它没错!     解决方法找到了,现在来简单测试一下:     首先在51js.com服务器上新建一页面(Test.html).

在Jsp程序读取或向DB写入数据乱码解决办法

js|程序|解决|数据 在Jsp程序读取或向DB写入数据乱码解决办法 在基于JAVA的编程中,经常会碰到汉字的处里及显示的问题,比如一大堆乱码或问号.这是因为JAVA中默认的编码方式是UNICODE,而中国人通常使用的文件和DB都是基于GB2312或者BIG5等编码,故会出现此问题.以前我也经常为这个问题而苦恼,后来经查了些资料,终于解决了,我知道一定有很多朋友也会碰到这个问题,所以特就总结了一下,来拿出来让大家一起分享了.1.在网页中输出中文.JAVA在网络传输中使用的编码是"ISO-8859

servlet中文数据存入数据库为乱码的解决办法

今天在测试从web端存入数据到数据库,结果存入数据库的中文数据出现乱码.当然读取出来的时候也是乱码 乱码的原因是tomcat的内部编码格式iso8859-1导致.  而在每个jsp页面设置的utf-8仅仅是该页面显示是用utf-8,而你用form表单提交的数据仍然是iso8859-1.所以要在接受form表单数据的servlet页面加上一行代码request.setCharacterEncoding("utf-8"). 为了避免每页都要写request.setCharacterEnco

数据-redis内存溢出有什么好一点的解决办法.

问题描述 redis内存溢出有什么好一点的解决办法. 小弟又来唠叨了, redis里面有什么方法当内存达到限制值,把过期的数据存到硬盘不存到内存,通过这样的方式来释放内存 解决方案 过期的数据redis内存不够的时候会自动清除来释放内存.

多线程-求 有关 高并发 数据区 读取更新 数据 的解决办法

问题描述 求 有关 高并发 数据区 读取更新 数据 的解决办法 问题:高并发 数据库取数据,每次取到一条数据后更新这条数据的状态为已取用过. 环境:3台服务器跑应用 处理请求,多线程数据库取数据 有点类似 12306的买票,查找过资料 有看到 1W人 同时抢一张票的问题. 现在考虑的问题是,如果票是足够多的,如何解决高并发取数据冲突的问题,如果用加锁的方式,会出现大量请求都取一条数据,导致 等待时间太长. 有没有 好的方案,可以避免同时请求到同一条数据. 解决方案 可以用大数据分布式云计算物联网